diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-09-01 21:53:52 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-09-01 21:53:52 +0000 |
commit | f1977a187f2b81723dfa96591ddb0d8150fd7c64 (patch) | |
tree | 8649b47c079e1643ca49c69f4a08d4f53eecc67b /res/res_osp.c | |
parent | 5424402fc131931b65cd214aaa24dd91642cd123 (diff) |
send the correct Call-ID when using OSP (issue #5095)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6490 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_osp.c')
-rwxr-xr-x | res/res_osp.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/res/res_osp.c b/res/res_osp.c index 7d0f1e3fb..57e80f9ab 100755 --- a/res/res_osp.c +++ b/res/res_osp.c @@ -45,6 +45,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/lock.h" #include "asterisk/causes.h" #include "asterisk/callerid.h" +#include "asterisk/pbx.h" #define MAX_CERTS 10 #define MAX_SERVICEPOINTS 10 @@ -493,10 +494,11 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch int tokenlen; unsigned int dummy=0; unsigned int timelimit; + char* sipcallid; unsigned int callidlen; + char callidstr[OSPC_CALLID_MAXSIZE] = ""; struct osp_provider *osp; char source[OSP_MAX] = ""; /* Same length as osp->source */ - char uniqueid[32] = ""; char callednum[2048]=""; char callingnum[2048]=""; char destination[2048]=""; @@ -528,7 +530,8 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch callerid = l; if (chan) { - ast_copy_string(uniqueid, chan->uniqueid, sizeof(uniqueid)); + sipcallid = pbx_builtin_getvar_helper (chan, "SIPCALLID"); + ast_copy_string(callidstr, sipcallid, sizeof(callidstr)); cres = ast_autoservice_start(chan); if (cres < 0) return cres; @@ -550,18 +553,18 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch ast_mutex_unlock(&osplock); if (res) { res = 0; - callid = OSPPCallIdNew(strlen(uniqueid), uniqueid); + callid = OSPPCallIdNew(strlen(callidstr), callidstr); if (callid) { /* No more than 10 back */ counts = 10; dummy = 0; - callidlen = sizeof(uniqueid); + callidlen = sizeof(callidstr); if (!OSPPTransactionRequestAuthorisation(result->handle, source, "", callerid,OSPC_E164, extension, OSPC_E164, NULL, 1, &callid, NULL, &counts, &dummy, NULL)) { if (counts) { tokenlen = sizeof(token); result->numresults = counts - 1; - if (!OSPPTransactionGetFirstDestination(result->handle, 0, NULL, NULL, &timelimit, &callidlen, uniqueid, + if (!OSPPTransactionGetFirstDestination(result->handle, 0, NULL, NULL, &timelimit, &callidlen, callidstr, sizeof(callednum), callednum, sizeof(callingnum), callingnum, sizeof(destination), destination, 0, NULL, &tokenlen, token)) { ast_log(LOG_DEBUG, "Got destination '%s' and called: '%s' calling: '%s' for '%s' (provider '%s')\n", destination, callednum, callingnum, extension, provider); @@ -590,7 +593,7 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch } if (!res && result->numresults) { result->numresults--; - if (OSPPTransactionGetNextDestination(result->handle, OSPC_FAIL_INCOMPATIBLE_DEST, 0, NULL, NULL, &timelimit, &callidlen, uniqueid, + if (OSPPTransactionGetNextDestination(result->handle, OSPC_FAIL_INCOMPATIBLE_DEST, 0, NULL, NULL, &timelimit, &callidlen, callidstr, sizeof(callednum), callednum, sizeof(callingnum), callingnum, sizeof(destination), destination, 0, NULL, &tokenlen, token)) { break; } @@ -629,7 +632,7 @@ int ast_osp_next(struct ast_osp_result *result, int cause) unsigned int dummy=0; unsigned int timelimit; unsigned int callidlen; - char uniqueid[32] = ""; + char callidstr[OSPC_CALLID_MAXSIZE] = ""; char callednum[2048]=""; char callingnum[2048]=""; char destination[2048]=""; @@ -642,12 +645,12 @@ int ast_osp_next(struct ast_osp_result *result, int cause) if (result->handle > -1) { dummy = 0; - callidlen = sizeof(uniqueid); + callidlen = sizeof(callidstr); if (result->numresults) { tokenlen = sizeof(token); while(!res && result->numresults) { result->numresults--; - if (!OSPPTransactionGetNextDestination(result->handle, OSPC_FAIL_INCOMPATIBLE_DEST, 0, NULL, NULL, &timelimit, &callidlen, uniqueid, + if (!OSPPTransactionGetNextDestination(result->handle, OSPC_FAIL_INCOMPATIBLE_DEST, 0, NULL, NULL, &timelimit, &callidlen, callidstr, sizeof(callednum), callednum, sizeof(callingnum), callingnum, sizeof(destination), destination, 0, NULL, &tokenlen, token)) { ast_base64encode(result->token, token, tokenlen, sizeof(result->token) - 1); if ((strlen(destination) > 2) && !OSPPTransactionGetDestProtocol(result->handle, &prot)) { |