Index: channels/chan_sip.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v retrieving revision 1.677 diff -u -r1.677 chan_sip.c --- channels/chan_sip.c 17 Mar 2005 23:03:07 -0000 1.677 +++ channels/chan_sip.c 18 Mar 2005 13:53:18 -0000 @@ -2078,7 +2078,6 @@ 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 @@ #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 @@ 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 @@ p->maxforwards = DEFAULT_MAX_FORWARDS - 1; } if (p->maxforwards > -1) { - snprintf(p->our_contact, sizeof(p->our_contact), "redirect ", extension, host, port ? ":" : "", port ? port : ""); + snprintf(p->our_contact, sizeof(p->our_contact), "Transfer ", 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); Index: apps/app_transfer.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_transfer.c,v retrieving revision 1.7 diff -u -r1.7 app_transfer.c --- apps/app_transfer.c 19 Feb 2005 17:34:06 -0000 1.7 +++ apps/app_transfer.c 18 Mar 2005 13:53:18 -0000 @@ -29,10 +29,14 @@ 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;