summaryrefslogtreecommitdiff
path: root/res/res_pjsip_registrar.c
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2013-11-23 17:26:57 +0000
committerKevin Harwell <kharwell@digium.com>2013-11-23 17:26:57 +0000
commit05cbf8df9b2ea0b41e049698b9f51ee4365ceab0 (patch)
tree896d138372ec9fc2f443374c6f200a0f67725fbb /res/res_pjsip_registrar.c
parent14a74529344ef5229f100c81bc969f34e27112b3 (diff)
res_pjsip: AMI commands and events.
Created the following AMI commands and corresponding events for res_pjsip: PJSIPShowEndpoints - Provides a listing of all pjsip endpoints and a few select attributes on each. Events: EndpointList - for each endpoint a few attributes. EndpointlistComplete - after all endpoints have been listed. PJSIPShowEndpoint - Provides a detail list of attributes for a specified endpoint. Events: EndpointDetail - attributes on an endpoint. AorDetail - raised for each AOR on an endpoint. AuthDetail - raised for each associated inbound and outbound auth TransportDetail - transport attributes. IdentifyDetail - attributes for the identify object associated with the endpoint. EndpointDetailComplete - last event raised after all detail events. PJSIPShowRegistrationsInbound - Provides a detail listing of all inbound registrations. Events: InboundRegistrationDetail - inbound registration attributes for each registration. InboundRegistrationDetailComplete - raised after all detail records have been listed. PJSIPShowRegistrationsOutbound - Provides a detail listing of all outbound registrations. Events: OutboundRegistrationDetail - outbound registration attributes for each registration. OutboundRegistrationDetailComplete - raised after all detail records have been listed. PJSIPShowSubscriptionsInbound - A detail listing of all inbound subscriptions and their attributes. Events: SubscriptionDetail - on each subscription detailed attributes SubscriptionDetailComplete - raised after all detail records have been listed. PJSIPShowSubscriptionsOutbound - A detail listing of all outboundbound subscriptions and their attributes. Events: SubscriptionDetail - on each subscription detailed attributes SubscriptionDetailComplete - raised after all detail records have been listed. (issue ASTERISK-22609) Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/2959/ ........ Merged revisions 403131 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@403133 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_pjsip_registrar.c')
-rw-r--r--res/res_pjsip_registrar.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c
index 143f96d79..82d97a0d5 100644
--- a/res/res_pjsip_registrar.c
+++ b/res/res_pjsip_registrar.c
@@ -31,6 +31,25 @@
#include "asterisk/module.h"
#include "asterisk/test.h"
#include "asterisk/taskprocessor.h"
+#include "asterisk/manager.h"
+#include "res_pjsip/include/res_pjsip_private.h"
+
+/*** DOCUMENTATION
+ <manager name="PJSIPShowRegistrationsInbound" language="en_US">
+ <synopsis>
+ Lists PJSIP inbound registrations.
+ </synopsis>
+ <syntax />
+ <description>
+ <para>
+ In response <literal>InboundRegistrationDetail</literal> events showing configuration and status
+ information are raised for each inbound registration object. As well as <literal>AuthDetail</literal>
+ events for each associated auth object. Once all events are completed an
+ <literal>InboundRegistrationDetailComplete</literal> is issued.
+ </para>
+ </description>
+ </manager>
+ ***/
/*! \brief Internal function which returns the expiration time for a contact */
static int registrar_get_expiration(const struct ast_sip_aor *aor, const pjsip_contact_hdr *contact, const pjsip_rx_data *rdata)
@@ -569,6 +588,66 @@ static pj_bool_t registrar_on_rx_request(struct pjsip_rx_data *rdata)
return PJ_TRUE;
}
+static int ami_registrations_aor(void *obj, void *arg, int flags)
+{
+ struct ast_sip_aor *aor = obj;
+ struct ast_sip_ami *ami = arg;
+ int *count = ami->arg;
+ RAII_VAR(struct ast_str *, buf,
+ ast_sip_create_ami_event("InboundRegistrationDetail", ami), ast_free);
+
+ if (!buf) {
+ return -1;
+ }
+
+ ast_sip_sorcery_object_to_ami(aor, &buf);
+ ast_str_append(&buf, 0, "Contacts: ");
+ ast_sip_for_each_contact(aor, ast_sip_contact_to_str, &buf);
+ ast_str_append(&buf, 0, "\r\n");
+
+ astman_append(ami->s, "%s\r\n", ast_str_buffer(buf));
+ (*count)++;
+ return 0;
+}
+
+static int ami_registrations_endpoint(void *obj, void *arg, int flags)
+{
+ struct ast_sip_endpoint *endpoint = obj;
+ return ast_sip_for_each_aor(
+ endpoint->aors, ami_registrations_aor, arg);
+}
+
+static int ami_registrations_endpoints(void *arg)
+{
+ RAII_VAR(struct ao2_container *, endpoints,
+ ast_sip_get_endpoints(), ao2_cleanup);
+
+ if (!endpoints) {
+ return 0;
+ }
+
+ ao2_callback(endpoints, OBJ_NODATA, ami_registrations_endpoint, arg);
+ return 0;
+}
+
+static int ami_show_registrations(struct mansession *s, const struct message *m)
+{
+ int count = 0;
+ struct ast_sip_ami ami = { .s = s, .m = m, .arg = &count };
+ astman_send_listack(s, m, "Following are Events for each Inbound "
+ "registration", "start");
+
+ ami_registrations_endpoints(&ami);
+
+ astman_append(s,
+ "Event: InboundRegistrationDetailComplete\r\n"
+ "EventList: Complete\r\n"
+ "ListItems: %d\r\n\r\n", count);
+ return 0;
+}
+
+#define AMI_SHOW_REGISTRATIONS "PJSIPShowRegistrationsInbound"
+
static pjsip_module registrar_module = {
.name = { "Registrar", 9 },
.id = -1,
@@ -594,11 +673,15 @@ static int load_module(void)
return AST_MODULE_LOAD_DECLINE;
}
+ ast_manager_register_xml(AMI_SHOW_REGISTRATIONS, EVENT_FLAG_SYSTEM,
+ ami_show_registrations);
+
return AST_MODULE_LOAD_SUCCESS;
}
static int unload_module(void)
{
+ ast_manager_unregister(AMI_SHOW_REGISTRATIONS);
ast_sip_unregister_service(&registrar_module);
ao2_cleanup(serializers);