summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Joseph <george.joseph@fairview5.com>2014-09-18 15:13:29 +0000
committerGeorge Joseph <george.joseph@fairview5.com>2014-09-18 15:13:29 +0000
commita2482acdce9cdcdbdf2b532a591992212c88cd09 (patch)
tree90149e07a5932348bbe032a3717ce2db9b4e2f63
parent27df9b73e2272d63efe411c744917e1510bad32a (diff)
res_pjsip: ami: Fix error in AMI output when an endpoint has no transport
When no transport is associated to an endpoint, the AMI output for PJSIPShowEndpoint indicates an error instead of silently ignoring the missing transport. This patch causes the error to appear only if a transport was specified on the endpoint and the transport doesn't exist. It also fixes an issue with counting the objects that were actually found. ASTERISK-24161 #close ASTERISK-24331 #close Tested by: George Joseph Review: https://reviewboard.asterisk.org/r/3998/ ........ Merged revisions 423282 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@423284 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--include/asterisk/res_pjsip.h2
-rw-r--r--res/res_pjsip/config_auth.c2
-rw-r--r--res/res_pjsip/config_transport.c18
-rw-r--r--res/res_pjsip/location.c2
-rw-r--r--res/res_pjsip/pjsip_configuration.c6
-rw-r--r--res/res_pjsip/pjsip_options.c3
-rw-r--r--res/res_pjsip_endpoint_identifier_ip.c2
7 files changed, 26 insertions, 9 deletions
diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h
index 45d9325ee..fdb2105cf 100644
--- a/include/asterisk/res_pjsip.h
+++ b/include/asterisk/res_pjsip.h
@@ -1727,6 +1727,8 @@ struct ast_sip_ami {
const char *action_id;
/*! user specified argument data */
void *arg;
+ /*! count of objects */
+ int count;
};
/*!
diff --git a/res/res_pjsip/config_auth.c b/res/res_pjsip/config_auth.c
index cd4b95985..b8c9bc9d1 100644
--- a/res/res_pjsip/config_auth.c
+++ b/res/res_pjsip/config_auth.c
@@ -175,6 +175,8 @@ static int format_ami_auth_handler(void *obj, void *arg, int flags)
}
astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
+ ami->count++;
+
return 0;
}
diff --git a/res/res_pjsip/config_transport.c b/res/res_pjsip/config_transport.c
index 785fcc5ac..0a56b9263 100644
--- a/res/res_pjsip/config_transport.c
+++ b/res/res_pjsip/config_transport.c
@@ -39,16 +39,20 @@ static int sip_transport_to_ami(const struct ast_sip_transport *transport,
static int format_ami_endpoint_transport(const struct ast_sip_endpoint *endpoint,
struct ast_sip_ami *ami)
{
- RAII_VAR(struct ast_str *, buf,
- ast_sip_create_ami_event("TransportDetail", ami), ast_free);
- RAII_VAR(struct ast_sip_transport *,
- transport, ast_sorcery_retrieve_by_id(
- ast_sip_get_sorcery(), "transport",
- endpoint->transport), ao2_cleanup);
+ RAII_VAR(struct ast_str *, buf, NULL, ast_free);
+ RAII_VAR(struct ast_sip_transport *, transport, NULL, ao2_cleanup);
+
+ if (ast_strlen_zero(endpoint->transport)) {
+ return 0;
+ }
+
+ buf = ast_sip_create_ami_event("TransportDetail", ami);
if (!buf) {
return -1;
}
+ transport = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport",
+ endpoint->transport);
if (!transport) {
astman_send_error_va(ami->s, ami->m, "Unable to retrieve "
"transport %s\n", endpoint->transport);
@@ -61,6 +65,8 @@ static int format_ami_endpoint_transport(const struct ast_sip_endpoint *endpoint
ast_sorcery_object_get_id(endpoint));
astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
+ ami->count++;
+
return 0;
}
diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c
index b0a49cdf7..d6015c758 100644
--- a/res/res_pjsip/location.c
+++ b/res/res_pjsip/location.c
@@ -506,6 +506,8 @@ static int format_ami_aor_handler(void *obj, void *arg, int flags)
ast_sorcery_object_get_id(endpoint));
astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
+ ami->count++;
+
return 0;
}
diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c
index 548372879..9166d3f33 100644
--- a/res/res_pjsip/pjsip_configuration.c
+++ b/res/res_pjsip/pjsip_configuration.c
@@ -1107,7 +1107,8 @@ static int format_ami_endpoint(const struct ast_sip_endpoint *endpoint,
static int ami_show_endpoint(struct mansession *s, const struct message *m)
{
- struct ast_sip_ami ami = { .s = s, .m = m, .action_id = astman_get_header(m, "ActionID"), };
+ struct ast_sip_ami ami = { .s = s, .m = m, .action_id = astman_get_header(m, "ActionID"),
+ .count = 0, };
RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
const char *endpoint_name = astman_get_header(m, "Endpoint");
int count = 0;
@@ -1144,7 +1145,8 @@ static int ami_show_endpoint(struct mansession *s, const struct message *m)
astman_append(s, "ActionID: %s\r\n", ami.action_id);
}
astman_append(s, "EventList: Complete\r\n"
- "ListItems: %d\r\n\r\n", count + 1);
+ "ListItems: %d\r\n\r\n", ami.count + 1);
+
return 0;
}
diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c
index c9b4f8ccb..1c26251ab 100644
--- a/res/res_pjsip/pjsip_options.c
+++ b/res/res_pjsip/pjsip_options.c
@@ -995,7 +995,8 @@ static int format_contact_status(void *obj, void *arg, int flags)
ast_str_append(&buf, 0, "EndpointName: %s\r\n",
ast_sorcery_object_get_id(endpoint));
astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
-
+ ami->count++;
+
ast_free(buf);
ao2_cleanup(status);
return 0;
diff --git a/res/res_pjsip_endpoint_identifier_ip.c b/res/res_pjsip_endpoint_identifier_ip.c
index 294c4455d..5d938c03e 100644
--- a/res/res_pjsip_endpoint_identifier_ip.c
+++ b/res/res_pjsip_endpoint_identifier_ip.c
@@ -263,6 +263,8 @@ static int format_ami_endpoint_identify(const struct ast_sip_endpoint *endpoint,
ast_sorcery_object_get_id(endpoint));
astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
+ ami->count++;
+
return 0;
}