Merged revisions 44009 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r44009 | pcadach | 2006-09-30 00:30:34 +0600 (Сбт, 30 Сен 2006) | 1 line Pass TON/PRESENTATION information too ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@44010 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
16312049c6
commit
18f0e3efb4
|
@ -629,6 +629,9 @@ static int oh323_call(struct ast_channel *c, char *dest, int timeout)
|
|||
strncpy(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis));
|
||||
}
|
||||
|
||||
pvt->options.presentation = c->cid.cid_pres;
|
||||
pvt->options.type_of_number = c->cid.cid_ton;
|
||||
|
||||
if ((addr = pbx_builtin_getvar_helper(c, "PRIREDIRECTREASON"))) {
|
||||
if (!strcasecmp(addr, "UNKNOWN"))
|
||||
pvt->options.redirect_reason = 0;
|
||||
|
@ -1084,6 +1087,8 @@ static struct ast_channel *__oh323_new(struct oh323_pvt *pvt, int state, const c
|
|||
ch->cid.cid_rdnis = ast_strdup(pvt->cd.redirect_number);
|
||||
pbx_builtin_setvar_helper(ch, "PRIREDIRECTREASON", redirectingreason2str(pvt->cd.redirect_reason));
|
||||
}
|
||||
ch->cid.cid_pres = pvt->cd.presentation;
|
||||
ch->cid.cid_ton = pvt->cd.type_of_number;
|
||||
|
||||
if (!ast_strlen_zero(pvt->exten) && strcmp(pvt->exten, "s")) {
|
||||
ch->cid.cid_dnid = strdup(pvt->exten);
|
||||
|
|
|
@ -733,6 +733,8 @@ void MyH323Connection::SetCallOptions(void *o, BOOL isIncoming)
|
|||
rdnis = PString(opts->cid_rdnis);
|
||||
redirect_reason = opts->redirect_reason;
|
||||
}
|
||||
cid_presentation = opts->presentation;
|
||||
cid_ton = opts->type_of_number;
|
||||
}
|
||||
tunnelOptions = opts->tunnelOptions;
|
||||
}
|
||||
|
@ -765,6 +767,17 @@ void MyH323Connection::SetCallDetails(void *callDetails, const H323SignalPDU &se
|
|||
WORD sourcePort;
|
||||
PString redirect_number;
|
||||
unsigned redirect_reason;
|
||||
unsigned plan, type, screening, presentation;
|
||||
|
||||
/* Fetch presentation and type information about calling party's number */
|
||||
if (setupPDU.GetQ931().GetCallingPartyNumber(sourceName, &plan, &type, &presentation, &screening, 2, 3)) {
|
||||
/* Construct fields back */
|
||||
cd->type_of_number = (type << 4) | screening;
|
||||
cd->presentation = (presentation << 5) | screening;
|
||||
} else {
|
||||
cd->type_of_number = 0; /* UNKNOWN */
|
||||
cd->presentation = 0x43; /* NUMBER NOT AVAILABLE */
|
||||
}
|
||||
|
||||
sourceName = setupPDU.GetQ931().GetDisplayName();
|
||||
cd->call_source_name = strdup((const char *)sourceName);
|
||||
|
@ -904,8 +917,14 @@ static BOOL FetchCiscoTunneledInfo(Q931 &q931, const H323SignalPDU &pdu)
|
|||
|
||||
static BOOL EmbedCiscoTunneledInfo(H323SignalPDU &pdu)
|
||||
{
|
||||
const static Q931::InformationElementCodes codes[] =
|
||||
{ Q931::RedirectingNumberIE, Q931::FacilityIE };
|
||||
const static struct {
|
||||
Q931::InformationElementCodes ie;
|
||||
BOOL dontDelete;
|
||||
} codes[] = {
|
||||
{ Q931::RedirectingNumberIE, },
|
||||
{ Q931::FacilityIE, },
|
||||
{ Q931::CallingPartyNumberIE, TRUE },
|
||||
};
|
||||
|
||||
BOOL res = FALSE;
|
||||
BOOL notRedirOnly = FALSE;
|
||||
|
@ -913,10 +932,11 @@ static BOOL EmbedCiscoTunneledInfo(H323SignalPDU &pdu)
|
|||
Q931 &q931 = pdu.GetQ931();
|
||||
|
||||
for(unsigned i = 0; i < (sizeof(codes) / sizeof(codes[0])); ++i) {
|
||||
if (q931.HasIE(codes[i])) {
|
||||
tmpQ931.SetIE(codes[i], q931.GetIE(codes[i]));
|
||||
q931.RemoveIE(codes[i]);
|
||||
if (codes[i] != Q931::RedirectingNumberIE)
|
||||
if (q931.HasIE(codes[i].ie)) {
|
||||
tmpQ931.SetIE(codes[i].ie, q931.GetIE(codes[i].ie));
|
||||
if (!codes[i].dontDelete)
|
||||
q931.RemoveIE(codes[i].ie);
|
||||
if (codes[i].ie != Q931::RedirectingNumberIE)
|
||||
notRedirOnly = TRUE;
|
||||
res = TRUE;
|
||||
}
|
||||
|
@ -1206,6 +1226,12 @@ BOOL MyH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* OpenH323 will build calling party information with default
|
||||
type and presentation information, so build it to be recorded
|
||||
by embedding routines */
|
||||
setupPDU.GetQ931().SetCallingPartyNumber(GetLocalPartyName(), (cid_ton >> 4) & 0x07,
|
||||
cid_ton & 0x0f, (cid_presentation >> 5) & 0x03, cid_presentation & 0x1f);
|
||||
|
||||
#ifdef TUNNELLING
|
||||
EmbedTunneledInfo(setupPDU);
|
||||
#endif
|
||||
|
|
|
@ -104,6 +104,8 @@ public:
|
|||
PString destAliases;
|
||||
PString sourceE164;
|
||||
PString destE164;
|
||||
int cid_presentation;
|
||||
int cid_ton;
|
||||
PString rdnis;
|
||||
int redirect_reason;
|
||||
|
||||
|
|
|
@ -50,6 +50,8 @@ typedef struct call_options {
|
|||
char cid_name[80];
|
||||
char cid_rdnis[80];
|
||||
int redirect_reason;
|
||||
int presentation;
|
||||
int type_of_number;
|
||||
int fastStart;
|
||||
int h245Tunneling;
|
||||
int silenceSuppression;
|
||||
|
@ -115,7 +117,7 @@ typedef struct call_details {
|
|||
char *redirect_number;
|
||||
int redirect_reason;
|
||||
int presentation;
|
||||
int screening;
|
||||
int type_of_number;
|
||||
char *sourceIp;
|
||||
} call_details_t;
|
||||
|
||||
|
|
Reference in New Issue