diff options
Diffstat (limited to 'main')
-rw-r--r-- | main/aoc.c | 14 | ||||
-rw-r--r-- | main/asterisk.c | 6 | ||||
-rw-r--r-- | main/bridge.c | 12 | ||||
-rw-r--r-- | main/features.c | 14 | ||||
-rw-r--r-- | main/manager.c | 91 | ||||
-rw-r--r-- | main/manager_bridges.c | 46 | ||||
-rw-r--r-- | main/manager_channels.c | 56 | ||||
-rw-r--r-- | main/pbx.c | 8 | ||||
-rw-r--r-- | main/rtp_engine.c | 6 | ||||
-rw-r--r-- | main/sorcery.c | 134 | ||||
-rw-r--r-- | main/stasis.c | 1 | ||||
-rw-r--r-- | main/stasis_bridges.c | 6 | ||||
-rw-r--r-- | main/utils.c | 12 |
13 files changed, 330 insertions, 76 deletions
diff --git a/main/aoc.c b/main/aoc.c index 54edafad6..cd9c461c1 100644 --- a/main/aoc.c +++ b/main/aoc.c @@ -85,6 +85,10 @@ ASTERISK_REGISTER_FILE(); </parameter> <parameter name="SpecialCode" /> </syntax> + <see-also> + <ref type="managerEvent">AOC-D</ref> + <ref type="managerEvent">AOC-E</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="AOC-D"> @@ -138,6 +142,11 @@ ASTERISK_REGISTER_FILE(); <parameter name="NumberOf" /> <parameter name="TypeOf" /> </syntax> + <see-also> + <ref type="manager">AOCMessage</ref> + <ref type="managerEvent">AOC-S</ref> + <ref type="managerEvent">AOC-E</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="AOC-E"> @@ -151,6 +160,11 @@ ASTERISK_REGISTER_FILE(); <parameter name="ID" /> <xi:include xpointer="xpointer(/docs/managerEvent[@name='AOC-D']/managerEventInstance/syntax/parameter)" /> </syntax> + <see-also> + <ref type="manager">AOCMessage</ref> + <ref type="managerEvent">AOC-S</ref> + <ref type="managerEvent">AOC-D</ref> + </see-also> </managerEventInstance> </managerEvent> ***/ diff --git a/main/asterisk.c b/main/asterisk.c index 50d8af24a..3c2ca259e 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -3661,10 +3661,10 @@ static void ast_readconfig(void) } else if (!strcasecmp(v->name, "entityid")) { struct ast_eid tmp_eid; if (!ast_str_to_eid(&tmp_eid, v->value)) { - ast_verbose("Successfully set global EID to '%s'\n", v->value); ast_eid_default = tmp_eid; - } else - ast_verbose("Invalid Entity ID '%s' provided\n", v->value); + } else { + ast_log(LOG_WARNING, "Invalid Entity ID '%s' provided\n", v->value); + } } else if (!strcasecmp(v->name, "lightbackground")) { ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_LIGHT_BACKGROUND); } else if (!strcasecmp(v->name, "forceblackbackground")) { diff --git a/main/bridge.c b/main/bridge.c index 68ac24bba..e92875d17 100644 --- a/main/bridge.c +++ b/main/bridge.c @@ -38,6 +38,10 @@ <description> <para>Returns detailed information about the available bridging technologies.</para> </description> + <see-also> + <ref type="manager">BridgeTechnologySuspend</ref> + <ref type="manager">BridgeTechnologyUnsuspend</ref> + </see-also> </manager> <manager name="BridgeTechnologySuspend" language="en_US"> <synopsis> @@ -52,6 +56,10 @@ <description> <para>Marks a bridging technology as suspended, which prevents subsequently created bridges from using it.</para> </description> + <see-also> + <ref type="manager">BridgeTechnologySuspend</ref> + <ref type="manager">BridgeTechnologyUnsuspend</ref> + </see-also> </manager> <manager name="BridgeTechnologyUnsuspend" language="en_US"> <synopsis> @@ -66,6 +74,10 @@ <description> <para>Clears a previously suspended bridging technology, which allows subsequently created bridges to use it.</para> </description> + <see-also> + <ref type="manager">BridgeTechnologyList</ref> + <ref type="manager">BridgeTechnologySuspend</ref> + </see-also> </manager> ***/ diff --git a/main/features.c b/main/features.c index 4062e96ce..0af5a78e3 100644 --- a/main/features.c +++ b/main/features.c @@ -202,6 +202,11 @@ ASTERISK_REGISTER_FILE() </variable> </variablelist> </description> + <see-also> + <ref type="manager">Bridge</ref> + <ref type="managerEvent">BridgeCreate</ref> + <ref type="managerEvent">BridgeEnter</ref> + </see-also> </application> <manager name="Bridge" language="en_US"> <synopsis> @@ -228,6 +233,15 @@ ASTERISK_REGISTER_FILE() <description> <para>Bridge together two channels already in the PBX.</para> </description> + <see-also> + <ref type="application">Bridge</ref> + <ref type="managerEvent">BridgeCreate</ref> + <ref type="managerEvent">BridgeEnter</ref> + <ref type="manager">BridgeDestroy</ref> + <ref type="manager">BridgeInfo</ref> + <ref type="manager">BridgeKick</ref> + <ref type="manager">BridgeList</ref> + </see-also> </manager> ***/ diff --git a/main/manager.c b/main/manager.c index 029da70f7..32322b8c5 100644 --- a/main/manager.c +++ b/main/manager.c @@ -149,6 +149,9 @@ ASTERISK_REGISTER_FILE() <description> <para>Logoff the current manager session.</para> </description> + <see-also> + <ref type="manager">Login</ref> + </see-also> </manager> <manager name="Login" language="en_US"> <synopsis> @@ -168,6 +171,9 @@ ASTERISK_REGISTER_FILE() <description> <para>Login Manager.</para> </description> + <see-also> + <ref type="manager">Logoff</ref> + </see-also> </manager> <manager name="Challenge" language="en_US"> <synopsis> @@ -329,6 +335,9 @@ ASTERISK_REGISTER_FILE() <para>If a channel name is not provided then the variable is considered global.</para> </note> </description> + <see-also> + <ref type="manager">Getvar</ref> + </see-also> </manager> <manager name="Getvar" language="en_US"> <synopsis> @@ -349,6 +358,9 @@ ASTERISK_REGISTER_FILE() <para>If a channel name is not provided then the variable is considered global.</para> </note> </description> + <see-also> + <ref type="manager">Setvar</ref> + </see-also> </manager> <manager name="GetConfig" language="en_US"> <synopsis> @@ -381,6 +393,12 @@ ASTERISK_REGISTER_FILE() In the case where a category name is non-unique, a filter may be specified to match only categories with matching variable values.</para> </description> + <see-also> + <ref type="manager">GetConfigJSON</ref> + <ref type="manager">UpdateConfig</ref> + <ref type="manager">CreateConfig</ref> + <ref type="manager">ListCategories</ref> + </see-also> </manager> <manager name="GetConfigJSON" language="en_US"> <synopsis> @@ -405,6 +423,12 @@ ASTERISK_REGISTER_FILE() In the case where a category name is non-unique, a filter may be specified to match only categories with matching variable values.</para> </description> + <see-also> + <ref type="manager">GetConfig</ref> + <ref type="manager">UpdateConfig</ref> + <ref type="manager">CreateConfig</ref> + <ref type="manager">ListCategories</ref> + </see-also> </manager> <manager name="UpdateConfig" language="en_US"> <synopsis> @@ -496,6 +520,12 @@ ASTERISK_REGISTER_FILE() <para>This action will modify, create, or delete configuration elements in Asterisk configuration files.</para> </description> + <see-also> + <ref type="manager">GetConfig</ref> + <ref type="manager">GetConfigJSON</ref> + <ref type="manager">CreateConfig</ref> + <ref type="manager">ListCategories</ref> + </see-also> </manager> <manager name="CreateConfig" language="en_US"> <synopsis> @@ -512,6 +542,12 @@ ASTERISK_REGISTER_FILE() directory. This action is intended to be used before an UpdateConfig action.</para> </description> + <see-also> + <ref type="manager">GetConfig</ref> + <ref type="manager">GetConfigJSON</ref> + <ref type="manager">UpdateConfig</ref> + <ref type="manager">ListCategories</ref> + </see-also> </manager> <manager name="ListCategories" language="en_US"> <synopsis> @@ -526,6 +562,12 @@ ASTERISK_REGISTER_FILE() <description> <para>This action will dump the categories in a given file.</para> </description> + <see-also> + <ref type="manager">GetConfig</ref> + <ref type="manager">GetConfigJSON</ref> + <ref type="manager">UpdateConfig</ref> + <ref type="manager">CreateConfig</ref> + </see-also> </manager> <manager name="Redirect" language="en_US"> <synopsis> @@ -561,6 +603,9 @@ ASTERISK_REGISTER_FILE() <description> <para>Redirect (transfer) a call.</para> </description> + <see-also> + <ref type="manager">BlindTransfer</ref> + </see-also> </manager> <manager name="Atxfer" language="en_US"> <synopsis> @@ -581,6 +626,9 @@ ASTERISK_REGISTER_FILE() <description> <para>Attended transfer.</para> </description> + <see-also> + <ref type="managerEvent">AttendedTransfer</ref> + </see-also> </manager> <manager name="Originate" language="en_US"> <synopsis> @@ -705,6 +753,9 @@ ASTERISK_REGISTER_FILE() <para>Will return an <literal>Extension Status</literal> message. The response will include the hint for the extension and the status.</para> </description> + <see-also> + <ref type="managerEvent">ExtensionStatus</ref> + </see-also> </manager> <manager name="PresenceState" language="en_US"> <synopsis> @@ -721,6 +772,9 @@ ASTERISK_REGISTER_FILE() <para>Will return a <literal>Presence State</literal> message. The response will include the presence state and, if set, a presence subtype and custom message.</para> </description> + <see-also> + <ref type="managerEvent">PresenceStatus</ref> + </see-also> </manager> <manager name="AbsoluteTimeout" language="en_US"> <synopsis> @@ -758,6 +812,9 @@ ASTERISK_REGISTER_FILE() <para>Waiting: <literal>0</literal> if messages waiting, <literal>1</literal> if no messages waiting.</para> </description> + <see-also> + <ref type="manager">MailboxCount</ref> + </see-also> </manager> <manager name="MailboxCount" language="en_US"> <synopsis> @@ -778,6 +835,9 @@ ASTERISK_REGISTER_FILE() <para>NewMessages: <replaceable>count</replaceable></para> <para>OldMessages: <replaceable>count</replaceable></para> </description> + <see-also> + <ref type="manager">MailboxStatus</ref> + </see-also> </manager> <manager name="ListCommands" language="en_US"> <synopsis> @@ -827,6 +887,10 @@ ASTERISK_REGISTER_FILE() <description> <para>Send an event to manager sessions.</para> </description> + <see-also> + <ref type="managerEvent">UserEvent</ref> + <ref type="application">UserEvent</ref> + </see-also> </manager> <manager name="WaitEvent" language="en_US"> <synopsis> @@ -879,6 +943,9 @@ ASTERISK_REGISTER_FILE() <description> <para>Send a reload event.</para> </description> + <see-also> + <ref type="manager">ModuleLoad</ref> + </see-also> </manager> <managerEvent language="en_US" name="CoreShowChannel"> <managerEventInstance class="EVENT_FLAG_CALL"> @@ -991,6 +1058,10 @@ ASTERISK_REGISTER_FILE() <description> <para>Loads, unloads or reloads an Asterisk module in a running system.</para> </description> + <see-also> + <ref type="manager">Reload</ref> + <ref type="manager">ModuleCheck</ref> + </see-also> </manager> <manager name="ModuleCheck" language="en_US"> <synopsis> @@ -1006,6 +1077,9 @@ ASTERISK_REGISTER_FILE() <para>Checks if Asterisk module is loaded. Will return Success/Failure. For success returns, the module revision number is included.</para> </description> + <see-also> + <ref type="manager">ModuleLoad</ref> + </see-also> </manager> <manager name="AOCMessage" language="en_US"> <synopsis> @@ -1112,6 +1186,10 @@ ASTERISK_REGISTER_FILE() <description> <para>Generates an AOC-D or AOC-E message on a channel.</para> </description> + <see-also> + <ref type="managerEvent">AOC-D</ref> + <ref type="managerEvent">AOC-E</ref> + </see-also> </manager> <function name="AMI_CLIENT" language="en_US"> <synopsis> @@ -1171,6 +1249,9 @@ ASTERISK_REGISTER_FILE() this command can be used to create filters that may bypass filters defined in manager.conf</para> </description> + <see-also> + <ref type="manager">FilterList</ref> + </see-also> </manager> <manager name="FilterList" language="en_US"> <synopsis> @@ -1180,6 +1261,9 @@ ASTERISK_REGISTER_FILE() <para>The filters displayed are for the current session. Only those filters defined in manager.conf will be present upon starting a new session.</para> </description> + <see-also> + <ref type="manager">Filter</ref> + </see-also> </manager> <manager name="BlindTransfer" language="en_US"> <synopsis> @@ -1198,6 +1282,7 @@ ASTERISK_REGISTER_FILE() </description> <see-also> <ref type="manager">Redirect</ref> + <ref type="managerEvent">BlindTransfer</ref> </see-also> </manager> <managerEvent name="ExtensionStatus" language="en_US"> @@ -1275,6 +1360,9 @@ ASTERISK_REGISTER_FILE() </enumlist> </parameter> </syntax> + <see-also> + <ref type="manager">ExtensionState</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent name="PresenceStatus" language="en_US"> @@ -1288,6 +1376,9 @@ ASTERISK_REGISTER_FILE() <parameter name="Subtype" /> <parameter name="Message" /> </syntax> + <see-also> + <ref type="manager">PresenceState</ref> + </see-also> </managerEventInstance> </managerEvent> ***/ diff --git a/main/manager_bridges.c b/main/manager_bridges.c index 2069d507c..b6aaa550e 100644 --- a/main/manager_bridges.c +++ b/main/manager_bridges.c @@ -42,6 +42,11 @@ static struct stasis_message_router *bridge_state_router; <syntax> <bridge_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">BridgeDestroy</ref> + <ref type="managerEvent">BridgeEnter</ref> + <ref type="managerEvent">BridgeLeave</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="BridgeDestroy"> @@ -50,6 +55,11 @@ static struct stasis_message_router *bridge_state_router; <syntax> <bridge_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">BridgeCreate</ref> + <ref type="managerEvent">BridgeEnter</ref> + <ref type="managerEvent">BridgeLeave</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="BridgeEnter"> @@ -62,6 +72,11 @@ static struct stasis_message_router *bridge_state_router; <para>The uniqueid of the channel being swapped out of the bridge</para> </parameter> </syntax> + <see-also> + <ref type="managerEvent">BridgeCreate</ref> + <ref type="managerEvent">BridgeDestroy</ref> + <ref type="managerEvent">BridgeLeave</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="BridgeLeave"> @@ -71,6 +86,11 @@ static struct stasis_message_router *bridge_state_router; <bridge_snapshot/> <channel_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">BridgeCreate</ref> + <ref type="managerEvent">BridgeDestroy</ref> + <ref type="managerEvent">BridgeEnter</ref> + </see-also> </managerEventInstance> </managerEvent> <manager name="BridgeList" language="en_US"> @@ -86,6 +106,12 @@ static struct stasis_message_router *bridge_state_router; <description> <para>Returns a list of bridges, optionally filtering on a bridge type.</para> </description> + <see-also> + <ref type="manager">Bridge</ref> + <ref type="manager">BridgeDestroy</ref> + <ref type="manager">BridgeInfo</ref> + <ref type="manager">BridgeKick</ref> + </see-also> </manager> <manager name="BridgeInfo" language="en_US"> <synopsis> @@ -100,6 +126,12 @@ static struct stasis_message_router *bridge_state_router; <description> <para>Returns detailed information about a bridge and the channels in it.</para> </description> + <see-also> + <ref type="manager">Bridge</ref> + <ref type="manager">BridgeDestroy</ref> + <ref type="manager">BridgeKick</ref> + <ref type="manager">BridgeList</ref> + </see-also> <responses> <list-elements> <managerEvent language="en_US" name="BridgeInfoChannel"> @@ -134,6 +166,13 @@ static struct stasis_message_router *bridge_state_router; <description> <para>Deletes the bridge, causing channels to continue or hang up.</para> </description> + <see-also> + <ref type="manager">Bridge</ref> + <ref type="manager">BridgeInfo</ref> + <ref type="manager">BridgeKick</ref> + <ref type="manager">BridgeList</ref> + <ref type="managerEvent">BridgeDestroy</ref> + </see-also> </manager> <manager name="BridgeKick" language="en_US"> <synopsis> @@ -153,6 +192,13 @@ static struct stasis_message_router *bridge_state_router; <description> <para>The channel is removed from the bridge.</para> </description> + <see-also> + <ref type="manager">Bridge</ref> + <ref type="manager">BridgeDestroy</ref> + <ref type="manager">BridgeInfo</ref> + <ref type="manager">BridgeList</ref> + <ref type="managerEvent">BridgeLeave</ref> + </see-also> </manager> ***/ diff --git a/main/manager_channels.c b/main/manager_channels.c index ec1f807dc..ce0e38d9c 100644 --- a/main/manager_channels.c +++ b/main/manager_channels.c @@ -44,6 +44,10 @@ ASTERISK_REGISTER_FILE() <syntax> <channel_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">Newstate</ref> + <ref type="managerEvent">Hangup</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="Newstate"> @@ -52,6 +56,10 @@ ASTERISK_REGISTER_FILE() <syntax> <channel_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">Newchannel</ref> + <ref type="managerEvent">Hangup</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="Hangup"> @@ -66,6 +74,12 @@ ASTERISK_REGISTER_FILE() <para>A description of why the channel was hung up.</para> </parameter> </syntax> + <see-also> + <ref type="managerEvent">Newchannel</ref> + <ref type="managerEvent">SoftHangupRequest</ref> + <ref type="managerEvent">HangupRequest</ref> + <ref type="managerEvent">Newstate</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="HangupRequest"> @@ -75,6 +89,10 @@ ASTERISK_REGISTER_FILE() <channel_snapshot/> <xi:include xpointer="xpointer(/docs/managerEvent[@name='Hangup']/managerEventInstance/syntax/parameter[@name='Cause'])" /> </syntax> + <see-also> + <ref type="managerEvent">SoftHangupRequest</ref> + <ref type="managerEvent">Hangup</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="SoftHangupRequest"> @@ -84,6 +102,10 @@ ASTERISK_REGISTER_FILE() <channel_snapshot/> <xi:include xpointer="xpointer(/docs/managerEvent[@name='Hangup']/managerEventInstance/syntax/parameter[@name='Cause'])" /> </syntax> + <see-also> + <ref type="managerEvent">HangupRequest</ref> + <ref type="managerEvent">Hangup</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="NewExten"> @@ -114,6 +136,9 @@ ASTERISK_REGISTER_FILE() <para>A description of the Caller ID presentation.</para> </parameter> </syntax> + <see-also> + <ref type="function">CALLERID</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="NewAccountCode"> @@ -125,6 +150,9 @@ ASTERISK_REGISTER_FILE() <para>The channel's previous account code</para> </parameter> </syntax> + <see-also> + <ref type="function">CHANNEL</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="DialBegin"> @@ -139,6 +167,9 @@ ASTERISK_REGISTER_FILE() </syntax> <see-also> <ref type="application">Dial</ref> + <ref type="application">Originate</ref> + <ref type="manager">Originate</ref> + <ref type="managerEvent">DialEnd</ref> </see-also> </managerEventInstance> </managerEvent> @@ -219,6 +250,9 @@ ASTERISK_REGISTER_FILE() </syntax> <see-also> <ref type="application">Dial</ref> + <ref type="application">Originate</ref> + <ref type="manager">Originate</ref> + <ref type="managerEvent">DialBegin</ref> </see-also> </managerEventInstance> </managerEvent> @@ -231,6 +265,9 @@ ASTERISK_REGISTER_FILE() <para>The suggested MusicClass, if provided.</para> </parameter> </syntax> + <see-also> + <ref type="managerEvent">Unhold</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="Unhold"> @@ -239,6 +276,9 @@ ASTERISK_REGISTER_FILE() <syntax> <channel_snapshot/> </syntax> + <see-also> + <ref type="managerEvent">Hold</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="ChanSpyStart"> @@ -249,7 +289,8 @@ ASTERISK_REGISTER_FILE() <channel_snapshot prefix="Spyee"/> </syntax> <see-also> - <ref type="application">ChanSpyStop</ref> + <ref type="managerEvent">ChanSpyStop</ref> + <ref type="application">ChanSpy</ref> </see-also> </managerEventInstance> </managerEvent> @@ -261,7 +302,8 @@ ASTERISK_REGISTER_FILE() <channel_snapshot prefix="Spyee"/> </syntax> <see-also> - <ref type="application">ChanSpyStart</ref> + <ref type="managerEvent">ChanSpyStart</ref> + <ref type="application">ChanSpy</ref> </see-also> </managerEventInstance> </managerEvent> @@ -274,6 +316,9 @@ ASTERISK_REGISTER_FILE() <para>Hangup handler parameter string passed to the Gosub application.</para> </parameter> </syntax> + <see-also> + <ref type="function">CHANNEL</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="HangupHandlerPop"> @@ -380,6 +425,7 @@ ASTERISK_REGISTER_FILE() </syntax> <see-also> <ref type="managerEvent">MusicOnHoldStop</ref> + <ref type="application">StartMusicOnHold</ref> <ref type="application">MusicOnHold</ref> </see-also> </managerEventInstance> @@ -856,6 +902,9 @@ static void channel_dtmf_begin_cb(void *data, struct stasis_subscription *sub, </enumlist> </parameter> </syntax> + <see-also> + <ref type="managerEvent">DTMFEnd</ref> + </see-also> </managerEventInstance> ***/ manager_event(EVENT_FLAG_DTMF, "DTMFBegin", @@ -902,6 +951,9 @@ static void channel_dtmf_end_cb(void *data, struct stasis_subscription *sub, </enumlist> </parameter> </syntax> + <see-also> + <ref type="managerEvent">DTMFBegin</ref> + </see-also> </managerEventInstance> ***/ manager_event(EVENT_FLAG_DTMF, "DTMFEnd", diff --git a/main/pbx.c b/main/pbx.c index 3705ea127..63385f91f 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -5033,9 +5033,11 @@ int ast_context_remove_extension_callerid2(struct ast_context *con, const char * /* scan the extension list to find first matching extension-registrar */ for (exten = con->root; exten; prev_exten = exten, exten = exten->next) { if (!strcmp(exten->exten, ex.exten) && - (!registrar || !strcmp(exten->registrar, registrar)) && - (!matchcallerid || (!ast_strlen_zero(callerid) && !ast_strlen_zero(exten->cidmatch) && !strcmp(exten->cidmatch, callerid)) || (ast_strlen_zero(callerid) && ast_strlen_zero(exten->cidmatch)))) + (!matchcallerid || + (!ast_strlen_zero(ex.cidmatch) && !ast_strlen_zero(exten->cidmatch) && !strcmp(exten->cidmatch, ex.cidmatch)) || + (ast_strlen_zero(ex.cidmatch) && ast_strlen_zero(exten->cidmatch)))) { break; + } } if (!exten) { /* we can't find right extension */ @@ -5047,7 +5049,7 @@ int ast_context_remove_extension_callerid2(struct ast_context *con, const char * /* scan the priority list to remove extension with exten->priority == priority */ for (peer = exten, next_peer = exten->peer ? exten->peer : exten->next; peer && !strcmp(peer->exten, ex.exten) && - (!callerid || (!matchcallerid && !peer->matchcid) || (matchcallerid && peer->matchcid && !strcmp(peer->cidmatch, callerid))) ; + (!callerid || (!matchcallerid && !peer->matchcid) || (matchcallerid && peer->matchcid && !strcmp(peer->cidmatch, ex.cidmatch))) ; peer = next_peer, next_peer = next_peer ? (next_peer->peer ? next_peer->peer : next_peer->next) : NULL) { if ((priority == 0 || peer->priority == priority) && diff --git a/main/rtp_engine.c b/main/rtp_engine.c index c2b1c8c2b..0671374ef 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -102,6 +102,9 @@ and sending this report.</para> </parameter> </syntax> + <see-also> + <ref type="managerEvent">RTCPReceived</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="RTCPReceived"> @@ -131,6 +134,9 @@ <xi:include xpointer="xpointer(/docs/managerEvent[@name='RTCPSent']/managerEventInstance/syntax/parameter[@name='SentOctets'])" /> <xi:include xpointer="xpointer(/docs/managerEvent[@name='RTCPSent']/managerEventInstance/syntax/parameter[contains(@name, 'ReportX')])" /> </syntax> + <see-also> + <ref type="managerEvent">RTCPSent</ref> + </see-also> </managerEventInstance> </managerEvent> ***/ diff --git a/main/sorcery.c b/main/sorcery.c index a739f5eb8..55ee830b7 100644 --- a/main/sorcery.c +++ b/main/sorcery.c @@ -508,13 +508,15 @@ int ast_sorcery_init(void) }; ast_assert(wizards == NULL); - if (!(threadpool = ast_threadpool_create("Sorcery", NULL, &options))) { - threadpool = NULL; + threadpool = ast_threadpool_create("Sorcery", NULL, &options); + if (!threadpool) { return -1; } - if (!(wizards = ao2_container_alloc(WIZARD_BUCKETS, sorcery_wizard_hash, sorcery_wizard_cmp))) { - ast_threadpool_shutdown(threadpool); + wizards = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_MUTEX, 0, WIZARD_BUCKETS, + sorcery_wizard_hash, NULL, sorcery_wizard_cmp); + if (!wizards) { + sorcery_cleanup(); return -1; } @@ -524,8 +526,8 @@ int ast_sorcery_init(void) return -1; } - instances = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, INSTANCE_BUCKETS, - sorcery_instance_hash, sorcery_instance_cmp); + instances = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, INSTANCE_BUCKETS, + sorcery_instance_hash, NULL, sorcery_instance_cmp); if (!instances) { sorcery_cleanup(); return -1; @@ -606,7 +608,7 @@ static int sorcery_generic_observer_remove(void *obj, void *arg, int flags) { const struct sorcery_global_observer *observer = obj; - return (observer->callbacks == arg) ? CMP_MATCH | CMP_STOP : 0; + return (observer->callbacks == arg) ? CMP_MATCH : 0; } int ast_sorcery_global_observer_add(const struct ast_sorcery_global_observer *callbacks) @@ -842,23 +844,30 @@ static struct ast_sorcery_object_type *sorcery_object_type_alloc(const char *typ return NULL; } - if (!(object_type->fields = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_NOLOCK, OBJECT_FIELD_BUCKETS, - object_type_field_hash, object_type_field_cmp))) { + object_type->fields = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_NOLOCK, 0, + OBJECT_FIELD_BUCKETS, object_type_field_hash, NULL, object_type_field_cmp); + if (!object_type->fields) { ao2_ref(object_type, -1); return NULL; } - if (!(object_type->observers = ao2_container_alloc_options(AO2_ALLOC_OPT_LOCK_RWLOCK, 1, NULL, NULL))) { + object_type->observers = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_RWLOCK, 0, + NULL, NULL); + if (!object_type->observers) { ao2_ref(object_type, -1); return NULL; } - if (!(object_type->info = ast_calloc(1, sizeof(*object_type->info) + 2 * sizeof(object_type->info->files[0])))) { + object_type->info = ast_calloc(1, + sizeof(*object_type->info) + 2 * sizeof(object_type->info->files[0])); + if (!object_type->info) { ao2_ref(object_type, -1); return NULL; } - if (!(object_type->file = ast_calloc(1, sizeof(*object_type->file) + 2 * sizeof(object_type->file->types[0])))) { + object_type->file = ast_calloc(1, + sizeof(*object_type->file) + 2 * sizeof(object_type->file->types[0])); + if (!object_type->file) { ao2_ref(object_type, -1); return NULL; } @@ -1343,8 +1352,10 @@ static void sorcery_observer_invocation_destroy(void *obj) /*! \brief Allocator function for observer invocation */ static struct sorcery_observer_invocation *sorcery_observer_invocation_alloc(struct ast_sorcery_object_type *object_type, void *object) { - struct sorcery_observer_invocation *invocation = ao2_alloc(sizeof(*invocation), sorcery_observer_invocation_destroy); + struct sorcery_observer_invocation *invocation; + invocation = ao2_alloc_options(sizeof(*invocation), + sorcery_observer_invocation_destroy, AO2_ALLOC_OPT_LOCK_NOLOCK); if (!invocation) { return NULL; } @@ -1969,11 +1980,8 @@ struct ao2_container *ast_sorcery_retrieve_by_regex(const struct ast_sorcery *so } /*! \brief Internal function which returns if the wizard has created the object */ -static int sorcery_wizard_create(void *obj, void *arg, int flags) +static int sorcery_wizard_create(const struct ast_sorcery_object_wizard *object_wizard, const struct sorcery_details *details) { - const struct ast_sorcery_object_wizard *object_wizard = obj; - const struct sorcery_details *details = arg; - if (!object_wizard->wizard->callbacks.create) { ast_debug(5, "Sorcery wizard '%s' does not support creation\n", object_wizard->wizard->callbacks.name); return 0; @@ -2028,7 +2036,8 @@ int ast_sorcery_create(const struct ast_sorcery *sorcery, void *object) AST_VECTOR_RW_RDLOCK(&object_type->wizards); for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); - if (!found_wizard->caching && sorcery_wizard_create(found_wizard, &sdetails, 0) == CMP_MATCH) { + if (!found_wizard->caching + && sorcery_wizard_create(found_wizard, &sdetails) == CMP_MATCH) { object_wizard = found_wizard; } } @@ -2037,14 +2046,14 @@ int ast_sorcery_create(const struct ast_sorcery *sorcery, void *object) for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); if (found_wizard->caching) { - sorcery_wizard_create(found_wizard, &sdetails, 0); + sorcery_wizard_create(found_wizard, &sdetails); } } if (ao2_container_count(object_type->observers)) { - struct sorcery_observer_invocation *invocation = sorcery_observer_invocation_alloc( - object_type, object); + struct sorcery_observer_invocation *invocation; + invocation = sorcery_observer_invocation_alloc(object_type, object); if (invocation && ast_taskprocessor_push(object_type->serializer, sorcery_observers_notify_create, invocation)) { @@ -2082,11 +2091,8 @@ static int sorcery_observers_notify_update(void *data) } /*! \brief Internal function which returns if a wizard has updated the object */ -static int sorcery_wizard_update(void *obj, void *arg, int flags) +static int sorcery_wizard_update(const struct ast_sorcery_object_wizard *object_wizard, const struct sorcery_details *details) { - const struct ast_sorcery_object_wizard *object_wizard = obj; - const struct sorcery_details *details = arg; - if (!object_wizard->wizard->callbacks.update) { ast_debug(5, "Sorcery wizard '%s' does not support updating\n", object_wizard->wizard->callbacks.name); return 0; @@ -2118,7 +2124,8 @@ int ast_sorcery_update(const struct ast_sorcery *sorcery, void *object) AST_VECTOR_RW_RDLOCK(&object_type->wizards); for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); - if (!found_wizard->caching && sorcery_wizard_update(found_wizard, &sdetails, 0) == CMP_MATCH) { + if (!found_wizard->caching + && sorcery_wizard_update(found_wizard, &sdetails) == CMP_MATCH) { object_wizard = found_wizard; } } @@ -2127,14 +2134,14 @@ int ast_sorcery_update(const struct ast_sorcery *sorcery, void *object) for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); if (found_wizard->caching) { - sorcery_wizard_update(found_wizard, &sdetails, 0); + sorcery_wizard_update(found_wizard, &sdetails); } } if (ao2_container_count(object_type->observers)) { - struct sorcery_observer_invocation *invocation = sorcery_observer_invocation_alloc( - object_type, object); + struct sorcery_observer_invocation *invocation; + invocation = sorcery_observer_invocation_alloc(object_type, object); if (invocation && ast_taskprocessor_push(object_type->serializer, sorcery_observers_notify_update, invocation)) { @@ -2172,11 +2179,8 @@ static int sorcery_observers_notify_delete(void *data) } /*! \brief Internal function which returns if a wizard has deleted the object */ -static int sorcery_wizard_delete(void *obj, void *arg, int flags) +static int sorcery_wizard_delete(const struct ast_sorcery_object_wizard *object_wizard, const struct sorcery_details *details) { - const struct ast_sorcery_object_wizard *object_wizard = obj; - const struct sorcery_details *details = arg; - if (!object_wizard->wizard->callbacks.delete) { ast_debug(5, "Sorcery wizard '%s' does not support deletion\n", object_wizard->wizard->callbacks.name); return 0; @@ -2208,7 +2212,8 @@ int ast_sorcery_delete(const struct ast_sorcery *sorcery, void *object) AST_VECTOR_RW_RDLOCK(&object_type->wizards); for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); - if (!found_wizard->caching && sorcery_wizard_delete(found_wizard, &sdetails, 0) == CMP_MATCH) { + if (!found_wizard->caching + && sorcery_wizard_delete(found_wizard, &sdetails) == CMP_MATCH) { object_wizard = found_wizard; } } @@ -2217,14 +2222,14 @@ int ast_sorcery_delete(const struct ast_sorcery *sorcery, void *object) for (i = 0; i < AST_VECTOR_SIZE(&object_type->wizards); i++) { found_wizard = AST_VECTOR_GET(&object_type->wizards, i); if (found_wizard->caching) { - sorcery_wizard_delete(found_wizard, &sdetails, 0); + sorcery_wizard_delete(found_wizard, &sdetails); } } if (ao2_container_count(object_type->observers)) { - struct sorcery_observer_invocation *invocation = sorcery_observer_invocation_alloc( - object_type, object); + struct sorcery_observer_invocation *invocation; + invocation = sorcery_observer_invocation_alloc(object_type, object); if (invocation && ast_taskprocessor_push(object_type->serializer, sorcery_observers_notify_delete, invocation)) { @@ -2368,7 +2373,7 @@ static int sorcery_observer_remove(void *obj, void *arg, int flags) { const struct ast_sorcery_object_type_observer *observer = obj; - return (observer->callbacks == arg) ? CMP_MATCH | CMP_STOP : 0; + return (observer->callbacks == arg) ? CMP_MATCH : 0; } void ast_sorcery_observer_remove(const struct ast_sorcery *sorcery, const char *type, const struct ast_sorcery_observer *callbacks) @@ -2390,18 +2395,20 @@ void ast_sorcery_observer_remove(const struct ast_sorcery *sorcery, const char * int ast_sorcery_object_id_sort(const void *obj, const void *arg, int flags) { + const void *object_left = obj; + const void *object_right = arg; const char *right_key = arg; int cmp; switch (flags & OBJ_SEARCH_MASK) { case OBJ_SEARCH_OBJECT: - right_key = ast_sorcery_object_get_id(arg); + right_key = ast_sorcery_object_get_id(object_right); /* Fall through */ case OBJ_SEARCH_KEY: - cmp = strcmp(ast_sorcery_object_get_id(obj), right_key); + cmp = strcmp(ast_sorcery_object_get_id(object_left), right_key); break; case OBJ_SEARCH_PARTIAL_KEY: - cmp = strncmp(ast_sorcery_object_get_id(obj), right_key, strlen(right_key)); + cmp = strncmp(ast_sorcery_object_get_id(object_left), right_key, strlen(right_key)); break; default: cmp = 0; @@ -2412,37 +2419,32 @@ int ast_sorcery_object_id_sort(const void *obj, const void *arg, int flags) int ast_sorcery_object_id_compare(void *obj, void *arg, int flags) { - const char *right_key = arg; - int cmp = 0; + int cmp; + + cmp = ast_sorcery_object_id_sort(obj, arg, flags); + if (cmp) { + return 0; + } + return CMP_MATCH; +} + +int ast_sorcery_object_id_hash(const void *obj, int flags) +{ + const char *key; switch (flags & OBJ_SEARCH_MASK) { - case OBJ_SEARCH_OBJECT: - right_key = ast_sorcery_object_get_id(arg); - /* Fall through */ case OBJ_SEARCH_KEY: - if (strcmp(ast_sorcery_object_get_id(obj), right_key) == 0) { - cmp = CMP_MATCH | CMP_STOP; - } + key = obj; break; - case OBJ_SEARCH_PARTIAL_KEY: - if (strncmp(ast_sorcery_object_get_id(obj), right_key, strlen(right_key)) == 0) { - cmp = CMP_MATCH; - } + case OBJ_SEARCH_OBJECT: + key = ast_sorcery_object_get_id(obj); break; default: - cmp = 0; - break; - } - return cmp; -} - -int ast_sorcery_object_id_hash(const void *obj, int flags) { - if (flags & OBJ_SEARCH_OBJECT) { - return ast_str_hash(ast_sorcery_object_get_id(obj)); - } else if (flags & OBJ_SEARCH_KEY) { - return ast_str_hash(obj); + /* Hash can only work on something with a full key. */ + ast_assert(0); + return 0; } - return -1; + return ast_str_hash(key); } struct ast_sorcery_object_type *ast_sorcery_get_object_type(const struct ast_sorcery *sorcery, @@ -2459,7 +2461,7 @@ static int is_registered_cb(void *obj, void *arg, int flags) if (object_field->name_regex && !regexec(object_field->name_regex, name, 0, NULL, 0)) { - rc = CMP_MATCH | CMP_STOP; + rc = CMP_MATCH; } return rc; diff --git a/main/stasis.c b/main/stasis.c index 91ad94e76..e04d92a4f 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -59,6 +59,7 @@ ASTERISK_REGISTER_FILE(); </description> <see-also> <ref type="application">UserEvent</ref> + <ref type="managerEvent">UserEvent</ref> </see-also> </managerEventInstance> </managerEvent> diff --git a/main/stasis_bridges.c b/main/stasis_bridges.c index 0e46edbea..a5f29c74e 100644 --- a/main/stasis_bridges.c +++ b/main/stasis_bridges.c @@ -79,6 +79,9 @@ ASTERISK_REGISTER_FILE() <para>Destination extension for the blind transfer.</para> </parameter> </syntax> + <see-also> + <ref type="manager">BlindTransfer</ref> + </see-also> </managerEventInstance> </managerEvent> <managerEvent language="en_US" name="AttendedTransfer"> @@ -131,6 +134,9 @@ ASTERISK_REGISTER_FILE() <para> <replaceable>SecondTransfererChannel</replaceable>: Alice's channel in the bridge with Bob.</para> <para> <replaceable>SecondBridgeUniqueid</replaceable>: The bridge between Alice and Bob.</para> </description> + <see-also> + <ref type="manager">AtxFer</ref> + </see-also> </managerEventInstance> </managerEvent> ***/ diff --git a/main/utils.c b/main/utils.c index 46edf43ea..1d2aa0b27 100644 --- a/main/utils.c +++ b/main/utils.c @@ -2488,7 +2488,7 @@ void ast_set_default_eid(struct ast_eid *eid) return; } for (x = 0; x < MAXIF; x++) { - static const char *prefixes[] = { "eth", "em" }; + static const char *prefixes[] = { "eth", "em", "eno", "ens" }; unsigned int i; for (i = 0; i < ARRAY_LEN(prefixes); i++) { @@ -2539,7 +2539,7 @@ void ast_set_default_eid(struct ast_eid *eid) } #endif #endif - ast_debug(1, "No ethernet interface found for seeding global EID. You will have to set it manually.\n"); + ast_log(LOG_WARNING, "No ethernet interface found for seeding global EID. You will have to set it manually.\n"); } int ast_str_to_eid(struct ast_eid *eid, const char *s) @@ -2564,6 +2564,14 @@ int ast_eid_cmp(const struct ast_eid *eid1, const struct ast_eid *eid2) return memcmp(eid1, eid2, sizeof(*eid1)); } +int ast_eid_is_empty(const struct ast_eid *eid) +{ + struct ast_eid empty_eid; + + memset(&empty_eid, 0, sizeof(empty_eid)); + return memcmp(eid, &empty_eid, sizeof(empty_eid)) ? 0 : 1; +} + int ast_file_is_readable(const char *filename) { #if defined(HAVE_EACCESS) || defined(HAVE_EUIDACCESS) |