mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 00:04:53 +00:00
Added fast start and h.245 tunneling options per user and peer.
Added options for faststart/h.245 tunneling per user/peer, properly handle these and global options, correction of handling fs/tunneling fields in signalling responses (closes issue #17972) Reported by: salecha Patches: fs-tunnel-per-point-3.patch uploaded by may213 (license 454) Tested by: may213, salecha git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@291006 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -188,6 +188,7 @@ static struct ooh323_pvt {
|
|||||||
struct OOH323Regex *rtpmask; /* rtp ip regexp */
|
struct OOH323Regex *rtpmask; /* rtp ip regexp */
|
||||||
char rtpmaskstr[120];
|
char rtpmaskstr[120];
|
||||||
int rtdrcount, rtdrinterval; /* roundtripdelayreq */
|
int rtdrcount, rtdrinterval; /* roundtripdelayreq */
|
||||||
|
int faststart, h245tunneling; /* faststart & h245 tunneling */
|
||||||
struct ooh323_pvt *next; /* Next entity */
|
struct ooh323_pvt *next; /* Next entity */
|
||||||
} *iflist = NULL;
|
} *iflist = NULL;
|
||||||
|
|
||||||
@@ -214,6 +215,7 @@ struct ooh323_user{
|
|||||||
struct OOH323Regex *rtpmask;
|
struct OOH323Regex *rtpmask;
|
||||||
char rtpmaskstr[120];
|
char rtpmaskstr[120];
|
||||||
int rtdrcount, rtdrinterval;
|
int rtdrcount, rtdrinterval;
|
||||||
|
int faststart, h245tunneling;
|
||||||
struct ooh323_user *next;
|
struct ooh323_user *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -241,6 +243,7 @@ struct ooh323_peer{
|
|||||||
struct OOH323Regex *rtpmask;
|
struct OOH323Regex *rtpmask;
|
||||||
char rtpmaskstr[120];
|
char rtpmaskstr[120];
|
||||||
int rtdrcount,rtdrinterval;
|
int rtdrcount,rtdrinterval;
|
||||||
|
int faststart, h245tunneling;
|
||||||
struct ooh323_peer *next;
|
struct ooh323_peer *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -636,6 +639,8 @@ static struct ast_channel *ooh323_request(const char *type, format_t format,
|
|||||||
p->dtmfcodec = peer->dtmfcodec;
|
p->dtmfcodec = peer->dtmfcodec;
|
||||||
p->t38support = peer->t38support;
|
p->t38support = peer->t38support;
|
||||||
p->rtptimeout = peer->rtptimeout;
|
p->rtptimeout = peer->rtptimeout;
|
||||||
|
p->faststart = peer->faststart;
|
||||||
|
p->h245tunneling = peer->h245tunneling;
|
||||||
if (peer->rtpmask && peer->rtpmaskstr[0]) {
|
if (peer->rtpmask && peer->rtpmaskstr[0]) {
|
||||||
p->rtpmask = peer->rtpmask;
|
p->rtpmask = peer->rtpmask;
|
||||||
ast_copy_string(p->rtpmaskstr, peer->rtpmaskstr, sizeof(p->rtpmaskstr));
|
ast_copy_string(p->rtpmaskstr, peer->rtpmaskstr, sizeof(p->rtpmaskstr));
|
||||||
@@ -665,6 +670,8 @@ static struct ast_channel *ooh323_request(const char *type, format_t format,
|
|||||||
p->capability = gCapability;
|
p->capability = gCapability;
|
||||||
p->rtdrinterval = gRTDRInterval;
|
p->rtdrinterval = gRTDRInterval;
|
||||||
p->rtdrcount = gRTDRCount;
|
p->rtdrcount = gRTDRCount;
|
||||||
|
p->faststart = gFastStart;
|
||||||
|
p->h245tunneling = gTunneling;
|
||||||
|
|
||||||
memcpy(&p->prefs, &gPrefs, sizeof(struct ast_codec_pref));
|
memcpy(&p->prefs, &gPrefs, sizeof(struct ast_codec_pref));
|
||||||
p->username = strdup(dest);
|
p->username = strdup(dest);
|
||||||
@@ -914,10 +921,9 @@ static int ooh323_call(struct ast_channel *ast, char *dest, int timeout)
|
|||||||
ast_verbose("--- ooh323_call- %s\n", dest);
|
ast_verbose("--- ooh323_call- %s\n", dest);
|
||||||
|
|
||||||
|
|
||||||
if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED))
|
if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
|
||||||
{
|
|
||||||
ast_log(LOG_WARNING, "ooh323_call called on %s, neither down nor "
|
ast_log(LOG_WARNING, "ooh323_call called on %s, neither down nor "
|
||||||
"reserved\n", ast->name);
|
"reserved\n", ast->name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ast_mutex_lock(&p->lock);
|
ast_mutex_lock(&p->lock);
|
||||||
@@ -972,6 +978,8 @@ static int ooh323_call(struct ast_channel *ast, char *dest, int timeout)
|
|||||||
destination[sizeof(destination)-1]='\0';
|
destination[sizeof(destination)-1]='\0';
|
||||||
|
|
||||||
opts.transfercap = ast->transfercapability;
|
opts.transfercap = ast->transfercapability;
|
||||||
|
opts.fastStart = p->faststart;
|
||||||
|
opts.tunneling = p->h245tunneling;
|
||||||
|
|
||||||
for (i=0;i<480 && !isRunning(p->callToken);i++) usleep(12000);
|
for (i=0;i<480 && !isRunning(p->callToken);i++) usleep(12000);
|
||||||
|
|
||||||
@@ -1758,6 +1766,18 @@ int ooh323_onReceivedSetup(ooCallData *call, Q931Message *pmsg)
|
|||||||
p->dtmfcodec = user->dtmfcodec;
|
p->dtmfcodec = user->dtmfcodec;
|
||||||
p->t38support = user->t38support;
|
p->t38support = user->t38support;
|
||||||
p->rtptimeout = user->rtptimeout;
|
p->rtptimeout = user->rtptimeout;
|
||||||
|
p->h245tunneling = user->h245tunneling;
|
||||||
|
p->faststart = user->faststart;
|
||||||
|
|
||||||
|
if (p->faststart)
|
||||||
|
OO_SETFLAG(call->flags, OO_M_FASTSTART);
|
||||||
|
else
|
||||||
|
OO_CLRFLAG(call->flags, OO_M_FASTSTART);
|
||||||
|
if (p->h245tunneling)
|
||||||
|
OO_SETFLAG(call->flags, OO_M_TUNNELING);
|
||||||
|
else
|
||||||
|
OO_CLRFLAG(call->flags, OO_M_TUNNELING);
|
||||||
|
|
||||||
if (user->rtpmask && user->rtpmaskstr[0]) {
|
if (user->rtpmask && user->rtpmaskstr[0]) {
|
||||||
p->rtpmask = user->rtpmask;
|
p->rtpmask = user->rtpmask;
|
||||||
ast_copy_string(p->rtpmaskstr, user->rtpmaskstr,
|
ast_copy_string(p->rtpmaskstr, user->rtpmaskstr,
|
||||||
@@ -2165,6 +2185,8 @@ static struct ooh323_user *build_user(const char *name, struct ast_variable *v)
|
|||||||
user->dtmfmode = gDTMFMode;
|
user->dtmfmode = gDTMFMode;
|
||||||
user->dtmfcodec = gDTMFCodec;
|
user->dtmfcodec = gDTMFCodec;
|
||||||
user->t38support = gT38Support;
|
user->t38support = gT38Support;
|
||||||
|
user->faststart = gFastStart;
|
||||||
|
user->h245tunneling = gTunneling;
|
||||||
/* set default context */
|
/* set default context */
|
||||||
ast_copy_string(user->context, gContext, sizeof(user->context));
|
ast_copy_string(user->context, gContext, sizeof(user->context));
|
||||||
ast_copy_string(user->accountcode, gAccountcode, sizeof(user->accountcode));
|
ast_copy_string(user->accountcode, gAccountcode, sizeof(user->accountcode));
|
||||||
@@ -2182,6 +2204,10 @@ static struct ooh323_user *build_user(const char *name, struct ast_variable *v)
|
|||||||
sizeof(user->accountcode)-1);
|
sizeof(user->accountcode)-1);
|
||||||
} else if (!strcasecmp(v->name, "roundtrip")) {
|
} else if (!strcasecmp(v->name, "roundtrip")) {
|
||||||
sscanf(v->value, "%d,%d", &user->rtdrcount, &user->rtdrinterval);
|
sscanf(v->value, "%d,%d", &user->rtdrcount, &user->rtdrinterval);
|
||||||
|
} else if (!strcasecmp(v->name, "faststart")) {
|
||||||
|
user->faststart = ast_true(v->value);
|
||||||
|
} else if (!strcasecmp(v->name, "h245tunneling")) {
|
||||||
|
user->h245tunneling = ast_true(v->value);
|
||||||
} else if (!strcasecmp(v->name, "rtptimeout")) {
|
} else if (!strcasecmp(v->name, "rtptimeout")) {
|
||||||
user->rtptimeout = atoi(v->value);
|
user->rtptimeout = atoi(v->value);
|
||||||
if (user->rtptimeout < 0)
|
if (user->rtptimeout < 0)
|
||||||
@@ -2270,6 +2296,8 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v,
|
|||||||
peer->dtmfmode = gDTMFMode;
|
peer->dtmfmode = gDTMFMode;
|
||||||
peer->dtmfcodec = gDTMFCodec;
|
peer->dtmfcodec = gDTMFCodec;
|
||||||
peer->t38support = gT38Support;
|
peer->t38support = gT38Support;
|
||||||
|
peer->faststart = gFastStart;
|
||||||
|
peer->h245tunneling = gTunneling;
|
||||||
peer->port = 1720;
|
peer->port = 1720;
|
||||||
if (0 == friend_type) {
|
if (0 == friend_type) {
|
||||||
peer->mFriend = 1;
|
peer->mFriend = 1;
|
||||||
@@ -2316,6 +2344,10 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v,
|
|||||||
peer->outgoinglimit = 0;
|
peer->outgoinglimit = 0;
|
||||||
} else if (!strcasecmp(v->name, "accountcode")) {
|
} else if (!strcasecmp(v->name, "accountcode")) {
|
||||||
ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode));
|
ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode));
|
||||||
|
} else if (!strcasecmp(v->name, "faststart")) {
|
||||||
|
peer->faststart = ast_true(v->value);
|
||||||
|
} else if (!strcasecmp(v->name, "h245tunneling")) {
|
||||||
|
peer->h245tunneling = ast_true(v->value);
|
||||||
} else if (!strcasecmp(v->name, "rtptimeout")) {
|
} else if (!strcasecmp(v->name, "rtptimeout")) {
|
||||||
peer->rtptimeout = atoi(v->value);
|
peer->rtptimeout = atoi(v->value);
|
||||||
if(peer->rtptimeout < 0)
|
if(peer->rtptimeout < 0)
|
||||||
@@ -2779,6 +2811,8 @@ static char *handle_cli_ooh323_show_peer(struct ast_cli_entry *e, int cmd, struc
|
|||||||
if (peer) {
|
if (peer) {
|
||||||
sprintf(ip_port, "%s:%d", peer->ip, peer->port);
|
sprintf(ip_port, "%s:%d", peer->ip, peer->port);
|
||||||
ast_cli(a->fd, "%-15.15s%s\n", "Name: ", peer->name);
|
ast_cli(a->fd, "%-15.15s%s\n", "Name: ", peer->name);
|
||||||
|
ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", peer->faststart?"yes":"no",
|
||||||
|
peer->h245tunneling?"yes":"no");
|
||||||
ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
|
ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
|
||||||
print_codec_to_cli(a->fd, &peer->prefs);
|
print_codec_to_cli(a->fd, &peer->prefs);
|
||||||
ast_cli(a->fd, ")\n");
|
ast_cli(a->fd, ")\n");
|
||||||
@@ -2922,6 +2956,8 @@ static char *handle_cli_ooh323_show_user(struct ast_cli_entry *e, int cmd, struc
|
|||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
ast_cli(a->fd, "%-15.15s%s\n", "Name: ", user->name);
|
ast_cli(a->fd, "%-15.15s%s\n", "Name: ", user->name);
|
||||||
|
ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", user->faststart?"yes":"no",
|
||||||
|
user->h245tunneling?"yes":"no");
|
||||||
ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
|
ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
|
||||||
print_codec_to_cli(a->fd, &user->prefs);
|
print_codec_to_cli(a->fd, &user->prefs);
|
||||||
ast_cli(a->fd, ")\n");
|
ast_cli(a->fd, ")\n");
|
||||||
|
@@ -957,10 +957,8 @@ int ooHandleMasterSlave(OOH323CallData *call, void * pmsg,
|
|||||||
/*Since Cap exchange and MasterSlave Procedures are done */
|
/*Since Cap exchange and MasterSlave Procedures are done */
|
||||||
if(gH323ep.h323Callbacks.openLogicalChannels)
|
if(gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
gH323ep.h323Callbacks.openLogicalChannels(call);
|
gH323ep.h323Callbacks.openLogicalChannels(call);
|
||||||
else{
|
if(!ooGetTransmitLogicalChannel(call))
|
||||||
if(!ooGetTransmitLogicalChannel(call))
|
ooOpenLogicalChannels(call);
|
||||||
ooOpenLogicalChannels(call);
|
|
||||||
}
|
|
||||||
#if 0
|
#if 0
|
||||||
if(!call->logicalChans){
|
if(!call->logicalChans){
|
||||||
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
@@ -2114,10 +2112,8 @@ int ooOnReceivedTerminalCapabilitySetAck(OOH323CallData* call)
|
|||||||
{
|
{
|
||||||
if(gH323ep.h323Callbacks.openLogicalChannels)
|
if(gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
gH323ep.h323Callbacks.openLogicalChannels(call);
|
gH323ep.h323Callbacks.openLogicalChannels(call);
|
||||||
else{
|
if(!ooGetTransmitLogicalChannel(call))
|
||||||
if(!ooGetTransmitLogicalChannel(call))
|
ooOpenLogicalChannels(call);
|
||||||
ooOpenLogicalChannels(call);
|
|
||||||
}
|
|
||||||
#if 0
|
#if 0
|
||||||
if(!call->logicalChans){
|
if(!call->logicalChans){
|
||||||
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
@@ -3141,10 +3137,8 @@ int ooOnReceivedTerminalCapabilitySet(OOH323CallData *call, H245Message *pmsg)
|
|||||||
|
|
||||||
if(gH323ep.h323Callbacks.openLogicalChannels)
|
if(gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
gH323ep.h323Callbacks.openLogicalChannels(call);
|
gH323ep.h323Callbacks.openLogicalChannels(call);
|
||||||
else{
|
if(!ooGetTransmitLogicalChannel(call))
|
||||||
if(!ooGetTransmitLogicalChannel(call))
|
ooOpenLogicalChannels(call);
|
||||||
ooOpenLogicalChannels(call);
|
|
||||||
}
|
|
||||||
#if 0
|
#if 0
|
||||||
if(!call->logicalChans){
|
if(!call->logicalChans){
|
||||||
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
if(!gH323ep.h323Callbacks.openLogicalChannels)
|
||||||
|
@@ -751,9 +751,18 @@ int ooOnReceivedCallProceeding(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve the H.245 control channel address from the connect msg */
|
/* Retrieve tunneling info/H.245 control channel address from the connect msg */
|
||||||
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
|
!q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
|
||||||
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
|
OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
|
||||||
|
" (%s, %s)\n", call->callType, call->callToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
||||||
|
OO_TESTFLAG (call->flags, OO_M_TUNNELING) &&
|
||||||
callProceeding->m.h245AddressPresent) {
|
callProceeding->m.h245AddressPresent) {
|
||||||
OOTRACEINFO3("Tunneling and h245address provided."
|
OOTRACEINFO3("Tunneling and h245address provided."
|
||||||
"Using Tunneling for H.245 messages (%s, %s)\n",
|
"Using Tunneling for H.245 messages (%s, %s)\n",
|
||||||
@@ -801,6 +810,7 @@ int ooOnReceivedCallProceeding(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return OO_OK;
|
return OO_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,16 +980,27 @@ int ooOnReceivedAlerting(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve the H.245 control channel address from the connect msg */
|
/* Retrieve tunneling info/H.245 control channel address from the connect msg */
|
||||||
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
|
!q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
|
||||||
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
|
OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
|
||||||
|
" (%s, %s)\n", call->callType, call->callToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
||||||
alerting->m.h245AddressPresent) {
|
OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
OOTRACEINFO3("Tunneling and h245address provided."
|
if (alerting->m.h245AddressPresent)
|
||||||
"Giving preference to Tunneling (%s, %s)\n",
|
OOTRACEINFO3("Tunneling and h245address provided."
|
||||||
call->callType, call->callToken);
|
"Giving preference to Tunneling (%s, %s)\n",
|
||||||
}
|
call->callType, call->callToken);
|
||||||
else if(alerting->m.h245AddressPresent)
|
ret =ooSendTCSandMSD(call);
|
||||||
{
|
if (ret != OO_OK)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
} else if(alerting->m.h245AddressPresent) {
|
||||||
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
|
||||||
{
|
{
|
||||||
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
@@ -1019,13 +1040,12 @@ int ooOnReceivedAlerting(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
return OO_FAILED;
|
return OO_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
} else if (!call->pH245Channel && !call->h245listener) {
|
||||||
ret =ooSendTCSandMSD(call);
|
ret = ooSendStartH245Facility(call);
|
||||||
if (ret != OO_OK)
|
if (ret != OO_OK)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return OO_OK;
|
return OO_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1195,15 +1215,26 @@ int ooOnReceivedProgress(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve the H.245 control channel address from the connect msg */
|
/* Retrieve the H.245 control channel address from the connect msg */
|
||||||
|
/* Retrieve tunneling info/H.245 control channel address from the connect msg */
|
||||||
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
|
!q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
|
||||||
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
|
OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
|
||||||
|
" (%s, %s)\n", call->callType, call->callToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
||||||
progress->m.h245AddressPresent) {
|
OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
OOTRACEINFO3("Tunneling and h245address provided."
|
if (progress->m.h245AddressPresent)
|
||||||
"Giving preference to Tunneling (%s, %s)\n",
|
OOTRACEINFO3("Tunneling and h245address provided."
|
||||||
call->callType, call->callToken);
|
"Giving preference to Tunneling (%s, %s)\n",
|
||||||
}
|
call->callType, call->callToken);
|
||||||
else if(progress->m.h245AddressPresent)
|
ret =ooSendTCSandMSD(call);
|
||||||
{
|
if (ret != OO_OK)
|
||||||
|
return ret;
|
||||||
|
} else if(progress->m.h245AddressPresent) {
|
||||||
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
|
||||||
{
|
{
|
||||||
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
@@ -1243,8 +1274,8 @@ int ooOnReceivedProgress(OOH323CallData *call, Q931Message *q931Msg)
|
|||||||
return OO_FAILED;
|
return OO_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
} else if (!call->pH245Channel && !call->h245listener) {
|
||||||
ret =ooSendTCSandMSD(call);
|
ret = ooSendStartH245Facility(call);
|
||||||
if (ret != OO_OK)
|
if (ret != OO_OK)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1444,9 +1475,18 @@ int ooOnReceivedSignalConnect(OOH323CallData* call, Q931Message *q931Msg)
|
|||||||
OO_SETFLAG(call->flags, OO_M_FASTSTARTANSWERED);
|
OO_SETFLAG(call->flags, OO_M_FASTSTARTANSWERED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve the H.245 control channel address from the CONNECT msg */
|
/* Retrieve tunneling info/H.245 control channel address from the connect msg */
|
||||||
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
|
!q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
|
||||||
|
if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
|
||||||
|
OO_CLRFLAG (call->flags, OO_M_TUNNELING);
|
||||||
|
OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
|
||||||
|
" (%s, %s)\n", call->callType, call->callToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
|
||||||
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
|
||||||
|
OO_TESTFLAG (call->flags, OO_M_TUNNELING) &&
|
||||||
connect->m.h245AddressPresent) {
|
connect->m.h245AddressPresent) {
|
||||||
OOTRACEINFO3("Tunneling and h245address provided."
|
OOTRACEINFO3("Tunneling and h245address provided."
|
||||||
"Giving preference to Tunneling (%s, %s)\n",
|
"Giving preference to Tunneling (%s, %s)\n",
|
||||||
|
Reference in New Issue
Block a user