Merge "chan_ooh323: Fix infinite loop on read second part of H.225 packet"

This commit is contained in:
Joshua Colp 2016-11-07 08:07:10 -06:00 committed by Gerrit Code Review
commit 876c6b0c96
1 changed files with 20 additions and 7 deletions

View File

@ -1061,11 +1061,6 @@ int ooH2250Receive(OOH323CallData *call)
while(total < len)
{
struct pollfd pfds;
recvLen = ooSocketRecv (call->pH225Channel->sock, message1, len-total);
memcpy(message+total, message1, recvLen);
total = total + recvLen;
if(total == len) break; /* Complete message is received */
pfds.fd = call->pH225Channel->sock;
pfds.events = POLLIN;
@ -1085,8 +1080,9 @@ int ooH2250Receive(OOH323CallData *call)
}
return OO_FAILED;
}
/* If remaining part of the message is not received in 3 seconds
exit */
/* exit If remaining part of the message is not received in 3 seconds */
if(!ooPDRead(&pfds, 1, call->pH225Channel->sock))
{
OOTRACEERR3("Error: Incomplete H.2250 message received - clearing "
@ -1099,6 +1095,23 @@ int ooH2250Receive(OOH323CallData *call)
}
return OO_FAILED;
}
recvLen = ooSocketRecv (call->pH225Channel->sock, message1, len-total);
if (recvLen == 0) {
OOTRACEERR3("Error in read while receiving H.2250 message - "
"clearing call (%s, %s)\n", call->callType,
call->callToken);
ooFreeQ931Message(pctxt, pmsg);
if(call->callState < OO_CALL_CLEAR)
{
call->callEndReason = OO_REASON_TRANSPORTFAILURE;
call->callState = OO_CALL_CLEAR;
}
return OO_FAILED;
}
memcpy(message+total, message1, recvLen);
total = total + recvLen;
}
OOTRACEDBGC3("Received Q.931 message: (%s, %s)\n",