diff options
Diffstat (limited to 'res/res_pjsip')
-rw-r--r-- | res/res_pjsip/location.c | 17 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_configuration.c | 10 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_distributor.c | 9 | ||||
-rw-r--r-- | res/res_pjsip/pjsip_options.c | 10 |
4 files changed, 37 insertions, 9 deletions
diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c index fd6db6edc..43e6ea40f 100644 --- a/res/res_pjsip/location.c +++ b/res/res_pjsip/location.c @@ -121,6 +121,8 @@ static void *contact_alloc(const char *name) } ast_string_field_init_extended(contact, reg_server); + ast_string_field_init_extended(contact, via_addr); + ast_string_field_init_extended(contact, call_id); /* Dynamic contacts are delimited with ";@" and static ones with "@@" */ if ((aor_separator = strstr(id, ";@")) || (aor_separator = strstr(id, "@@"))) { @@ -303,6 +305,7 @@ struct ast_sip_contact *ast_sip_location_retrieve_contact(const char *contact_na int ast_sip_location_add_contact_nolock(struct ast_sip_aor *aor, const char *uri, struct timeval expiration_time, const char *path_info, const char *user_agent, + const char *via_addr, int via_port, const char *call_id, struct ast_sip_endpoint *endpoint) { char name[MAX_OBJECT_FIELD * 2 + 3]; @@ -337,6 +340,15 @@ int ast_sip_location_add_contact_nolock(struct ast_sip_aor *aor, const char *uri ast_string_field_set(contact, reg_server, ast_config_AST_SYSTEM_NAME); } + if (!ast_strlen_zero(via_addr)) { + ast_string_field_set(contact, via_addr, via_addr); + } + contact->via_port = via_port; + + if (!ast_strlen_zero(call_id)) { + ast_string_field_set(contact, call_id, call_id); + } + contact->endpoint = ao2_bump(endpoint); return ast_sorcery_create(ast_sip_get_sorcery(), contact); @@ -344,6 +356,7 @@ int ast_sip_location_add_contact_nolock(struct ast_sip_aor *aor, const char *uri int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri, struct timeval expiration_time, const char *path_info, const char *user_agent, + const char *via_addr, int via_port, const char *call_id, struct ast_sip_endpoint *endpoint) { int res; @@ -356,6 +369,7 @@ int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri, ao2_wrlock(lock); res = ast_sip_location_add_contact_nolock(aor, uri, expiration_time, path_info, user_agent, + via_addr, via_port, call_id, endpoint); ao2_unlock(lock); ast_named_lock_put(lock); @@ -1120,6 +1134,9 @@ int ast_sip_initialize_sorcery_location(void) ast_sorcery_object_field_register(sorcery, "contact", "outbound_proxy", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, outbound_proxy)); ast_sorcery_object_field_register(sorcery, "contact", "user_agent", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, user_agent)); ast_sorcery_object_field_register(sorcery, "contact", "reg_server", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, reg_server)); + ast_sorcery_object_field_register(sorcery, "contact", "via_addr", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, via_addr)); + ast_sorcery_object_field_register(sorcery, "contact", "via_port", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_contact, via_port)); + ast_sorcery_object_field_register(sorcery, "contact", "call_id", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, call_id)); ast_sorcery_object_field_register(sorcery, "aor", "type", "", OPT_NOOP_T, 0, 0); ast_sorcery_object_field_register(sorcery, "aor", "minimum_expiration", "60", OPT_UINT_T, 0, FLDSET(struct ast_sip_aor, minimum_expiration)); diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c index 8b6fe61d8..3c4949573 100644 --- a/res/res_pjsip/pjsip_configuration.c +++ b/res/res_pjsip/pjsip_configuration.c @@ -131,7 +131,7 @@ static int persistent_endpoint_update_state(void *obj, void *arg, int flags) } } - ast_verb(1, "Endpoint %s is now Reachable\n", ast_endpoint_get_resource(endpoint)); + ast_verb(2, "Endpoint %s is now Reachable\n", ast_endpoint_get_resource(endpoint)); } else { ast_endpoint_set_state(endpoint, AST_ENDPOINT_OFFLINE); blob = ast_json_pack("{s: s}", "peer_status", "Unreachable"); @@ -144,7 +144,7 @@ static int persistent_endpoint_update_state(void *obj, void *arg, int flags) } } - ast_verb(1, "Endpoint %s is now Unreachable\n", ast_endpoint_get_resource(endpoint)); + ast_verb(2, "Endpoint %s is now Unreachable\n", ast_endpoint_get_resource(endpoint)); } ast_free(regcontext); @@ -173,7 +173,7 @@ static void persistent_endpoint_contact_created_observer(const void *object) contact_status->status = CREATED; - ast_verb(1, "Contact %s/%s has been created\n",contact->aor, contact->uri); + ast_verb(2, "Contact %s/%s has been created\n",contact->aor, contact->uri); ao2_callback(persistent_endpoints, OBJ_NODATA, persistent_endpoint_update_state, contact_status); ao2_cleanup(contact_status); @@ -192,7 +192,7 @@ static void persistent_endpoint_contact_deleted_observer(const void *object) return; } - ast_verb(1, "Contact %s/%s has been deleted\n", contact->aor, contact->uri); + ast_verb(2, "Contact %s/%s has been deleted\n", contact->aor, contact->uri); ast_statsd_log_string_va("PJSIP.contacts.states.%s", AST_STATSD_GAUGE, "-1", 1.0, ast_sip_get_contact_status_label(contact_status->status)); ast_statsd_log_string_va("PJSIP.contacts.states.%s", AST_STATSD_GAUGE, @@ -220,7 +220,7 @@ static void persistent_endpoint_contact_status_observer(const void *object) } if (contact_status->status != contact_status->last_status) { - ast_verb(1, "Contact %s/%s is now %s. RTT: %.3f msec\n", contact_status->aor, contact_status->uri, + ast_verb(3, "Contact %s/%s is now %s. RTT: %.3f msec\n", contact_status->aor, contact_status->uri, ast_sip_get_contact_status_label(contact_status->status), contact_status->rtt / 1000.0); diff --git a/res/res_pjsip/pjsip_distributor.c b/res/res_pjsip/pjsip_distributor.c index 2ab954eb0..3867eaea0 100644 --- a/res/res_pjsip/pjsip_distributor.c +++ b/res/res_pjsip/pjsip_distributor.c @@ -257,7 +257,8 @@ static pjsip_dialog *find_dialog(pjsip_rx_data *rdata) tsx = pjsip_tsx_layer_find_tsx(&tsx_key, PJ_TRUE); if (!tsx) { - ast_debug(3, "Could not find matching transaction for %s\n", rdata->msg_info.info); + ast_debug(3, "Could not find matching transaction for %s\n", + pjsip_rx_data_get_info(rdata)); return NULL; } @@ -296,13 +297,13 @@ static pj_bool_t distributor(pjsip_rx_data *rdata) if (dlg) { ast_debug(3, "Searching for serializer on dialog %s for %s\n", - dlg->obj_name, rdata->msg_info.info); + dlg->obj_name, pjsip_rx_data_get_info(rdata)); dist = pjsip_dlg_get_mod_data(dlg, distributor_mod.id); if (dist) { serializer = ao2_bump(dist->serializer); if (serializer) { ast_debug(3, "Found serializer %s on dialog %s\n", - ast_taskprocessor_name(serializer), dlg->obj_name); + ast_taskprocessor_name(serializer), dlg->obj_name); } } pjsip_dlg_dec_lock(dlg); @@ -312,7 +313,7 @@ static pj_bool_t distributor(pjsip_rx_data *rdata) /* We have a serializer so we know where to send the message. */ } else if (rdata->msg_info.msg->type == PJSIP_RESPONSE_MSG) { ast_debug(3, "No dialog serializer for response %s. Using request transaction as basis\n", - rdata->msg_info.info); + pjsip_rx_data_get_info(rdata)); serializer = find_request_serializer(rdata); } else if (!pjsip_method_cmp(&rdata->msg_info.msg->line.req.method, &pjsip_cancel_method) || !pjsip_method_cmp(&rdata->msg_info.msg->line.req.method, &pjsip_bye_method)) { diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c index 62640fe4e..1114336bd 100644 --- a/res/res_pjsip/pjsip_options.c +++ b/res/res_pjsip/pjsip_options.c @@ -1156,6 +1156,16 @@ static int format_contact_status(void *obj, void *arg, int flags) ast_str_append(&buf, 0, "URI: %s\r\n", contact->uri); ast_str_append(&buf, 0, "UserAgent: %s\r\n", contact->user_agent); ast_str_append(&buf, 0, "RegExpire: %ld\r\n", contact->expiration_time.tv_sec); + if (!ast_strlen_zero(contact->via_addr)) { + ast_str_append(&buf, 0, "ViaAddress: %s", contact->via_addr); + if (contact->via_port) { + ast_str_append(&buf, 0, ":%d", contact->via_port); + } + ast_str_append(&buf, 0, "\r\n"); + } + if (!ast_strlen_zero(contact->call_id)) { + ast_str_append(&buf, 0, "CallID: %s\r\n", contact->call_id); + } ast_str_append(&buf, 0, "Status: %s\r\n", ast_sip_get_contact_status_label(status->status)); if (status->status == UNKNOWN) { ast_str_append(&buf, 0, "RoundtripUsec: N/A\r\n"); |