diff options
author | pcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-10-07 14:39:34 +0000 |
---|---|---|
committer | pcadach <pcadach@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-10-07 14:39:34 +0000 |
commit | fea99f822121e5454de50d4db069eb6fbe92df29 (patch) | |
tree | 4f784c5857ec6ba7faf080df3449f8122124c033 /channels/h323 | |
parent | fe0db96d5ed6181663032b0841ae89280ec341b9 (diff) |
Propagate caller's transfer capability too
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@44684 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/h323')
-rw-r--r-- | channels/h323/ast_h323.cxx | 18 | ||||
-rw-r--r-- | channels/h323/ast_h323.h | 1 | ||||
-rw-r--r-- | channels/h323/chan_h323.h | 2 |
3 files changed, 20 insertions, 1 deletions
diff --git a/channels/h323/ast_h323.cxx b/channels/h323/ast_h323.cxx index ef7650650..cd0b4a9c5 100644 --- a/channels/h323/ast_h323.cxx +++ b/channels/h323/ast_h323.cxx @@ -544,6 +544,7 @@ MyH323Connection::MyH323Connection(MyH323EndPoint & ep, unsigned callReference, dtmfMode = 0; dtmfCodec = (RTP_DataFrame::PayloadTypes)0; redirect_reason = -1; + transfer_capability = -1; #ifdef TUNNELLING tunnelOptions = remoteTunnelOptions = 0; #endif @@ -723,6 +724,9 @@ void MyH323Connection::SetCallOptions(void *o, BOOL isIncoming) } cid_presentation = opts->presentation; cid_ton = opts->type_of_number; + if (opts->transfer_capability >= 0) { + transfer_capability = opts->transfer_capability; + } } tunnelOptions = opts->tunnelOptions; } @@ -756,6 +760,8 @@ void MyH323Connection::SetCallDetails(void *callDetails, const H323SignalPDU &se PString redirect_number; unsigned redirect_reason; unsigned plan, type, screening, presentation; + Q931::InformationTransferCapability capability; + unsigned transferRate, codingStandard, userInfoLayer1; /* Fetch presentation and type information about calling party's number */ if (setupPDU.GetQ931().GetCallingPartyNumber(sourceName, &plan, &type, &presentation, &screening, 0, 0)) { @@ -783,13 +789,20 @@ void MyH323Connection::SetCallDetails(void *callDetails, const H323SignalPDU &se GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, sourcePort); cd->sourceIp = strdup((const char *)Ip.AsString()); - if(setupPDU.GetQ931().GetRedirectingNumber(redirect_number, NULL, NULL, NULL, NULL, &redirect_reason, 0, 0, 0)) { + if (setupPDU.GetQ931().GetRedirectingNumber(redirect_number, NULL, NULL, NULL, NULL, &redirect_reason, 0, 0, 0)) { cd->redirect_number = strdup((const char *)redirect_number); cd->redirect_reason = redirect_reason; } else cd->redirect_reason = -1; + /* Fetch Q.931's transfer capability */ + if (((Q931 &)setupPDU.GetQ931()).GetBearerCapabilities(capability, transferRate, &codingStandard, &userInfoLayer1)) + cd->transfer_capability = ((unsigned int)capability & 0x1f) | (codingStandard << 5); + else + cd->transfer_capability = 0x00; /* ITU coding of Speech */ + + /* Don't show local username as called party name */ SetDisplayName(cd->call_dest_e164); } @@ -1216,6 +1229,9 @@ BOOL MyH323Connection::OnSendSignalSetup(H323SignalPDU & setupPDU) setupPDU.GetQ931().SetIE(Q931::RedirectingNumberIE, IE); } + if (transfer_capability) + setupPDU.GetQ931().SetBearerCapabilities((Q931::InformationTransferCapability)(transfer_capability & 0x1f), 1, ((transfer_capability >> 5) & 3)); + SetCallDetails(&cd, setupPDU, FALSE); int res = on_outgoing_call(&cd); diff --git a/channels/h323/ast_h323.h b/channels/h323/ast_h323.h index 3990bbcb5..c4f24c529 100644 --- a/channels/h323/ast_h323.h +++ b/channels/h323/ast_h323.h @@ -104,6 +104,7 @@ public: int cid_ton; PString rdnis; int redirect_reason; + int transfer_capability; WORD sessionId; BOOL bridging; diff --git a/channels/h323/chan_h323.h b/channels/h323/chan_h323.h index 34dc90b60..0fd94561f 100644 --- a/channels/h323/chan_h323.h +++ b/channels/h323/chan_h323.h @@ -48,6 +48,7 @@ typedef struct call_options { int redirect_reason; int presentation; int type_of_number; + int transfer_capability; int fastStart; int h245Tunneling; int silenceSuppression; @@ -113,6 +114,7 @@ typedef struct call_details { int redirect_reason; int presentation; int type_of_number; + int transfer_capability; char *sourceIp; } call_details_t; |