Add some more IAX2-specific information about the channel to the CHANNEL()

function and begin the transition from SIPCHANINFO() to just using CHANNEL().
(closes issue #12856)
 Reported by: mostyn
 Patches: 
       iax_and_sip_channel_info.patch uploaded by mostyn (license 398)
       (with some additional cleanup by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@122802 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.1
Tilghman Lesher 17 years ago
parent 043a15afa7
commit b2ef18dab4

@ -181,6 +181,9 @@ Channel Drivers:
sip:defaultuser@defaultip sip:defaultuser@defaultip
The "username" setting still work, but is deprecated and will not work in The "username" setting still work, but is deprecated and will not work in
the next version of Asterisk. the next version of Asterisk.
* SIP: All of the functionality in SIPCHANINFO() has been implemented in CHANNEL(),
and you should start using that function instead for retrieving information about
the channel in a technology-agnostic way.
* chan_local.c: the comma delimiter inside the channel name has been changed to a * chan_local.c: the comma delimiter inside the channel name has been changed to a
semicolon, in order to make the Local channel driver compatible with the comma semicolon, in order to make the Local channel driver compatible with the comma

@ -11749,10 +11749,15 @@ static int acf_channel_read(struct ast_channel *chan, const char *funcname, char
return -1; return -1;
} }
if (!strcasecmp(args, "osptoken")) if (!strcasecmp(args, "osptoken")) {
ast_copy_string(buf, pvt->osptoken, buflen); ast_copy_string(buf, pvt->osptoken, buflen);
else } else if (!strcasecmp(args, "peerip")) {
ast_copy_string(buf, pvt->addr.sin_addr.s_addr ? ast_inet_ntoa(pvt->addr.sin_addr) : "", buflen);
} else if (!strcasecmp(args, "peername")) {
ast_copy_string(buf, pvt->username, buflen);
} else {
res = -1; res = -1;
}
ast_mutex_unlock(&iaxsl[callno]); ast_mutex_unlock(&iaxsl[callno]);

@ -15510,6 +15510,7 @@ struct ast_custom_function sippeer_function = {
static int function_sipchaninfo_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) static int function_sipchaninfo_read(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
{ {
struct sip_pvt *p; struct sip_pvt *p;
static int deprecated = 0;
*buf = 0; *buf = 0;
@ -15525,6 +15526,11 @@ static int function_sipchaninfo_read(struct ast_channel *chan, const char *cmd,
return -1; return -1;
} }
if (deprecated++ % 20 == 0) {
/* Deprecated in 1.6.1 */
ast_log(LOG_WARNING, "SIPCHANINFO() is deprecated. Please transition to using CHANNEL().\n");
}
p = chan->tech_pvt; p = chan->tech_pvt;
/* If there is no private structure, this channel is no longer alive */ /* If there is no private structure, this channel is no longer alive */
@ -18524,7 +18530,25 @@ static int acf_channel_read(struct ast_channel *chan, const char *funcname, char
memset(buf, 0, buflen); memset(buf, 0, buflen);
if (!strcasecmp(args.param, "rtpdest")) { if (!strcasecmp(args.param, "peerip")) {
ast_copy_string(buf, p->sa.sin_addr.s_addr ? ast_inet_ntoa(p->sa.sin_addr) : "", buflen);
} else if (!strcasecmp(args.param, "recvip")) {
ast_copy_string(buf, p->recv.sin_addr.s_addr ? ast_inet_ntoa(p->recv.sin_addr) : "", buflen);
} else if (!strcasecmp(args.param, "from")) {
ast_copy_string(buf, p->from, buflen);
} else if (!strcasecmp(args.param, "uri")) {
ast_copy_string(buf, p->uri, buflen);
} else if (!strcasecmp(args.param, "useragent")) {
ast_copy_string(buf, p->useragent, buflen);
} else if (!strcasecmp(args.param, "peername")) {
ast_copy_string(buf, p->peername, buflen);
} else if (!strcasecmp(args.param, "t38passthrough")) {
if (p->t38.state == T38_DISABLED) {
ast_copy_string(buf, "0", sizeof("0"));
} else { /* T38 is offered or enabled in this call */
ast_copy_string(buf, "1", sizeof("1"));
}
} else if (!strcasecmp(args.param, "rtpdest")) {
struct sockaddr_in sin; struct sockaddr_in sin;
if (ast_strlen_zero(args.type)) if (ast_strlen_zero(args.type))

@ -190,6 +190,13 @@ static struct ast_custom_function channel_function = {
#endif #endif
"\n" "\n"
"chan_sip provides the following additional options:\n" "chan_sip provides the following additional options:\n"
"R/O peerip Get the IP address of the peer\n"
"R/O recvip Get the source IP address of the peer\n"
"R/O from Get the URI from the From: header\n"
"R/O uri Get the URI from the Contact: header\n"
"R/O useragent Get the useragent\n"
"R/O peername Get the name of the peer\n"
"R/O t38passthrough 1 if T38 is offered or enabled in this channel, otherwise 0\n"
"R/O rtpqos Get QOS information about the RTP stream\n" "R/O rtpqos Get QOS information about the RTP stream\n"
" This option takes two additional arguments:\n" " This option takes two additional arguments:\n"
" Argument 1:\n" " Argument 1:\n"
@ -227,6 +234,8 @@ static struct ast_custom_function channel_function = {
"\n" "\n"
"chan_iax2 provides the following additional options:\n" "chan_iax2 provides the following additional options:\n"
"R/W osptoken Get or set the OSP token information for a call\n" "R/W osptoken Get or set the OSP token information for a call\n"
"R/O peerip Get the peer's ip address\n"
"R/O peername Get the peer's username\n"
"\n" "\n"
"Additional items may be available from the channel driver providing\n" "Additional items may be available from the channel driver providing\n"
"the channel; see its documentation for details.\n" "the channel; see its documentation for details.\n"

Loading…
Cancel
Save