summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorzuul <zuul@gerrit.asterisk.org>2016-11-07 07:50:38 -0600
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-11-07 07:50:38 -0600
commitf02647ebbd0bebcee13de0e0da53cb7cb7e4a623 (patch)
tree5d09ee90cb2375c36d516c69adafc5c0f92ae531 /addons
parent3a4baca35a4fb172031250d286ca3a5c46d87901 (diff)
parenteceab15f3339445c37b756c9dbe338f95850741f (diff)
Merge "chan_ooh323: Fix infinite loop on read second part of H.225 packet" into 13
Diffstat (limited to 'addons')
-rw-r--r--addons/ooh323c/src/oochannels.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/addons/ooh323c/src/oochannels.c b/addons/ooh323c/src/oochannels.c
index ddc6bf622..b6fdb6f49 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",