From 45e19b75ddfe44781e0c8a48e2004b49aa71fc3c Mon Sep 17 00:00:00 2001 From: Brian West Date: Tue, 25 Feb 2014 21:49:35 -0600 Subject: [PATCH] FS-6270 add client_port to SIP Registration events --- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 +- src/mod/endpoints/mod_sofia/sofia.c | 6 ++++-- src/mod/endpoints/mod_sofia/sofia_presence.c | 11 +++++++---- src/mod/endpoints/mod_sofia/sofia_reg.c | 8 ++++++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 54beceb3fd..5249bee570 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -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); diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 2075cc914f..bbf7b50f9d 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -34,6 +34,7 @@ * Joseph Sullivan * Emmanuel Schmidbauer * William King + * David Knell * * 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); } diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index f88a6f0a99..b6fb25e992 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -30,6 +30,7 @@ * Raymond Chandler * William King * Emmanuel Schmidbauer + * David Knell * * 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) { diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index e8682fab2a..8baa418fe5 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -28,7 +28,7 @@ * Paul D. Tinsley * Bret McDanel * Marcel Barbulescu - * David Knell <> + * David Knell * Eliot Gable * Leon de Rooij * Emmanuel Schmidbauer @@ -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, ®_count, user_xml)) == AUTH_STALE) { + key, keylen, network_ip, network_port, v_event, exptime, regtype, to_user, &auth_params, ®_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); }