At 10:16 PM 1/9/2003, Nils Ohlmeier wrote:
For questions about where and how to intercept and
change the messages in the
transaction management of SER Jiri is your man.
That's true unfortunately :-)
Let me start from the simplest case: firewalls. That is easier because
you do not need to mangle SIP requests. In firewall scenarios, you just
create a new module, link it with transaction module using callbacks
(those that are triggered on transaction completion), and when callbacks
occur, you open up or close pinholes.
Design issues:
- for efficency reasons, it is beneficial to open persistent connections
to the FCP server. Like in usrloc module each child process opens up
an SQL connection, each ser child in fcp-client module would have to
open up an FCP connection (they cannot share a single TCP connection).
- there is a question of time validity of the rules. Clearly, keeping
call state to be able to send rule keep-alives to fcpd is not very
efficient. I think the right way is to use session-timer -- that makes
UAs to send "SIP keep-alives" which are then translated into FCP
keep-alives by ser. Call state is kept only in end-devices and propagated
through proxy to firewall. It however assumes session-timer support.
Quite some phones do it today, quite few get it right. Well -- perhaps
we can afford throwing users of phones with missing or broken session-timer
support over board?
- early media -- if media is sent before INVITE completes, the FCP modules
should bind itself to some other callbacks too and watch for early-media
situations
- media sources -- with SIP, noone really knows from where media comes.
The rules thus look should permit any sender for a give destination.
If one wished to have a more restrictive policy, one could use heurisitcs,
and assume that other party's IP address in Contact is from where media
will be coming.
NATs are even worse -- digest firewalls first :-)
-Jiri