]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
same as last one in another place
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 2 Nov 2010 16:50:04 +0000 (11:50 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 2 Nov 2010 16:50:04 +0000 (11:50 -0500)
src/mod/endpoints/mod_sofia/mod_sofia.c

index 5f6747baaae9e2408aa79a284356045d5103c3c7..3c1790368a34239a045f91b579b54a12ad258e3b 100644 (file)
@@ -4092,8 +4092,9 @@ static int notify_callback(void *pArg, int argc, char **argv, char **columnNames
        char *es = argv[5];
        char *body = argv[6];
        char *id = NULL;
-       char *p, *contact;
-
+       char *contact;
+       sofia_destination_t *dst = NULL;
+       char *route_uri = NULL;
 
        if (profile_name && strcasecmp(profile_name, profile->name)) {
                if ((ext_profile = sofia_glue_find_profile(profile_name))) {
@@ -4105,16 +4106,24 @@ static int notify_callback(void *pArg, int argc, char **argv, char **columnNames
        switch_assert(id);
        contact = sofia_glue_get_url_from_contact(contact_in, 1);
 
-       if ((p = strstr(contact, ";fs_"))) {
-               *p = '\0';
-       }
 
-       nh = nua_handle(profile->nua, NULL, NUTAG_URL(contact), SIPTAG_FROM_STR(id), SIPTAG_TO_STR(id), SIPTAG_CONTACT_STR(profile->url), TAG_END());
+       dst = sofia_glue_get_destination((char *) contact);
+       
+       if (dst->route_uri) {
+               route_uri = sofia_glue_strip_uri(dst->route_uri);
+       }
 
+       nh = nua_handle(profile->nua, NULL, NUTAG_URL(dst->contact), SIPTAG_FROM_STR(id), SIPTAG_TO_STR(id), SIPTAG_CONTACT_STR(profile->url), TAG_END());
+       
        nua_handle_bind(nh, &mod_sofia_globals.destroy_private);
 
-       nua_notify(nh, NUTAG_NEWSUB(1), SIPTAG_EVENT_STR(es), SIPTAG_CONTENT_TYPE_STR(ct), TAG_IF(!zstr(body), SIPTAG_PAYLOAD_STR(body)), TAG_END());
+       nua_notify(nh, NUTAG_NEWSUB(1), 
+                          TAG_IF(dst->route_uri, NUTAG_PROXY(route_uri)), TAG_IF(dst->route, SIPTAG_ROUTE_STR(dst->route)),
+                          SIPTAG_EVENT_STR(es), SIPTAG_CONTENT_TYPE_STR(ct), TAG_IF(!zstr(body), SIPTAG_PAYLOAD_STR(body)), TAG_END());
+       
 
+       switch_safe_free(route_uri);
+       sofia_glue_free_destination(dst);
 
        free(id);
        free(contact);
@@ -4199,7 +4208,7 @@ static void general_event_handler(switch_event_t *event)
                                        nua_notify(nh,
                                                           NUTAG_NEWSUB(1),
                                                           NUTAG_WITH_THIS(profile->nua),
-                                                          TAG_IF(dst->route_uri, NUTAG_PROXY(route_uri)), TAG_IF(dst->route, SIPTAG_ROUTE_STR(dst->route)),
+                                                          TAG_IF(dst->route_uri, NUTAG_PROXY(dst->contact)), TAG_IF(dst->route, SIPTAG_ROUTE_STR(dst->route)),
                                                           SIPTAG_EVENT_STR(es), TAG_IF(ct, SIPTAG_CONTENT_TYPE_STR(ct)), TAG_IF(!zstr(body), SIPTAG_PAYLOAD_STR(body)), TAG_END());