diff --git a/addons/ooh323c/src/oochannels.c b/addons/ooh323c/src/oochannels.c index 76f8422a5a571d25e70817a6090620db02fbb868..a09470db1344c7f073db65c0063380753103b544 100644 --- a/addons/ooh323c/src/oochannels.c +++ b/addons/ooh323c/src/oochannels.c @@ -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",