Merged revisions 321528 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r321528 | may | 2011-06-01 14:40:19 +0400 (Wed, 01 Jun 2011) | 14 lines
  
  Fix double alerting, add forced alerting before answer
  
  Fix double alerting (it wasn't fixed here by issue #18542)
  Add forced alerting before connect (if it wasn't before)
  Try to send all packets from outgoing queue rather than one only
  Call goes into clearing state when disconnect command is received
  
  (closes issue #19361)
  Reported by: vmikhelson
  Patches: 
        issue19361-3.patch uploaded by may213 (license 454)
  Tested by: vmikhelson
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@321529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Alexandr Anikin 14 years ago
parent 17b8521836
commit ea01c3b4fa

@ -1044,6 +1044,7 @@ static int ooh323_hangup(struct ast_channel *ast)
static int ooh323_answer(struct ast_channel *ast)
{
struct ooh323_pvt *p = ast->tech_pvt;
char *callToken = (char *)NULL;
if (gH323Debug)
ast_verbose("--- ooh323_answer\n");
@ -1051,8 +1052,18 @@ static int ooh323_answer(struct ast_channel *ast)
if (p) {
ast_mutex_lock(&p->lock);
callToken = (p->callToken ? strdup(p->callToken) : NULL);
if (ast->_state != AST_STATE_UP) {
ast_channel_lock(ast);
if (!p->alertsent) {
if (gH323Debug) {
ast_debug(1, "Sending forced ringback for %s, res = %d\n",
callToken, ooManualRingback(callToken));
} else {
ooManualRingback(callToken);
}
p->alertsent = 1;
}
ast_setstate(ast, AST_STATE_UP);
if (option_debug)
ast_debug(1, "ooh323_answer(%s)\n", ast->name);
@ -1220,6 +1231,7 @@ static int ooh323_indicate(struct ast_channel *ast, int condition, const void *d
}
p->alertsent = 1;
}
p->alertsent = 1;
}
break;
case AST_CONTROL_SRCUPDATE:

@ -682,10 +682,11 @@ int ooProcessCallFDSETsAndTimers
if (0 != call->pH245Channel && 0 != call->pH245Channel->sock)
{
if(call->pH245Channel->outQueue.count>0)
{
if(ooPDWrite(pfds, nfds, call->pH245Channel->sock))
ooSendMsg(call, OOH245MSG);
if(ooPDWrite(pfds, nfds, call->pH245Channel->sock)) {
while (call->pH245Channel->outQueue.count>0) {
if (ooSendMsg(call, OOH245MSG) != OO_OK)
break;
}
}
}
else if(call->h245listener)
@ -702,20 +703,23 @@ int ooProcessCallFDSETsAndTimers
{
if(ooPDWrite(pfds, nfds, call->pH225Channel->sock))
{
if(call->pH225Channel->outQueue.count>0)
while (call->pH225Channel->outQueue.count>0)
{
OOTRACEDBGC3("Sending H225 message (%s, %s)\n",
call->callType, call->callToken);
ooSendMsg(call, OOQ931MSG);
if (ooSendMsg(call, OOQ931MSG) != OO_OK)
break;
}
if(call->pH245Channel &&
call->pH245Channel->outQueue.count>0 &&
OO_TESTFLAG (call->flags, OO_M_TUNNELING))
{
OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
while (call->pH245Channel->outQueue.count>0) {
OOTRACEDBGC3("H245 message needs to be tunneled. "
"(%s, %s)\n", call->callType,
call->callToken);
ooSendMsg(call, OOH245MSG);
if (ooSendMsg(call, OOH245MSG) != OO_OK)
break;
}
}
}
}
@ -1330,7 +1334,7 @@ int ooSendMsg(OOH323CallData *call, int type)
{
OOTRACEDBGA3("Warning:Call marked for cleanup. Can not send message."
"(%s, %s)\n", call->callType, call->callToken);
return OO_OK;
return OO_FAILED;
}
if(type == OOQ931MSG)

@ -2126,6 +2126,8 @@ int ooHandleH245Command(OOH323CallData *call,
ooClearAllLogicalChannels(call);
}
ooSendEndSessionCommand(call);
if (call->callState < OO_CALL_CLEAR)
call->callState = OO_CALL_CLEAR;
}

Loading…
Cancel
Save