summaryrefslogtreecommitdiff
path: root/res/res_pjsip
diff options
context:
space:
mode:
Diffstat (limited to 'res/res_pjsip')
-rw-r--r--res/res_pjsip/location.c17
-rw-r--r--res/res_pjsip/pjsip_configuration.c10
-rw-r--r--res/res_pjsip/pjsip_distributor.c9
-rw-r--r--res/res_pjsip/pjsip_options.c10
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");