Hi, all!

Preamble:
I got new equipment - videophone. I tried to make it work with OpenSER (version 1.1.0).
Schema:
VIDEOPHONE -> OpenSER -> VIDEOPHONE
I tried to make simple call.

It works but not behind NAT.

With rtpproxy OpenSER logs show such messages:
ERROR: force_rtp_proxy2: can't extract media port from the message
Calls last only few seconds than it get disconnected.

With mediaproxy OpenSER logs show following:
Oct 16 18:01:22 sip mediaproxy[20251]: error: uncaptured python exception, closing channel <rtphandler.CommandHandler connected '' at 0x68 2ecc> (exceptions.ValueError:invalid literal for int(): 5012/1 [/usr/lib/python2.3/asyncore.pyc|readwrite|86] [/usr/lib/python2.3/asyncore .pyc|handle_read_event|390] [/usr/local/mediaproxy/modules/rtphandler.py|handle_read|441] [/usr/local/mediaproxy/modules/rtphandler.py|pro cess|531] [/usr/local/mediaproxy/modules/rtphandler.py|__init__|988] [/usr/local/mediaproxy/modules/rtphandler.py|setCaller|880])


I found that source of these troubles is that videophone generates INVITE`s in different format than for example Sipura does.
Media streams are described like these:
m=audio 5012/1 RTP/AVP 98 0 8.
m=video 5010/1 RTP/SAVPF 99.

As you can see, sub-field "port" is not in usual format, but it contains number of ports according to RFC2327:
m=<media> <port>/<number of ports> <transport> <fmt list>

So, I spended few hours examinating sources of rtpproxy and mediaproxy modules and made small trick (patch) to mediaproxy module.
I didn't understand logic of rtpproxy module because lack of time.
Here it is:
--- ./modules/mediaproxy/mediaproxy.c   2006-03-24 21:04:56 +0300
+++ ./modules/mediaproxy/mediaproxy_new.c       2006-10-17 17:53:54 +0400
@@ -825,7 +825,7 @@
getMediaStreams(str *sdp, str *sessionIP, StreamInfo *streams, int limit)
{
    str tokens[2], block, zone;
-    char *ptr, *sdpEnd;
+    char *ptr, *sdpEnd, *tmpptr;
    int i, count, streamCount, result;

    sdpEnd = sdp->s + sdp->len;
@@ -845,6 +845,9 @@
                "line in SDP body\n");
            return -1;
        }
+
+       tmpptr=strchr(tokens[1].s,'/');
+ if ((tmpptr-tokens[1].s)<tokens[1].len ) tokens[1].len=tmpptr-tokens[1].s;

        streams[i].type = tokens[0];
        streams[i].port = tokens[1];

It works for me, but I know it is not correct solution.
I hope my small investigation would be useful.
Thanks for your attention.

With best regards,
Artur Yakupov

_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel

Reply via email to