[svn-commits] mmichelson: branch mmichelson/sip_transfer r387208 - in /team/mmichelson/sip_...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Wed May 1 15:33:34 CDT 2013
Author: mmichelson
Date: Wed May 1 15:33:31 2013
New Revision: 387208
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=387208
Log:
Resolve conflict and reset automerge.
Modified:
team/mmichelson/sip_transfer/ (props changed)
team/mmichelson/sip_transfer/channels/chan_dahdi.c
team/mmichelson/sip_transfer/channels/chan_iax2.c
team/mmichelson/sip_transfer/channels/chan_mgcp.c
team/mmichelson/sip_transfer/channels/chan_sip.c
team/mmichelson/sip_transfer/channels/chan_skinny.c
team/mmichelson/sip_transfer/channels/chan_unistim.c
team/mmichelson/sip_transfer/channels/sig_analog.c
Propchange: team/mmichelson/sip_transfer/
------------------------------------------------------------------------------
automerge = *
Propchange: team/mmichelson/sip_transfer/
------------------------------------------------------------------------------
Binary property 'branch-11-merged' - no diff available.
Propchange: team/mmichelson/sip_transfer/
------------------------------------------------------------------------------
--- bridge_construction-integrated (original)
+++ bridge_construction-integrated Wed May 1 15:33:31 2013
@@ -1,1 +1,1 @@
-/trunk:1-387108
+/trunk:1-387186
Propchange: team/mmichelson/sip_transfer/
------------------------------------------------------------------------------
--- sip_transfer-integrated (original)
+++ sip_transfer-integrated Wed May 1 15:33:31 2013
@@ -1,1 +1,1 @@
-/team/mmichelson/transfer:1-387147
+/team/mmichelson/transfer:1-387207
Propchange: team/mmichelson/sip_transfer/
------------------------------------------------------------------------------
--- transfer-integrated (original)
+++ transfer-integrated Wed May 1 15:33:31 2013
@@ -1,1 +1,1 @@
-/team/group/bridge_construction:1-387117
+/team/group/bridge_construction:1-387197
Modified: team/mmichelson/sip_transfer/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_transfer/channels/chan_dahdi.c?view=diff&rev=387208&r1=387207&r2=387208
==============================================================================
--- team/mmichelson/sip_transfer/channels/chan_dahdi.c (original)
+++ team/mmichelson/sip_transfer/channels/chan_dahdi.c Wed May 1 15:33:31 2013
@@ -6547,8 +6547,7 @@
p->owner = p->subs[SUB_REAL].owner;
if (ast_channel_state(p->owner) != AST_STATE_UP)
p->subs[SUB_REAL].needanswer = 1;
- if (ast_bridged_channel(p->subs[SUB_REAL].owner))
- ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
} else if (p->subs[SUB_THREEWAY].dfd > -1) {
swap_subs(p, SUB_THREEWAY, SUB_REAL);
unalloc_sub(p, SUB_THREEWAY);
@@ -6569,7 +6568,7 @@
if (p->subs[SUB_CALLWAIT].inthreeway) {
/* This is actually part of a three way, placed on hold. Place the third part
on music on hold now */
- if (p->subs[SUB_THREEWAY].owner && ast_bridged_channel(p->subs[SUB_THREEWAY].owner)) {
+ if (p->subs[SUB_THREEWAY].owner) {
ast_queue_control_data(p->subs[SUB_THREEWAY].owner, AST_CONTROL_HOLD,
S_OR(p->mohsuggest, NULL),
!ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
@@ -6584,7 +6583,7 @@
if (p->subs[SUB_CALLWAIT].inthreeway) {
/* The other party of the three way call is currently in a call-wait state.
Start music on hold for them, and take the main guy out of the third call */
- if (p->subs[SUB_CALLWAIT].owner && ast_bridged_channel(p->subs[SUB_CALLWAIT].owner)) {
+ if (p->subs[SUB_CALLWAIT].owner) {
ast_queue_control_data(p->subs[SUB_CALLWAIT].owner, AST_CONTROL_HOLD,
S_OR(p->mohsuggest, NULL),
!ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
@@ -7838,11 +7837,10 @@
together (but then, why would we want to?) */
if (ast_bridged_channel(p->subs[SUB_REAL].owner)) {
/* The three-way person we're about to transfer to could still be in MOH, so
- stop if now if appropriate */
- if (ast_bridged_channel(p->subs[SUB_THREEWAY].owner))
- ast_queue_control(p->subs[SUB_THREEWAY].owner, AST_CONTROL_UNHOLD);
+ stop it now */
+ ast_queue_control(p->subs[SUB_THREEWAY].owner, AST_CONTROL_UNHOLD);
if (ast_channel_state(p->subs[SUB_REAL].owner) == AST_STATE_RINGING) {
- ast_indicate(ast_bridged_channel(p->subs[SUB_REAL].owner), AST_CONTROL_RINGING);
+ ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_RINGING);
}
if (ast_channel_state(p->subs[SUB_THREEWAY].owner) == AST_STATE_RING) {
tone_zone_play_tone(p->subs[SUB_THREEWAY].dfd, DAHDI_TONE_RINGTONE);
@@ -7858,7 +7856,7 @@
} else if (ast_bridged_channel(p->subs[SUB_THREEWAY].owner)) {
ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
if (ast_channel_state(p->subs[SUB_THREEWAY].owner) == AST_STATE_RINGING) {
- ast_indicate(ast_bridged_channel(p->subs[SUB_THREEWAY].owner), AST_CONTROL_RINGING);
+ ast_queue_control(p->subs[SUB_THREEWAY].owner, AST_CONTROL_RINGING);
}
if (ast_channel_state(p->subs[SUB_REAL].owner) == AST_STATE_RING) {
tone_zone_play_tone(p->subs[SUB_REAL].dfd, DAHDI_TONE_RINGTONE);
@@ -8524,8 +8522,7 @@
/* Make sure it stops ringing */
dahdi_set_hook(p->subs[idx].dfd, DAHDI_OFFHOOK);
/* Okay -- probably call waiting*/
- if (ast_bridged_channel(p->owner))
- ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
p->subs[idx].needunhold = 1;
break;
case AST_STATE_RESERVED:
@@ -8679,17 +8676,15 @@
p->cidcwexpire = 0;
p->cid_suppress_expire = 0;
/* Start music on hold if appropriate */
- if (!p->subs[SUB_CALLWAIT].inthreeway && ast_bridged_channel(p->subs[SUB_CALLWAIT].owner)) {
+ if (!p->subs[SUB_CALLWAIT].inthreeway) {
ast_queue_control_data(p->subs[SUB_CALLWAIT].owner, AST_CONTROL_HOLD,
S_OR(p->mohsuggest, NULL),
!ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
}
p->subs[SUB_CALLWAIT].needhold = 1;
- if (ast_bridged_channel(p->subs[SUB_REAL].owner)) {
- ast_queue_control_data(p->subs[SUB_REAL].owner, AST_CONTROL_HOLD,
- S_OR(p->mohsuggest, NULL),
- !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
- }
+ ast_queue_control_data(p->subs[SUB_REAL].owner, AST_CONTROL_HOLD,
+ S_OR(p->mohsuggest, NULL),
+ !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
p->subs[SUB_REAL].needunhold = 1;
} else if (!p->subs[SUB_THREEWAY].owner) {
if (!p->threewaycalling) {
@@ -8766,12 +8761,10 @@
} else {
ast_verb(3, "Started three way call on channel %d\n", p->channel);
- /* Start music on hold if appropriate */
- if (ast_bridged_channel(p->subs[SUB_THREEWAY].owner)) {
- ast_queue_control_data(p->subs[SUB_THREEWAY].owner, AST_CONTROL_HOLD,
- S_OR(p->mohsuggest, NULL),
- !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
- }
+ /* Start music on hold */
+ ast_queue_control_data(p->subs[SUB_THREEWAY].owner, AST_CONTROL_HOLD,
+ S_OR(p->mohsuggest, NULL),
+ !ast_strlen_zero(p->mohsuggest) ? strlen(p->mohsuggest) + 1 : 0);
p->subs[SUB_THREEWAY].needhold = 1;
}
ast_callid_threadstorage_auto_clean(callid, callid_created);
@@ -8808,7 +8801,7 @@
swap_subs(p, SUB_THREEWAY, SUB_REAL);
otherindex = SUB_REAL;
}
- if (p->subs[otherindex].owner && ast_bridged_channel(p->subs[otherindex].owner))
+ if (p->subs[otherindex].owner)
ast_queue_control(p->subs[otherindex].owner, AST_CONTROL_UNHOLD);
p->subs[otherindex].needunhold = 1;
p->owner = p->subs[SUB_REAL].owner;
@@ -8817,7 +8810,7 @@
swap_subs(p, SUB_THREEWAY, SUB_REAL);
ast_channel_softhangup_internal_flag_add(p->subs[SUB_THREEWAY].owner, AST_SOFTHANGUP_DEV);
p->owner = p->subs[SUB_REAL].owner;
- if (p->subs[SUB_REAL].owner && ast_bridged_channel(p->subs[SUB_REAL].owner))
+ if (p->subs[SUB_REAL].owner)
ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
p->subs[SUB_REAL].needunhold = 1;
dahdi_enable_ec(p);
@@ -9011,7 +9004,7 @@
(res != DAHDI_EVENT_HOOKCOMPLETE)) {
ast_debug(1, "Restoring owner of channel %d on event %d\n", p->channel, res);
p->owner = p->subs[SUB_REAL].owner;
- if (p->owner && ast_bridged_channel(p->owner))
+ if (p->owner)
ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
p->subs[SUB_REAL].needunhold = 1;
}
@@ -9056,8 +9049,7 @@
p->callwaitingrepeat = 0;
p->cidcwexpire = 0;
p->cid_suppress_expire = 0;
- if (ast_bridged_channel(p->owner))
- ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(p->owner, AST_CONTROL_UNHOLD);
p->subs[SUB_REAL].needunhold = 1;
} else
ast_log(LOG_WARNING, "Absorbed on hook, but nobody is left!?!?\n");
@@ -10694,8 +10686,7 @@
swap_subs(p, SUB_REAL, SUB_THREEWAY);
unalloc_sub(p, SUB_THREEWAY);
p->owner = p->subs[SUB_REAL].owner;
- if (ast_bridged_channel(p->subs[SUB_REAL].owner))
- ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(p->subs[SUB_REAL].owner, AST_CONTROL_UNHOLD);
ast_hangup(chan);
goto quit;
} else {
Modified: team/mmichelson/sip_transfer/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_transfer/channels/chan_iax2.c?view=diff&rev=387208&r1=387207&r2=387208
==============================================================================
--- team/mmichelson/sip_transfer/channels/chan_iax2.c (original)
+++ team/mmichelson/sip_transfer/channels/chan_iax2.c Wed May 1 15:33:31 2013
@@ -10426,21 +10426,21 @@
ast_set_flag64(iaxs[fr->callno], IAX_QUELCH);
if (ies.musiconhold) {
+ const char *moh_suggest;
+
iax2_lock_owner(fr->callno);
if (!iaxs[fr->callno] || !iaxs[fr->callno]->owner) {
break;
}
- if (ast_bridged_channel(iaxs[fr->callno]->owner)) {
- const char *moh_suggest = iaxs[fr->callno]->mohsuggest;
-
- /*
- * We already hold the owner lock so we do not
- * need to check iaxs[fr->callno] after it returns.
- */
- iax2_queue_control_data(fr->callno, AST_CONTROL_HOLD,
- S_OR(moh_suggest, NULL),
- !ast_strlen_zero(moh_suggest) ? strlen(moh_suggest) + 1 : 0);
- }
+
+ /*
+ * We already hold the owner lock so we do not
+ * need to check iaxs[fr->callno] after it returns.
+ */
+ moh_suggest = iaxs[fr->callno]->mohsuggest;
+ iax2_queue_control_data(fr->callno, AST_CONTROL_HOLD,
+ S_OR(moh_suggest, NULL),
+ !ast_strlen_zero(moh_suggest) ? strlen(moh_suggest) + 1 : 0);
ast_channel_unlock(iaxs[fr->callno]->owner);
}
}
@@ -10465,13 +10465,12 @@
if (!iaxs[fr->callno]->owner) {
break;
}
- if (ast_bridged_channel(iaxs[fr->callno]->owner)) {
- /*
- * We already hold the owner lock so we do not
- * need to check iaxs[fr->callno] after it returns.
- */
- iax2_queue_control_data(fr->callno, AST_CONTROL_UNHOLD, NULL, 0);
- }
+
+ /*
+ * We already hold the owner lock so we do not
+ * need to check iaxs[fr->callno] after it returns.
+ */
+ iax2_queue_control_data(fr->callno, AST_CONTROL_UNHOLD, NULL, 0);
ast_channel_unlock(iaxs[fr->callno]->owner);
}
break;
Modified: team/mmichelson/sip_transfer/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_transfer/channels/chan_mgcp.c?view=diff&rev=387208&r1=387207&r2=387208
==============================================================================
--- team/mmichelson/sip_transfer/channels/chan_mgcp.c (original)
+++ team/mmichelson/sip_transfer/channels/chan_mgcp.c Wed May 1 15:33:31 2013
@@ -3226,11 +3226,10 @@
together (but then, why would we want to?) */
if (ast_bridged_channel(p->sub->owner)) {
/* The three-way person we're about to transfer to could still be in MOH, so
- stop if now if appropriate */
- if (ast_bridged_channel(p->sub->next->owner))
- ast_queue_control(p->sub->next->owner, AST_CONTROL_UNHOLD);
+ stop it now */
+ ast_queue_control(p->sub->next->owner, AST_CONTROL_UNHOLD);
if (ast_channel_state(p->sub->owner) == AST_STATE_RINGING) {
- ast_indicate(ast_bridged_channel(p->sub->next->owner), AST_CONTROL_RINGING);
+ ast_queue_control(p->sub->next->owner, AST_CONTROL_RINGING);
}
if (ast_channel_masquerade(p->sub->next->owner, ast_bridged_channel(p->sub->owner))) {
ast_log(LOG_WARNING, "Unable to masquerade %s as %s\n",
@@ -3241,7 +3240,7 @@
unalloc_sub(p->sub->next);
} else if (ast_bridged_channel(p->sub->next->owner)) {
if (ast_channel_state(p->sub->owner) == AST_STATE_RINGING) {
- ast_indicate(ast_bridged_channel(p->sub->next->owner), AST_CONTROL_RINGING);
+ ast_queue_control(p->sub->next->owner, AST_CONTROL_RINGING);
}
ast_queue_control(p->sub->next->owner, AST_CONTROL_UNHOLD);
if (ast_channel_masquerade(p->sub->owner, ast_bridged_channel(p->sub->next->owner))) {
@@ -3277,8 +3276,7 @@
if (sub->outgoing) {
/* Answered */
if (sub->owner) {
- if (ast_bridged_channel(sub->owner))
- ast_queue_control(sub->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(sub->owner, AST_CONTROL_UNHOLD);
sub->cxmode = MGCP_CX_SENDRECV;
if (!sub->rtp) {
start_rtp(sub);
@@ -3334,8 +3332,7 @@
ast_log(LOG_WARNING, "On hook, but already have owner on %s@%s\n", p->name, p->parent->name);
ast_log(LOG_WARNING, "If we're onhook why are we here trying to handle a hd or hf?\n");
}
- if (ast_bridged_channel(sub->owner))
- ast_queue_control(sub->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(sub->owner, AST_CONTROL_UNHOLD);
sub->cxmode = MGCP_CX_SENDRECV;
if (!sub->rtp) {
start_rtp(sub);
@@ -3452,20 +3449,19 @@
sub->cxmode = MGCP_CX_MUTE;
ast_verb(3, "MGCP Muting %d on %s@%s\n", sub->id, p->name, p->parent->name);
transmit_modify_request(sub);
- if (sub->owner && ast_bridged_channel(sub->owner))
+ if (sub->owner)
ast_queue_control(sub->owner, AST_CONTROL_HOLD);
sub->next->cxmode = MGCP_CX_RECVONLY;
handle_hd_hf(sub->next, ev);
} else if (sub->owner && sub->next->owner) {
/* We've got two active calls lets decide whether or not to conference or just flip flop */
if ((!sub->outgoing) && (!sub->next->outgoing)) {
- /* We made both calls lets conferenct */
+ /* We made both calls lets conference */
ast_verb(3, "MGCP Conferencing %d and %d on %s@%s\n",
sub->id, sub->next->id, p->name, p->parent->name);
sub->cxmode = MGCP_CX_CONF;
sub->next->cxmode = MGCP_CX_CONF;
- if (ast_bridged_channel(sub->next->owner))
- ast_queue_control(sub->next->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(sub->next->owner, AST_CONTROL_UNHOLD);
transmit_modify_request(sub);
transmit_modify_request(sub->next);
} else {
@@ -3477,11 +3473,9 @@
sub->cxmode = MGCP_CX_MUTE;
ast_verb(3, "MGCP Muting %d on %s@%s\n", sub->id, p->name, p->parent->name);
transmit_modify_request(sub);
- if (ast_bridged_channel(sub->owner))
- ast_queue_control(sub->owner, AST_CONTROL_HOLD);
-
- if (ast_bridged_channel(sub->next->owner))
- ast_queue_control(sub->next->owner, AST_CONTROL_HOLD);
+
+ ast_queue_control(sub->owner, AST_CONTROL_HOLD);
+ ast_queue_control(sub->next->owner, AST_CONTROL_HOLD);
handle_hd_hf(sub->next, ev);
}
@@ -3496,8 +3490,7 @@
/* XXX - What do we do now? */
return -1;
}
- if (ast_bridged_channel(p->sub->owner))
- ast_queue_control(p->sub->owner, AST_CONTROL_UNHOLD);
+ ast_queue_control(p->sub->owner, AST_CONTROL_UNHOLD);
p->sub->cxmode = MGCP_CX_SENDRECV;
transmit_modify_request(p->sub);
}
Modified: team/mmichelson/sip_transfer/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_transfer/channels/chan_sip.c?view=diff&rev=387208&r1=387207&r2=387208
==============================================================================
--- team/mmichelson/sip_transfer/channels/chan_sip.c (original)
+++ team/mmichelson/sip_transfer/channels/chan_sip.c Wed May 1 15:33:31 2013
@@ -385,7 +385,7 @@
<para>Since there are several headers (such as Via) which can occur multiple
times, SIP_HEADER takes an optional second argument to specify which header with
that name to retrieve. Headers start at offset <literal>1</literal>.</para>
- <para>Please observe that contents of the SDP (an attachment to the
+ <para>Please observe that contents of the SDP (an attachment to the
SIP request) can't be accessed with this function.</para>
</description>
</function>
@@ -1119,6 +1119,8 @@
struct ao2_container *sip_monitor_instances;
+struct show_peers_context;
+
/*---------------------------- Forward declarations of functions in chan_sip.c */
/* Note: This is added to help splitting up chan_sip.c into several files
in coming releases. */
@@ -1294,6 +1296,7 @@
static int peer_status(struct sip_peer *peer, char *status, int statuslen);
static char *sip_show_sched(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static char * _sip_show_peers(int fd, int *total, struct mansession *s, const struct message *m, int argc, const char *argv[]);
+static struct sip_peer *_sip_show_peers_one(int fd, struct mansession *s, struct show_peers_context *cont, struct sip_peer *peer);
static char *sip_show_peers(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static char *sip_show_objects(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static void print_group(int fd, ast_group_t group, int crlf);
@@ -1579,7 +1582,7 @@
};
/* -------- End of declarations of structures, constants and forward declarations of functions
- Below starts actual code
+ Below starts actual code
------------------------
*/
@@ -2733,7 +2736,7 @@
size_t datalen = ast_str_strlen(req->data);
char buf[1024] = "";
int timeout = -1;
-
+
/* Read in headers one line at a time */
while (datalen < 4 || strncmp(REQ_OFFSET_TO_STR(req, data->used - 4), "\r\n\r\n", 4)) {
if (!tcptls_session->client && !authenticated) {
@@ -2842,7 +2845,7 @@
}
content_length -= strlen(buf);
ast_str_append(&req->data, 0, "%s", buf);
-
+
datalen = ast_str_strlen(req->data);
if (datalen > SIP_MAX_PACKET_SIZE) {
ast_log(LOG_WARNING, "Rejecting TLS packet from '%s' because way too large: %zu\n",
@@ -3063,7 +3066,7 @@
ast_str_append(&req->data, 0, "%s", ast_str_buffer(tcptls_session->overflow_buf));
ast_str_reset(tcptls_session->overflow_buf);
}
-
+
datalen = ast_str_strlen(req->data);
if (datalen > SIP_MAX_PACKET_SIZE) {
ast_log(LOG_WARNING, "Rejecting TCP packet from '%s' because way too large: %zu\n",
@@ -3194,7 +3197,7 @@
}
}
- /*
+ /*
* handle the socket event, check for both reads from the socket fd or TCP overflow buffer,
* and writes from alert_pipe fd.
*/
@@ -3492,7 +3495,7 @@
AST_SCHED_DEL_UNREF(sched, dialog->waitid, dialog_unref(dialog, "when you delete the waitid sched, you should dec the refcount for the stored dialog ptr"));
AST_SCHED_DEL_UNREF(sched, dialog->initid, dialog_unref(dialog, "when you delete the initid sched, you should dec the refcount for the stored dialog ptr"));
-
+
if (dialog->autokillid > -1) {
AST_SCHED_DEL_UNREF(sched, dialog->autokillid, dialog_unref(dialog, "when you delete the autokillid sched, you should dec the refcount for the stored dialog ptr"));
}
@@ -3713,7 +3716,7 @@
static int find_sip_method(const char *msg)
{
int i, res = 0;
-
+
if (ast_strlen_zero(msg)) {
return 0;
}
@@ -5621,7 +5624,7 @@
* Checks the "sipregs" realtime family from extconfig.conf if it's configured.
* This returns a pointer to a peer and because we use build_peer, we can rest
* assured that the refcount is bumped.
- *
+ *
* \note This is never called with both newpeername and addr at the same time.
* If you do, be prepared to get a peer with a different name than newpeername.
*/
@@ -6283,7 +6286,7 @@
* an A record lookup should be used instead of SRV.
*/
if (!hostport.port && sip_cfg.srvlookup) {
- snprintf(service, sizeof(service), "_%s._%s.%s",
+ snprintf(service, sizeof(service), "_%s._%s.%s",
get_srv_service(dialog->socket.type),
get_srv_protocol(dialog->socket.type), peername);
if ((srv_ret = ast_get_srv(NULL, host, sizeof(host), &tportno,
@@ -6544,7 +6547,7 @@
mwi->call->mwi = NULL;
sip_destroy(mwi->call);
}
-
+
AST_SCHED_DEL(sched, mwi->resub);
ast_string_field_free_memory(mwi);
ast_free(mwi);
@@ -6600,16 +6603,16 @@
p->relatedpeer->mwipvt = dialog_unref(p->relatedpeer->mwipvt, "delete ->relatedpeer->mwipvt");
if (p->relatedpeer && p->relatedpeer->call == p)
p->relatedpeer->call = dialog_unref(p->relatedpeer->call, "unset the relatedpeer->call field in tandem with relatedpeer field itself");
-
+
if (p->relatedpeer)
p->relatedpeer = sip_unref_peer(p->relatedpeer,"unsetting a dialog relatedpeer field in sip_destroy");
-
+
if (p->registry) {
if (p->registry->call == p)
p->registry->call = dialog_unref(p->registry->call, "nulling out the registry's call dialog field in unlink_all");
p->registry = registry_unref(p->registry, "delete p->registry");
}
-
+
if (p->mwi) {
p->mwi->call = NULL;
p->mwi = NULL;
@@ -7293,8 +7296,8 @@
} else {
/* Note we will need a BYE when this all settles out
but we can't send one while we have "INVITE" outstanding. */
- ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
- ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);
+ ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
+ ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);
AST_SCHED_DEL_UNREF(sched, p->waitid, dialog_unref(p, "when you delete the waitid sched, you should dec the refcount for the stored dialog ptr"));
if (sip_cancel_destroy(p)) {
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
@@ -7330,7 +7333,7 @@
codec = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC");
}
- if (!codec)
+ if (!codec)
return;
ast_getformatbyname(codec, &fmt);
@@ -7801,7 +7804,7 @@
if (ast_channel_state(ast) == AST_STATE_RING) {
p->invitestate = INV_EARLY_MEDIA;
if (!ast_test_flag(&p->flags[0], SIP_PROGRESS_SENT) ||
- (ast_test_flag(&p->flags[0], SIP_PROG_INBAND) == SIP_PROG_INBAND_NEVER)) {
+ (ast_test_flag(&p->flags[0], SIP_PROG_INBAND) == SIP_PROG_INBAND_NEVER)) {
/* Send 180 ringing if out-of-band seems reasonable */
transmit_provisional_response(p, "180 Ringing", &p->initreq, 0);
ast_set_flag(&p->flags[0], SIP_RINGING);
@@ -7991,7 +7994,7 @@
{
const char *my_name; /* pick a good name */
-
+
if (title) {
my_name = title;
} else {
@@ -8141,7 +8144,7 @@
struct ast_tone_zone *zone;
if (!(zone = ast_get_indication_zone(i->zone))) {
ast_log(LOG_ERROR, "Unknown country code '%s' for tonezone. Check indications.conf for available country codes.\n", i->zone);
- }
+ }
ast_channel_zone_set(tmp, zone);
}
i->owner = tmp;
@@ -8410,7 +8413,7 @@
{
/* Retrieve audio/etc from channel. Assumes p->lock is already held. */
struct ast_frame *f;
-
+
if (!p->rtp) {
/* We have no RTP allocated for this channel */
return &ast_null_frame;
@@ -8810,7 +8813,7 @@
p->do_history = recordhistory;
- p->branch = ast_random();
+ p->branch = ast_random();
make_our_tag(p);
p->ocseq = INITIAL_CSEQ;
p->allowed_methods = UINT_MAX;
@@ -9010,14 +9013,14 @@
/*
* Compare incoming request against initial transaction.
- *
+ *
* This is a best effort attempt at distinguishing forked requests from
* our initial transaction. If all the elements are NOT in place to evaluate
* this, this block is ignored and the dialog match is made regardless.
* Once the totag is established after the dialog is confirmed, this is not necessary.
*
* CRITERIA required for initial transaction matching.
- *
+ *
* 1. Is a Request
* 2. Callid and theirtag match (this is done in the dialog matching block)
* 3. totag is NOT present
@@ -9612,7 +9615,7 @@
static unsigned int set_pvt_allowed_methods(struct sip_pvt *pvt, struct sip_request *req)
{
pvt->allowed_methods = parse_allowed_methods(req);
-
+
if (ast_test_flag(&pvt->flags[1], SIP_PAGE2_RPID_UPDATE)) {
mark_method_allowed(&pvt->allowed_methods, SIP_UPDATE);
}
@@ -9848,7 +9851,7 @@
}
if (!strcasecmp(line, "Content-Type: application/sdp"))
found_application_sdp = TRUE;
-
+
if (ast_strlen_zero(line)) {
if (found_application_sdp && !found_end_of_headers){
req->sdp_start = x;
@@ -11396,12 +11399,12 @@
req->headers++;
- return 0;
-}
-
-/*!
+ return 0;
+}
+
+/*!
* \pre dialog is assumed to be locked while calling this function
- * \brief Add 'Max-Forwards' header to SIP message
+ * \brief Add 'Max-Forwards' header to SIP message
*/
static int add_max_forwards(struct sip_pvt *dialog, struct sip_request *req)
{
@@ -11939,7 +11942,7 @@
sizeof(stripped));
n = get_in_brackets(stripped);
c = remove_uri_parameters(n);
- }
+ }
init_req(req, sipmethod, c);
snprintf(tmp, sizeof(tmp), "%u %s", seqno, sip_methods[sipmethod].text);
@@ -12371,7 +12374,7 @@
}
}
}
-
+
/* Use default realm from config file */
ast_string_field_set(p, realm, sip_cfg.realm);
}
@@ -13695,7 +13698,7 @@
INVITE that opened the SIP dialogue
We reinvite so that the audio stream (RTP) go directly between
the SIP UAs. SIP Signalling stays with * in the path.
-
+
If t38version is TRUE, we send T38 SDP for re-invite from audio/video to
T38 UDPTL transmission on the channel
@@ -13706,7 +13709,7 @@
static int transmit_reinvite_with_sdp(struct sip_pvt *p, int t38version, int oldsdp)
{
struct sip_request req;
-
+
reqprep(&req, p, ast_test_flag(&p->flags[0], SIP_REINVITE_UPDATE) ? SIP_UPDATE : SIP_INVITE, 0, 1);
add_header(&req, "Allow", ALLOWED_METHODS);
@@ -13931,7 +13934,7 @@
/* If custom URI options have been provided, append them */
if (p->options && !ast_strlen_zero(p->options->uri_options))
ast_str_append(&invite, 0, ";%s", p->options->uri_options);
-
+
/* This is the request URI, which is the next hop of the call
which may or may not be the destination of the call
*/
@@ -14083,7 +14086,7 @@
return 0;
}
-/*!
+/*!
* \brief Build REFER/INVITE/OPTIONS/SUBSCRIBE message and transmit it
* \param p sip_pvt structure
* \param sipmethod
@@ -14149,7 +14152,7 @@
}
p->stimer->st_active = TRUE;
- if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE) {
+ if (st_get_mode(p, 0) == SESSION_TIMER_MODE_ORIGINATE) {
snprintf(i2astr, sizeof(i2astr), "%d", p->stimer->st_interval);
add_header(&req, "Session-Expires", i2astr);
}
@@ -14165,7 +14168,7 @@
|| (p->refer && global_refer_addheaders))) {
struct ast_channel *chan = p->owner; /* The owner channel */
struct varshead *headp;
-
+
ast_channel_lock(chan);
headp = ast_channel_varshead(chan);
@@ -14257,15 +14260,15 @@
static int sip_subscribe_mwi_do(const void *data)
{
struct sip_subscription_mwi *mwi = (struct sip_subscription_mwi*)data;
-
+
if (!mwi) {
return -1;
}
-
+
mwi->resub = -1;
__sip_subscribe_mwi_do(mwi);
ASTOBJ_UNREF(mwi, sip_subscribe_mwi_destroy);
-
+
return 0;
}
@@ -14357,7 +14360,7 @@
transmit_invite(mwi->call, SIP_SUBSCRIBE, 0, 0, NULL);
return 0;
}
-
+
/* Create a dialog that we will use for the subscription */
if (!(mwi->call = sip_alloc(NULL, NULL, 0, SIP_SUBSCRIBE, NULL, NULL))) {
return -1;
@@ -14368,7 +14371,7 @@
if (!ast_sockaddr_port(&mwi->us) && mwi->portno) {
ast_sockaddr_set_port(&mwi->us, mwi->portno);
}
-
+
/* Setup the destination of our subscription */
if (create_addr(mwi->call, mwi->hostname, &mwi->us, 0)) {
dialog_unlink_all(mwi->call);
@@ -14377,14 +14380,14 @@
}
mwi->call->expiry = mwi_expiry;
-
+
if (!mwi->dnsmgr && mwi->portno) {
ast_sockaddr_set_port(&mwi->call->sa, mwi->portno);
ast_sockaddr_set_port(&mwi->call->recv, mwi->portno);
} else {
mwi->portno = ast_sockaddr_port(&mwi->call->sa);
}
-
+
/* Set various other information */
if (!ast_strlen_zero(mwi->authuser)) {
ast_string_field_set(mwi->call, peername, mwi->authuser);
@@ -14409,7 +14412,7 @@
change_callid_pvt(mwi->call, NULL);
ast_set_flag(&mwi->call->flags[0], SIP_OUTGOING);
-
+
/* Associate the call with us */
mwi->call->mwi = ASTOBJ_REF(mwi);
@@ -14866,7 +14869,7 @@
{
struct sip_request req;
char tmp[SIPBUFSIZE/2];
-
+
reqprep(&req, p, SIP_NOTIFY, 0, 1);
snprintf(tmp, sizeof(tmp), "refer;id=%d", cseq);
add_header(&req, "Event", tmp);
@@ -14992,7 +14995,7 @@
ast_set_flag(&p->flags[0], SIP_OUTGOING);
p->invitestate = INV_CALLING;
send_request(p, &req, XMIT_CRITICAL, p->ocseq);
- } else if ((is_method_allowed(&p->allowed_methods, SIP_UPDATE)) && (!ast_strlen_zero(p->okcontacturi))) {
+ } else if ((is_method_allowed(&p->allowed_methods, SIP_UPDATE)) && (!ast_strlen_zero(p->okcontacturi))) {
reqprep(&req, p, SIP_UPDATE, 0, 1);
add_rpid(&req, p);
add_header(&req, "X-Asterisk-rpid-update", "Yes");
@@ -15075,8 +15078,8 @@
return 0;
}
-/*! \brief Register with SIP proxy
- \return see \ref __sip_xmit
+/*! \brief Register with SIP proxy
+ \return see \ref __sip_xmit
*/
static int __sip_do_register(struct sip_registry *r)
{
@@ -15227,7 +15230,7 @@
ast_log(LOG_WARNING, "Unable to allocate registration transaction (memory or socket error)\n");
return 0;
}
-
+
if (p->do_history) {
append_history(p, "RegistryInit", "Account: %s@%s", r->username, r->hostname);
}
@@ -15573,7 +15576,7 @@
static int transmit_info_with_digit(struct sip_pvt *p, const char digit, unsigned int duration)
{
struct sip_request req;
-
+
reqprep(&req, p, SIP_INFO, 0, 1);
add_digit(&req, digit, duration, (ast_test_flag(&p->flags[0], SIP_DTMF) == SIP_DTMF_SHORTINFO));
return send_request(p, &req, XMIT_RELIABLE, p->ocseq);
@@ -15583,7 +15586,7 @@
static int transmit_info_with_vidupdate(struct sip_pvt *p)
{
struct sip_request req;
-
+
reqprep(&req, p, SIP_INFO, 0, 1);
add_vidupdate(&req);
return send_request(p, &req, XMIT_RELIABLE, p->ocseq);
@@ -15595,7 +15598,7 @@
static int transmit_request(struct sip_pvt *p, int sipmethod, uint32_t seqno, enum xmittype reliable, int newbranch)
{
struct sip_request resp;
-
+
reqprep(&resp, p, sipmethod, seqno, newbranch);
if (sipmethod == SIP_CANCEL && p->answered_elsewhere) {
add_header(&resp, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
@@ -15627,7 +15630,7 @@
static int transmit_request_with_auth(struct sip_pvt *p, int sipmethod, uint32_t seqno, enum xmittype reliable, int newbranch)
{
struct sip_request resp;
-
+
reqprep(&resp, p, sipmethod, seqno, newbranch);
if (!ast_strlen_zero(p->realm)) {
char digest[1024];
@@ -15669,7 +15672,7 @@
break;
}
- return send_request(p, &resp, reliable, seqno ? seqno : p->ocseq);
+ return send_request(p, &resp, reliable, seqno ? seqno : p->ocseq);
}
/*! \brief Remove registration data from realtime database or AST/DB when registration expires */
@@ -15869,7 +15872,7 @@
/* We should return false for URI:s we can't handle,
like tel:, mailto:,ldap: etc */
- return TRUE;
+ return TRUE;
}
/*! \brief parse uri in a way that allows semicolon stripping if legacy mode is enabled
@@ -15900,7 +15903,7 @@
ast_copy_string(contact_buf, fullcontact, sizeof(contact_buf));
contact = contact_buf;
- /*
+ /*
* We have only the part in <brackets> here so we just need to parse a SIP URI.
*
* Note: The outbound proxy could be using UDP between the proxy and Asterisk.
@@ -16457,7 +16460,7 @@
return 0;
}
-/*! \brief builds the sip_pvt's nonce field which is used for the authentication
+/*! \brief builds the sip_pvt's nonce field which is used for the authentication
* challenge. When forceupdate is not set, the nonce is only updated if
* the current one is stale. In this case, a stalenonce is one which
* has already received a response, if a nonce has not received a response
@@ -17375,7 +17378,7 @@
if (!cid_name) {
no_name = 1;
cid_name = (char *)emptyname;
- }
+ }
/* Only return true if the supplied caller id is different */
if (!strcasecmp(p->cid_num, cid_num) && !strcasecmp(p->cid_name, cid_name) && p->callingpres == callingpres) {
do_update = 0;
@@ -17877,7 +17880,7 @@
sip_pvt_lock(sip_pvt_ptr);
}
}
-
+
return sip_pvt_ptr;
}
@@ -17970,7 +17973,7 @@
to = strcasestr(ptr, "to-tag=");
from = strcasestr(ptr, "from-tag=");
}
-
+
/* Grab the to header */
if (to) {
ptr = to + 7;
@@ -18860,7 +18863,7 @@
int showall = FALSE;
struct ao2_iterator i;
struct sip_peer *peer;
-
+
switch (cmd) {
case CLI_INIT:
e->command = "sip show inuse";
@@ -18878,7 +18881,7 @@
if (a->argc == 4 && !strcmp(a->argv[3], "all"))
showall = TRUE;
-
+
ast_cli(a->fd, FORMAT, "* Peer name", "In use", "Limit");
i = ao2_iterator_init(peers, 0);
@@ -19157,7 +19160,7 @@
"ListItems: %d\r\n"
"%s"
"\r\n", total, idtext);
-
+
return 0;
}
@@ -19213,46 +19216,58 @@
return strcmp((*ap)->name, (*bp)->name);
}
+/* the last argument is left-aligned, so we don't need a size anyways */
+#define PEERS_FORMAT2 "%-25.25s %-39.39s %-3.3s %-10.10s %-3.3s %-8s %-11s %-32.32s %s\n"
+
+/*! \brief Used in the sip_show_peers functions to pass parameters */
+struct show_peers_context {
+ regex_t regexbuf;
+ int havepattern;
+ char idtext[256];
+ int realtimepeers;
+ int peers_mon_online;
+ int peers_mon_offline;
+ int peers_unmon_offline;
+ int peers_unmon_online;
+};
/*! \brief Execute sip show peers command */
static char *_sip_show_peers(int fd, int *total, struct mansession *s, const struct message *m, int argc, const char *argv[])
{
- regex_t regexbuf;
- int havepattern = FALSE;
+ struct show_peers_context cont = {
+ .havepattern = FALSE,
+ .idtext = "",
+
+ .peers_mon_online = 0,
+ .peers_mon_offline = 0,
+ .peers_unmon_online = 0,
+ .peers_unmon_offline = 0,
+ };
+
struct sip_peer *peer;
struct ao2_iterator* it_peers;
-/* the last argument is left-aligned, so we don't need a size anyways */
-#define FORMAT2 "%-25.25s %-39.39s %-3.3s %-10.10s %-3.3s %-8s %-11s %-32.32s %s\n"
-
- char name[256];
int total_peers = 0;
- int peers_mon_online = 0;
- int peers_mon_offline = 0;
- int peers_unmon_offline = 0;
- int peers_unmon_online = 0;
const char *id;
- char idtext[256] = "";
- int realtimepeers;
struct sip_peer **peerarray;
int k;
- realtimepeers = ast_check_realtime("sippeers");
+ cont.realtimepeers = ast_check_realtime("sippeers");
if (s) { /* Manager - get ActionID */
id = astman_get_header(m, "ActionID");
if (!ast_strlen_zero(id)) {
- snprintf(idtext, sizeof(idtext), "ActionID: %s\r\n", id);
+ snprintf(cont.idtext, sizeof(cont.idtext), "ActionID: %s\r\n", id);
}
}
switch (argc) {
case 5:
if (!strcasecmp(argv[3], "like")) {
- if (regcomp(®exbuf, argv[4], REG_EXTENDED | REG_NOSUB)) {
+ if (regcomp(&cont.regexbuf, argv[4], REG_EXTENDED | REG_NOSUB)) {
return CLI_SHOWUSAGE;
}
- havepattern = TRUE;
+ cont.havepattern = TRUE;
} else {
return CLI_SHOWUSAGE;
}
@@ -19264,7 +19279,7 @@
if (!s) {
/* Normal list */
- ast_cli(fd, FORMAT2, "Name/username", "Host", "Dyn", "Forcerport", "ACL", "Port", "Status", "Description", (realtimepeers ? "Realtime" : ""));
+ ast_cli(fd, PEERS_FORMAT2, "Name/username", "Host", "Dyn", "Forcerport", "ACL", "Port", "Status", "Description", (cont.realtimepeers ? "Realtime" : ""));
}
ao2_lock(peers);
@@ -19290,7 +19305,7 @@
continue;
}
- if (havepattern && regexec(®exbuf, peer->name, 0, NULL, 0)) {
+ if (cont.havepattern && regexec(&cont.regexbuf, peer->name, 0, NULL, 0)) {
ao2_unlock(peer);
sip_unref_peer(peer, "toss iterator peer ptr before continue");
continue;
@@ -19304,110 +19319,16 @@
qsort(peerarray, total_peers, sizeof(struct sip_peer *), peercomparefunc);
for(k = 0; k < total_peers; k++) {
- char status[20] = "";
- char pstatus;
-
- /*
- * tmp_port and tmp_host store copies of ast_sockaddr_stringify strings since the
- * string pointers for that function aren't valid between subsequent calls to
- * ast_sockaddr_stringify functions
- */
- char *tmp_port;
- char *tmp_host;
-
- peer = peerarray[k];
-
- tmp_port = ast_sockaddr_isnull(&peer->addr) ?
- "0" : ast_strdupa(ast_sockaddr_stringify_port(&peer->addr));
-
- tmp_host = ast_sockaddr_isnull(&peer->addr) ?
- "(Unspecified)" : ast_strdupa(ast_sockaddr_stringify_addr(&peer->addr));
-
- ao2_lock(peer);
- if (havepattern && regexec(®exbuf, peer->name, 0, NULL, 0)) {
- ao2_unlock(peer);
- peer = peerarray[k] = sip_unref_peer(peer, "toss iterator peer ptr before continue");
- continue;
- }
-
- if (!ast_strlen_zero(peer->username) && !s) {
- snprintf(name, sizeof(name), "%s/%s", peer->name, peer->username);
- } else {
- ast_copy_string(name, peer->name, sizeof(name));
- }
-
- pstatus = peer_status(peer, status, sizeof(status));
- if (pstatus == 1) {
- peers_mon_online++;
- } else if (pstatus == 0) {
- peers_mon_offline++;
- } else {
- if (ast_sockaddr_isnull(&peer->addr) ||
- !ast_sockaddr_port(&peer->addr)) {
- peers_unmon_offline++;
- } else {
- peers_unmon_online++;
- }
- }
-
- if (!s) { /* Normal CLI list */
- ast_cli(fd, FORMAT2, name,
- tmp_host,
- peer->host_dynamic ? " D " : " ", /* Dynamic or not? */
- ast_test_flag(&peer->flags[2], SIP_PAGE3_NAT_AUTO_RPORT) ?
- ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) ? " A " : " a " :
- ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) ? " N " : " ", /* NAT=yes? */
- (!ast_acl_list_is_empty(peer->acl)) ? " A " : " ", /* permit/deny */
- tmp_port, status,
- peer->description ? peer->description : "",
- realtimepeers ? (peer->is_realtime ? "Cached RT" : "") : "");
- } else { /* Manager format */
- /* The names here need to be the same as other channels */
- astman_append(s,
- "Event: PeerEntry\r\n%s"
- "Channeltype: SIP\r\n"
- "ObjectName: %s\r\n"
- "ChanObjectType: peer\r\n" /* "peer" or "user" */
- "IPaddress: %s\r\n"
- "IPport: %s\r\n"
- "Dynamic: %s\r\n"
- "AutoForcerport: %s\r\n"
- "Forcerport: %s\r\n"
- "AutoComedia: %s\r\n"
- "Comedia: %s\r\n"
- "VideoSupport: %s\r\n"
- "TextSupport: %s\r\n"
- "ACL: %s\r\n"
- "Status: %s\r\n"
- "RealtimeDevice: %s\r\n"
- "Description: %s\r\n\r\n",
- idtext,
- peer->name,
- ast_sockaddr_isnull(&peer->addr) ? "-none-" : tmp_host,
- ast_sockaddr_isnull(&peer->addr) ? "0" : tmp_port,
- peer->host_dynamic ? "yes" : "no", /* Dynamic or not? */
- ast_test_flag(&peer->flags[2], SIP_PAGE3_NAT_AUTO_RPORT) ? "yes" : "no",
- ast_test_flag(&peer->flags[0], SIP_NAT_FORCE_RPORT) ? "yes" : "no", /* NAT=yes? */
- ast_test_flag(&peer->flags[2], SIP_PAGE3_NAT_AUTO_COMEDIA) ? "yes" : "no",
- ast_test_flag(&peer->flags[1], SIP_PAGE2_SYMMETRICRTP) ? "yes" : "no",
- ast_test_flag(&peer->flags[1], SIP_PAGE2_VIDEOSUPPORT) ? "yes" : "no", /* VIDEOSUPPORT=yes? */
- ast_test_flag(&peer->flags[1], SIP_PAGE2_TEXTSUPPORT) ? "yes" : "no", /* TEXTSUPPORT=yes? */
- ast_acl_list_is_empty(peer->acl) ? "no" : "yes", /* permit/deny/acl */
- status,
- realtimepeers ? (peer->is_realtime ? "yes" : "no") : "no",
- peer->description);
- }
- ao2_unlock(peer);
[... 950 lines stripped ...]
More information about the svn-commits
mailing list