Hi Pascal,

Please try this revised patch. It is also against svn, take a new copy of the tm module and apply it.

Thanks and regards,

--
Anca Vamanu
www.voice-system.ro



Pascal Maugeri wrote:
Hi Anca

We just tested the patch you sent us but we don't see any difference.

Just in case, we recompiled the whole server (first we updated to rev 6700) and applied the patch you kindly sent us:

    svn update
    ...
    patch -p0 < tm_proto_fix.patch
    make all
    make install
service opensips restart

The NOTIFY message is still sent over UDP :-(

What information could we send you in order to help you ?

A big thank you for your help and fast answer!

Cheers
Pascal

On Tue, Mar 9, 2010 at 4:55 PM, Anca Vamanu <[email protected] <mailto:[email protected]>> wrote:

    Hi Pascal,

    We found the problem - the socket on which the Subscribe was
    received was always used when sending the Notify.
    Find attached a patch for tm module that should fix this problem.
    Please test and report the results.

    Regards,

-- Anca Vamanu
    www.voice-system.ro <http://www.voice-system.ro>



    Pascal Maugeri wrote:

        Hi

        Using opensips 1.6 we need to have the presence module to send
        NOTIFY over TCP rather than UDP when the size of the message
        is greater than a given MTU.

        We tried to force it sending a SUBSCRIBE with transport=tcp in
        Contact header:

           SUBSCRIBE sip:[email protected]
        <mailto:sip%[email protected]>
           <mailto:sip%[email protected]
        <mailto:sip%[email protected]>> SIP/2.0

           [...]
           Contact: <sip:[email protected]:5233;transport=tcp>
           Event: presence


        but the NOTIFY messages are sent over UDP (observe the
        "transport=tcp" in the request line):

           NOTIFY sip:[email protected]:5233;transport=tcp SIP/2.0
           [...]
           Contact: <sip:[email protected]:6667
        <http://sip:[email protected]:6667>
           <http://sip:[email protected]:6667>>

           Subscription-State: active;expires=120
           Content-Type: application/pidf+xml
           Content-Length: 1254


        Could you please let me know what we should do to enable the
        sending over TCP ? I don't understand what we're doing wrong.

        Cheers
        Pascal
        ------------------------------------------------------------------------



        _______________________________________________
        Users mailing list
        [email protected] <mailto:[email protected]>
        http://lists.opensips.org/cgi-bin/mailman/listinfo/users

    _______________________________________________
    Users mailing list
    [email protected] <mailto:[email protected]>
    http://lists.opensips.org/cgi-bin/mailman/listinfo/users


------------------------------------------------------------------------

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
Index: modules/tm/uac.c
===================================================================
--- modules/tm/uac.c	(revision 6694)
+++ modules/tm/uac.c	(working copy)
@@ -207,6 +207,7 @@
 	int ret, flags, sflag_bk;
 	int backup_route_type;
 	unsigned int hi;
+	struct socket_info* send_sock;
 
 	ret=-1;
 	
@@ -218,21 +219,26 @@
 
 	LM_DBG("next_hop=<%.*s>\n",dialog->hooks.next_hop->len,
 			dialog->hooks.next_hop->s);
-	/* it's a new message, so we will take the default socket */
-	if (dialog->send_sock) {
-		if (uri2su( dialog->hooks.next_hop, &to_su,
-		dialog->send_sock->proto)==-1) {
-			goto error2;
-		}
-	} else {
-		dialog->send_sock = uri2sock(0, dialog->hooks.next_hop, &to_su,
+
+	/* calculate the socket corresponding to next hop */
+	send_sock = uri2sock(0, dialog->hooks.next_hop, &to_su,
 			PROTO_NONE);
-		if (dialog->send_sock==0) {
-			ret=ser_error;
-			LM_ERR("no socket found\n");
-			goto error2;
+	if (send_sock==0) {
+		ret=ser_error;
+		LM_ERR("no socket found\n");
+		goto error2;
+	}
+	/* if a send socket defined verify if the same protocol */
+	if(dialog->send_sock) {
+		if(send_sock->proto != dialog->send_sock->proto)
+		{
+			dialog->send_sock = send_sock;
 		}
 	}
+	else
+	{
+		dialog->send_sock = send_sock;
+	}
 
 	new_cell = build_cell(0);
 	if (!new_cell) {
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to