Pārlūkot izejas kodu

Handling of messages that are not parsed completely. Related to #125.

Julius Pfrommer 10 gadi atpakaļ
vecāks
revīzija
5f2e20396f
1 mainītis faili ar 5 papildinājumiem un 0 dzēšanām
  1. 5 0
      src/server/ua_server_binary.c

+ 5 - 0
src/server/ua_server_binary.c

@@ -338,6 +338,7 @@ UA_Int32 UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connec
     // todo: test how far pos advanced must be equal to what is said in the messageheader
     do {
         retval = UA_TcpMessageHeader_decodeBinary(msg, &pos, &tcpMessageHeader);
+        UA_UInt32 targetpos = pos - 8 + tcpMessageHeader.messageSize;
         if(retval == UA_SUCCESS) {
             // none of the process-functions returns an error its all contained inside.
             switch(tcpMessageHeader.messageType) {
@@ -371,6 +372,10 @@ UA_Int32 UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connec
             connection->close(connection->callbackHandle);
         }
         // todo: more than one message at once..
+        if(pos != targetpos) {
+            printf("the message size was not as announced!\n");
+            pos = targetpos;
+        }
     } while(msg->length > (UA_Int32)pos);
     return retval;
 }