|
|
@ -46,11 +46,32 @@
|
|
|
|
<syntax />
|
|
|
|
<syntax />
|
|
|
|
<description>
|
|
|
|
<description>
|
|
|
|
<para>
|
|
|
|
<para>
|
|
|
|
In response <literal>InboundRegistrationDetail</literal> events showing configuration and status
|
|
|
|
In response, <literal>InboundRegistrationDetail</literal> events showing configuration
|
|
|
|
information are raised for each inbound registration object. As well as <literal>AuthDetail</literal>
|
|
|
|
and status information are raised for all contacts, static or dynamic. Once all events
|
|
|
|
events for each associated auth object. Once all events are completed an
|
|
|
|
are completed an <literal>InboundRegistrationDetailComplete</literal> is issued.
|
|
|
|
<literal>InboundRegistrationDetailComplete</literal> is issued.
|
|
|
|
</para>
|
|
|
|
</para>
|
|
|
|
<warning><para>
|
|
|
|
|
|
|
|
This command just dumps all coonfigured AORs with contacts, even if the contact
|
|
|
|
|
|
|
|
is a permanent one. To really get just inbound registrations, use
|
|
|
|
|
|
|
|
<literal>PJSIPShowRegistrationInboundContactStatuses</literal>.
|
|
|
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
</warning>
|
|
|
|
|
|
|
|
</description>
|
|
|
|
|
|
|
|
<see-also>
|
|
|
|
|
|
|
|
<ref type="manager" module="res_pjsip_registrar">PJSIPShowRegistrationInboundContactStatuses</ref>
|
|
|
|
|
|
|
|
</see-also>
|
|
|
|
|
|
|
|
</manager>
|
|
|
|
|
|
|
|
<manager name="PJSIPShowRegistrationInboundContactStatuses" language="en_US">
|
|
|
|
|
|
|
|
<synopsis>
|
|
|
|
|
|
|
|
Lists ContactStatuses for PJSIP inbound registrations.
|
|
|
|
|
|
|
|
</synopsis>
|
|
|
|
|
|
|
|
<syntax />
|
|
|
|
|
|
|
|
<description>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
|
|
|
In response, <literal>ContactStatusDetail</literal> events showing status information
|
|
|
|
|
|
|
|
are raised for each inbound registration (dynamic contact) object. Once all events
|
|
|
|
|
|
|
|
are completed a <literal>ContactStatusDetailComplete</literal> event is issued.
|
|
|
|
|
|
|
|
</para>
|
|
|
|
</description>
|
|
|
|
</description>
|
|
|
|
</manager>
|
|
|
|
</manager>
|
|
|
|
***/
|
|
|
|
***/
|
|
|
@ -785,6 +806,42 @@ static int ami_show_registrations(struct mansession *s, const struct message *m)
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int ami_show_registration_contact_statuses(struct mansession *s, const struct message *m)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int count = 0;
|
|
|
|
|
|
|
|
struct ast_sip_ami ami = { .s = s, .m = m, .arg = NULL, .action_id = astman_get_header(m, "ActionID"), };
|
|
|
|
|
|
|
|
struct ao2_container *contacts = ast_sorcery_retrieve_by_fields(
|
|
|
|
|
|
|
|
ast_sip_get_sorcery(), "contact", AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
|
|
|
|
|
|
|
|
struct ao2_iterator i;
|
|
|
|
|
|
|
|
struct ast_sip_contact *contact;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
astman_send_listack(s, m, "Following are ContactStatusEvents for each Inbound "
|
|
|
|
|
|
|
|
"registration", "start");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (contacts) {
|
|
|
|
|
|
|
|
i = ao2_iterator_init(contacts, 0);
|
|
|
|
|
|
|
|
while ((contact = ao2_iterator_next(&i))) {
|
|
|
|
|
|
|
|
struct ast_sip_contact_wrapper wrapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wrapper.aor_id = (char *)contact->aor;
|
|
|
|
|
|
|
|
wrapper.contact = contact;
|
|
|
|
|
|
|
|
wrapper.contact_id = (char *)ast_sorcery_object_get_id(contact);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ast_sip_format_contact_ami(&wrapper, &ami, 0);
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ao2_ref(contact, -1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ao2_iterator_destroy(&i);
|
|
|
|
|
|
|
|
ao2_ref(contacts, -1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
astman_send_list_complete_start(s, m, "ContactStatusDetailComplete", count);
|
|
|
|
|
|
|
|
astman_send_list_complete_end(s);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define AMI_SHOW_REGISTRATION_CONTACT_STATUSES "PJSIPShowRegistrationInboundContactStatuses"
|
|
|
|
#define AMI_SHOW_REGISTRATIONS "PJSIPShowRegistrationsInbound"
|
|
|
|
#define AMI_SHOW_REGISTRATIONS "PJSIPShowRegistrationsInbound"
|
|
|
|
|
|
|
|
|
|
|
|
static pjsip_module registrar_module = {
|
|
|
|
static pjsip_module registrar_module = {
|
|
|
@ -817,6 +874,8 @@ static int load_module(void)
|
|
|
|
|
|
|
|
|
|
|
|
ast_manager_register_xml(AMI_SHOW_REGISTRATIONS, EVENT_FLAG_SYSTEM,
|
|
|
|
ast_manager_register_xml(AMI_SHOW_REGISTRATIONS, EVENT_FLAG_SYSTEM,
|
|
|
|
ami_show_registrations);
|
|
|
|
ami_show_registrations);
|
|
|
|
|
|
|
|
ast_manager_register_xml(AMI_SHOW_REGISTRATION_CONTACT_STATUSES, EVENT_FLAG_SYSTEM,
|
|
|
|
|
|
|
|
ami_show_registration_contact_statuses);
|
|
|
|
|
|
|
|
|
|
|
|
return AST_MODULE_LOAD_SUCCESS;
|
|
|
|
return AST_MODULE_LOAD_SUCCESS;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -824,6 +883,7 @@ static int load_module(void)
|
|
|
|
static int unload_module(void)
|
|
|
|
static int unload_module(void)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ast_manager_unregister(AMI_SHOW_REGISTRATIONS);
|
|
|
|
ast_manager_unregister(AMI_SHOW_REGISTRATIONS);
|
|
|
|
|
|
|
|
ast_manager_unregister(AMI_SHOW_REGISTRATION_CONTACT_STATUSES);
|
|
|
|
ast_sip_unregister_service(®istrar_module);
|
|
|
|
ast_sip_unregister_service(®istrar_module);
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|