From: jihye kim Date: Mon, 5 Nov 2012 11:23:28 +0000 (+0900) Subject: add checking routine 'recv' function's return value X-Git-Tag: submit/tizen/20150527.025434^2~10^2~1^2~37 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6cce094431a8b5ec65486c3850f738840be52f70;p=platform%2Fadaptation%2Femulator%2Femulator-daemon.git add checking routine 'recv' function's return value --- diff --git a/debian/changelog b/debian/changelog index 787e510..5108c36 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +emuld (0.2.20) unstable; urgency=low + + * add checking routine 'recv' function's return value + * Git: slp/pkgs/e/emulator-daemon + * Tag: emuld_0.2.20 + + -- Jihye kim Mon, 04 Nov 2012 20:00:18 +0900 + emuld (0.2.18) unstable; urgency=low * fixed hang up when sending packet vmodem to eventinjector diff --git a/debian/control b/debian/control index 1af04fa..685dbb7 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: emuld Section: misc Priority: extra Maintainer:Sungmin Ha ,Jihye Kim ,Yeongkyoon Lee -Standards-Version: 0.2.18 +Standards-Version: 0.2.20 Package: emuld Section: misc diff --git a/packaging/emuld.spec b/packaging/emuld.spec index 1437b4e..3ea88e8 100644 --- a/packaging/emuld.spec +++ b/packaging/emuld.spec @@ -1,6 +1,6 @@ #git:/slp/pkgs/e/emulator-daemon Name: emuld -Version: 0.2.19 +Version: 0.2.20 Release: 1 Summary: emuld is used for communication emulator between and ide. License: Apache diff --git a/src/emuld.c b/src/emuld.c index 28f0b1c..80eb768 100644 --- a/src/emuld.c +++ b/src/emuld.c @@ -490,13 +490,18 @@ int recv_data(int event_fd, char** r_databuf, int size) while(recvd_size < size) { - memset(r_tmpbuf, '\0', sizeof(char) * size); + memset(r_tmpbuf, '\0', sizeof(char) * size + 1); len = recv(event_fd, r_tmpbuf, size - recvd_size, 0); + if (len < 0) { + break; + } + memcpy((*r_databuf) + recvd_size, r_tmpbuf, len); recvd_size += len; getcnt++; - if(getcnt > MAX_GETCNT) + if(getcnt > MAX_GETCNT) { break; + } } free(r_tmpbuf); r_tmpbuf = NULL; @@ -548,17 +553,18 @@ void client_recv(int event_fd) LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE)); memset(packet, 0, sizeof(LXT_MESSAGE)); - LOG("start"); + LOG("start (event fd: %d)", event_fd); /* there need to be more precise code here */ /* for example , packet check(protocol needed) , real recv size check , etc. */ + if (event_fd == -1) { + return; + } // vmodem to event injector if(event_fd == g_vm_sockfd) { recvd_size = recv_data(event_fd, &r_databuf, HEADER_SIZE); - - LOG("recv_len: %d, vmodem header recv buffer: %s", recvd_size, r_databuf); - + LOG("receive size: %d", recvd_size); if(recvd_size <= 0) { free(r_databuf); @@ -572,6 +578,7 @@ void client_recv(int event_fd) return; } + LOG("vmodem header recv buffer: %s", r_databuf); memcpy((void*)packet, (void*)r_databuf, sizeof(char) * HEADER_SIZE); LOG("first packet of vmodem to event injector %s", r_databuf); @@ -620,10 +627,7 @@ void client_recv(int event_fd) /* read from socket */ // read identifier recvd_size = recv_data(event_fd, &r_databuf, ID_SIZE); - - LOG("Something may be added in the data end, but it does not matter."); - LOG("identifier: %s", r_databuf); - + LOG("receive size: %d", recvd_size); if( recvd_size <= 0 ) { free(r_databuf); @@ -637,6 +641,9 @@ void client_recv(int event_fd) return; } + LOG("Something may be added in the data end, but it does not matter."); + LOG("identifier: %s", r_databuf); + memset(tmpbuf, '\0', sizeof(tmpbuf)); parse_len = parse_val(r_databuf, 0x0a, tmpbuf); @@ -683,9 +690,6 @@ void client_recv(int event_fd) recvd_size = recv_data(event_fd, &r_databuf, packet->length); - LOG("Something may be added in the data end, but it does not matter."); - LOG("telephony data recv buffer: %s", r_databuf); - if(recvd_size <= 0) { free(r_databuf); @@ -693,9 +697,12 @@ void client_recv(int event_fd) free(packet); packet = NULL; return; - } - else + } else { + LOG("Something may be added in the data end, but it does not matter."); + LOG("telephony data recv buffer: %s", r_databuf); + len = send(g_vm_sockfd, r_databuf, packet->length, 0); + } } else if(strncmp(tmpbuf, "sensor", 6) == 0) {