Minor sipredirect fixes (bug #3789)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Mark Spencer 21 years ago
parent 87bbe6ee7a
commit d0e9afeb2b

@ -29,10 +29,14 @@ static char *app = "Transfer";
static char *synopsis = "Transfer caller to remote extension";
static char *descrip =
" Transfer([Tech/]dest): Requests the remote caller be transferred\n"
"a given extension. Returns -1 on hangup, or 0 on completion\n"
"regardless of whether the transfer was successful. If the transfer\n"
"was *not* supported or successful and there exists a priority n + 101,\n"
" Transfer([Tech/]dest): Requests the remote caller be transfered\n"
"to a given extension. If TECH (SIP, IAX2, LOCAL etc) is used, only\n"
"an incoming call with the same channel technology will be transfered.\n"
"Note that for SIP, if you transfer before call is setup, a 302 redirect\n"
"SIP message will be returned to the caller.\n"
"Returns -1 on hangup, or 0 on completion regardless of whether the\n"
"transfer was successful. If the transfer was *not* supported or\n"
"successful and there exists a priority n + 101,\n"
"then that priority will be taken next.\n" ;
STANDARD_LOCAL_USER;

@ -2078,7 +2078,6 @@ static int sip_transfer(struct ast_channel *ast, char *dest)
res = sip_sipredirect(p, dest);
else
res = transmit_refer(p, dest);
res = transmit_refer(p, dest);
ast_mutex_unlock(&p->lock);
return res;
}
@ -10232,16 +10231,16 @@ static int sip_getheader(struct ast_channel *chan, void *data)
#define DEFAULT_MAX_FORWARDS 70
/* This is 302 sipredirect function coded by Martin Pycko (m78pl@yahoo.com) */
/*--- sip_sipredirect: Transfer call before connect with a 302 redirect ---*/
/* Called by the transfer() dialplan application through the sip_transfer() */
/* pbx interface function if the call is in ringing state */
/* coded by Martin Pycko (m78pl@yahoo.com) */
static int sip_sipredirect(struct sip_pvt *p, char *dest)
{
char *cdest;
char *extension, *host, *port;
char tmp[80];
if (!dest || ast_strlen_zero(dest)) {
ast_log(LOG_WARNING, "This application requires these arguments: SIPRedirect(extension[@host[:port]])\n");
return 0;
}
cdest = ast_strdupa(dest);
if (!cdest) {
ast_log(LOG_ERROR, "Problem allocating the memory\n");
@ -10268,7 +10267,7 @@ static int sip_sipredirect(struct sip_pvt *p, char *dest)
memset(lhost, 0, sizeof(lhost));
memset(lport, 0, sizeof(lport));
localtmp++;
/* This is okay becuase lhost and lport are as big as tmp */
/* This is okey because lhost and lport are as big as tmp */
sscanf(localtmp, "%[^<>:; ]:%[^<>:; ]", lhost, lport);
if (!strlen(lhost)) {
ast_log(LOG_ERROR, "Can't find the host address\n");
@ -10299,7 +10298,7 @@ static int sip_sipredirect(struct sip_pvt *p, char *dest)
p->maxforwards = DEFAULT_MAX_FORWARDS - 1;
}
if (p->maxforwards > -1) {
snprintf(p->our_contact, sizeof(p->our_contact), "redirect <sip:%s@%s%s%s>", extension, host, port ? ":" : "", port ? port : "");
snprintf(p->our_contact, sizeof(p->our_contact), "Transfer <sip:%s@%s%s%s>", extension, host, port ? ":" : "", port ? port : "");
transmit_response_reliable(p, "302 Moved Temporarily", &p->initreq, 1);
} else {
transmit_response(p, "483 Too Many Hops", &p->initreq);

Loading…
Cancel
Save