]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6270 add client_port to SIP Registration events
authorBrian West <brian@freeswitch.org>
Wed, 26 Feb 2014 03:49:35 +0000 (21:49 -0600)
committerBrian West <brian@freeswitch.org>
Wed, 26 Feb 2014 03:49:35 +0000 (21:49 -0600)
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_presence.c
src/mod/endpoints/mod_sofia/sofia_reg.c

index 54beceb3fdb4689c382b00186e3b91b25830417f..5249bee570a636a6ddf474221f9aef48f91bcf54 100644 (file)
@@ -903,7 +903,7 @@ void sofia_reg_auth_challenge(sofia_profile_t *profile, nua_handle_t *nh, sofia_
                                                          sofia_regtype_t regtype, const char *realm, int stale, long exptime);
 auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization,
                                                                sip_t const *sip,
-                                                               sofia_dispatch_event_t *de, const char *regstr, char *np, size_t nplen, char *ip, switch_event_t **v_event,
+                                                               sofia_dispatch_event_t *de, const char *regstr, char *np, size_t nplen, char *ip, int network_port, switch_event_t **v_event,
                                                                long exptime, sofia_regtype_t regtype, const char *to_user, switch_event_t **auth_params, long *reg_count, switch_xml_t *user_xml);
 
 
index 2075cc914febfab3da4cf1f9a3c46da6f8d40ca9..bbf7b50f9ddf839d2cd94dce93efa7dbc914d6d3 100644 (file)
@@ -34,6 +34,7 @@
  * Joseph Sullivan <jossulli@amazon.com>
  * Emmanuel Schmidbauer <e.schmidbauer@gmail.com>
  * William King <william.king@quentustech.com>
+ * David Knell <david.knell@telng.com>
  *
  * sofia.c -- SOFIA SIP Endpoint (sofia code)
  *
@@ -1316,9 +1317,10 @@ static void our_sofia_event_callback(nua_event_t event,
 
                if (authorization) {
                        char network_ip[80];
-                       sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), NULL);
+                       int network_port;
+                       sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &network_port);
                        auth_res = sofia_reg_parse_auth(profile, authorization, sip, de,
-                                                                                       (char *) sip->sip_request->rq_method_name, tech_pvt->key, strlen(tech_pvt->key), network_ip, NULL, 0,
+                                                                                       (char *) sip->sip_request->rq_method_name, tech_pvt->key, strlen(tech_pvt->key), network_ip, network_port, NULL, 0,
                                                                                        REG_INVITE, NULL, NULL, NULL, NULL);
                }
 
index f88a6f0a996522f90d81526dc09df20036e3a8a6..b6fb25e99235b7c209a73775a1fbf8c08e61ca4c 100644 (file)
@@ -30,6 +30,7 @@
  * Raymond Chandler <intralanman@freeswitch.org>
  * William King <william.king@quentustech.com>
  * Emmanuel Schmidbauer <e.schmidbauer@gmail.com>
+ * David Knell <david.knell@telng.com>
  *
  * sofia_presence.c -- SOFIA SIP Endpoint (presence code)
  *
@@ -3714,9 +3715,10 @@ void sofia_presence_handle_sip_i_subscribe(int status,
 
                if (authorization) {
                        char network_ip[80];
-                       sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), NULL);
+                       int network_port;
+                       sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &network_port);
                        auth_res = sofia_reg_parse_auth(profile, authorization, sip, de,
-                                                                                       (char *) sip->sip_request->rq_method_name, key, sizeof(key), network_ip, &v_event, 0,
+                                                                                       (char *) sip->sip_request->rq_method_name, key, sizeof(key), network_ip, network_port, &v_event, 0,
                                                                                        REG_REGISTER, to_user, NULL, NULL, NULL);
                } else if ( sofia_reg_handle_register(nua, profile, nh, sip, de, REG_REGISTER, key, sizeof(key), &v_event, NULL, NULL, NULL)) {
                        if (v_event) {
@@ -4648,9 +4650,10 @@ void sofia_presence_handle_sip_i_message(int status,
 
                        if (authorization) {
                                char network_ip[80];
-                               sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), NULL);
+                               int network_port;
+                               sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &network_port);
                                auth_res = sofia_reg_parse_auth(profile, authorization, sip, de,
-                                                                                               (char *) sip->sip_request->rq_method_name, key, keylen, network_ip, NULL, 0,
+                                                                                               (char *) sip->sip_request->rq_method_name, key, keylen, network_ip, network_port, NULL, 0,
                                                                                                REG_INVITE, NULL, NULL, NULL, NULL);
                        } else if ( sofia_reg_handle_register(nua, profile, nh, sip, de, REG_INVITE, key, (uint32_t)keylen, &v_event, NULL, NULL, NULL)) {
                                if (v_event) {
index e8682fab2aeb952d13994ca597295156952142a8..8baa418fe59072fac13ade2b398db23fd50d80f7 100644 (file)
@@ -28,7 +28,7 @@
  * Paul D. Tinsley <pdt at jackhammer.org>
  * Bret McDanel <trixter AT 0xdecafbad.com>
  * Marcel Barbulescu <marcelbarbulescu@gmail.com>
- * David Knell <>
+ * David Knell <david.knell@telng.com>
  * Eliot Gable <egable AT.AT broadvox.com>
  * Leon de Rooij <leon@scarlet-internet.nl>
  * Emmanuel Schmidbauer <e.schmidbauer@gmail.com>
@@ -1401,7 +1401,7 @@ uint8_t sofia_reg_handle_register(nua_t *nua, sofia_profile_t *profile, nua_hand
                const char *username = "unknown";
                const char *realm = reg_host;
                if ((auth_res = sofia_reg_parse_auth(profile, authorization, sip, de, sip->sip_request->rq_method_name,
-                                                                                        key, keylen, network_ip, v_event, exptime, regtype, to_user, &auth_params, &reg_count, user_xml)) == AUTH_STALE) {
+                                                                                        key, keylen, network_ip, network_port, v_event, exptime, regtype, to_user, &auth_params, &reg_count, user_xml)) == AUTH_STALE) {
                        stale = 1;
                }
 
@@ -2488,6 +2488,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
                                                                char *np,
                                                                size_t nplen,
                                                                char *ip,
+                                                               int network_port,
                                                                switch_event_t **v_event,
                                                                long exptime, sofia_regtype_t regtype, const char *to_user, switch_event_t **auth_params, long *reg_count, switch_xml_t *user_xml)
 {
@@ -2516,6 +2517,8 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
        const char *user_agent = NULL;
        const char *user_agent_filter = profile->user_agent_filter;
        uint32_t max_registrations_perext = profile->max_registrations_perext;
+       char client_port[16];
+       snprintf(client_port, 15, "%d", network_port);
 
        username = realm = nonce = uri = qop = cnonce = nc = response = NULL;
 
@@ -2684,6 +2687,7 @@ auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile,
 
        switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "sip_auth_method", (sip && sip->sip_request) ? sip->sip_request->rq_method_name : NULL);
 
+       switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "client_port", client_port);
        if (auth_params) {
                switch_event_dup(auth_params, params);
        }