[IOT-1695] Move CAReceiveMessage from stack to heap
authorJoonghwan Lee <jh05.lee@samsung.com>
Thu, 22 Dec 2016 07:45:11 +0000 (16:45 +0900)
committerRandeep Singh <randeep.s@samsung.com>
Thu, 29 Dec 2016 05:21:26 +0000 (05:21 +0000)
CAReceiveMessage at present uses a buffer of 65k which gets
allocated on stack to receive message. This allocation is
not good for embedded OS where the Stack is limited and
results in Stack Corruption.

Change-Id: I974208bc7fdfdd6464c9b34ea122734bf64507bf
Signed-off-by: Joonghwan Lee <jh05.lee@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/15889
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jongsung Lee <js126.lee@samsung.com>
Reviewed-by: Randeep Singh <randeep.s@samsung.com>
(cherry picked from commit 584bb5d3a36c536911d88de2aeefed8ef782cfa1)
Reviewed-on: https://gerrit.iotivity.org/gerrit/15973

resource/csdk/connectivity/src/tcp_adapter/catcpserver.c

index 4b00d0d..f911a7b 100644 (file)
@@ -580,10 +580,10 @@ static void CAReceiveMessage(int fd)
     }
     else
     {
-        unsigned char buffer[65535] = {0,}; // 65535 is the maximum size of ip packet
         svritem->protocol = COAP;
 
-        len = recv(fd, buffer, sizeof(buffer), 0);
+        // svritem->tlsdata can also be used as receiving buffer in case of raw tcp
+        len = recv(fd, svritem->tlsdata, sizeof(svritem->tlsdata), 0);
         if (len < 0)
         {
             OIC_LOG_V(ERROR, TAG, "recv failed %s", strerror(errno));
@@ -600,7 +600,7 @@ static void CAReceiveMessage(int fd)
             //when successfully read data - pass them to callback.
             if (g_packetReceivedCallback)
             {
-                g_packetReceivedCallback(&svritem->sep, buffer, len);
+                g_packetReceivedCallback(&svritem->sep, svritem->tlsdata, len);
             }
         }
     }