diff options
author | Kevin Harwell <kharwell@digium.com> | 2013-11-23 17:26:57 +0000 |
---|---|---|
committer | Kevin Harwell <kharwell@digium.com> | 2013-11-23 17:26:57 +0000 |
commit | 05cbf8df9b2ea0b41e049698b9f51ee4365ceab0 (patch) | |
tree | 896d138372ec9fc2f443374c6f200a0f67725fbb /res/res_pjsip_registrar.c | |
parent | 14a74529344ef5229f100c81bc969f34e27112b3 (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.c | 83 |
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(®istrar_module); ao2_cleanup(serializers); |