Merge branch 'master' from tizen-rsa
authorSooyoung Ha <yoosah.ha@samsung.com>
Mon, 25 Feb 2013 09:44:02 +0000 (18:44 +0900)
committerSooyoung Ha <yoosah.ha@samsung.com>
Mon, 25 Feb 2013 10:17:57 +0000 (19:17 +0900)
AUTHORS
debian/copyright
include/emuld.h
include/emuld_common.h
packaging/emuld.spec
src/emuld.c
src/get_status.c

diff --git a/AUTHORS b/AUTHORS
index caffe7bc4844080e95200f83a9e541369b7cf2cd..978df0fb4e75ed284906848d0608eac95e4dcca4 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,9 +1,6 @@
-HyunGoo Kang <hyungoo1.kang@samsung.com>
 YeongKyoon Lee <yeongkyoon.lee@samsung.com>
-DongKyun Yun <dk77.yun@samsung.com>
-DoHyung Hong <don.hong@samsung.com>
+DaiYoung Kim <daiyoung777.kim@samsung.com>
 SeokYeon Hwang <syeon.hwang@samsung.com>
-Hyunjun Son <hj79.son@samsung.com>
 SangJin Kim <sangjin3.kim@samsung.com>
 KiTae Kim <kt920.kim@samsung.com>
 JinHyung Jo <jinhyung.jo@samsung.com>
@@ -11,3 +8,6 @@ SungMin Ha <sungmin82.ha@samsung.com>
 MunKyu Im <munkyu.im@samsung.com>
 JiHye Kim <jihye1128.kim@samsung.com>
 GiWoong Kim <giwoong.kim@samsung.com>
+SooYoung Ha <yoosah.ha@samsnung.com>
+HyunGoo Kang <hyungoo1.kang@samsung.com>
+
index e7f26e96e00eb23e205da3e633ccc9d9ad24c363..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
@@ -1,21 +1 @@
-This is $PACKAGE_NAME, written and maintained by $NAME <$EMAIL>
-on Fri, 18 Nov 2011 17:08:22 +0900.
 
-The original source can always be found at:
-       slp/sdk/public/common/emulator/default-files-emulator/src/emulator-daemon
-
-Copyright Holder: $NAME
-
-License:
-       samsung
-
-/*
- * Copyright (c) 2008 Samsung Electronics, Inc.
- * All rights reserved.
- *
- * This software is a confidential and proprietary information
- * of Samsung Electronics, Inc. ("Confidential Information").  You
- * shall not disclose such Confidential Information and shall use
- * it only in accordance with the terms of the license agreement
- * you entered into with Samsung Electronics. 
- */
index e33d5be86673340330b796e9bc86d4362793e212..0e361467ad694271dfd1c0e25d7a94ba481bec9a 100644 (file)
@@ -3,7 +3,8 @@
  *
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
- * Contact: 
+ * Contact:
+ * SooYoung Ha <yoosah.ha@samsnung.com>
  * Sungmin Ha <sungmin82.ha@samsung.com>
  * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
  * 
index 285333b2c657e2cb7bccd26ca74486577429b3cb..5e96735e8966e82dc32525682be47600915b3f28 100644 (file)
@@ -3,7 +3,8 @@
  *
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
- * Contact: 
+ * Contact:
+ * SooYoung Ha <yoosah.ha@samsnung.com>
  * Sungmin Ha <sungmin82.ha@samsung.com>
  * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
  * 
@@ -29,6 +30,8 @@
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
+#include <netdb.h>
+#include <unistd.h>
 
 // define group id
 // return value to the injector
index 581bf1e6831b0c01daa2933b22fe0c64de9fd95a..91eb62036632d9e27e9f9116bba52623a87890f1 100644 (file)
@@ -1,6 +1,6 @@
 #git:/slp/pkgs/e/emulator-daemon
 Name: emuld
-Version: 0.2.22
+Version: 0.2.27
 Release: 1
 Summary: emuld is used for communication emulator between and ide.
 License: Apache
index bc8fdf8e82cc3da3c0989ccb6e7e3b9700b53374..b2e6fe9a86d59d9699b95cb30d0c06f47cc50109 100644 (file)
@@ -1,9 +1,10 @@
-/*
+/* -*- Mode: C; c-basic-offset: 8; indent-tabs-mode: t -*-
  * emulator-daemon
  *
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
- * Contact: 
+ * Contact:
+ * SooYoung Ha <yoosah.ha@samsnung.com>
  * Sungmin Ha <sungmin82.ha@samsung.com>
  * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
  * 
@@ -199,7 +200,7 @@ int is_mounted()
 
        for(i = 0; i < 10; i++)
        {
-               sprintf(file_name, "/dev/mmcblk%d", i);
+               sprintf(file_name, "/dev/emul_mmcblk%d", i);
                ret = access( file_name, F_OK );
                if( ret == 0 )
                {
@@ -233,7 +234,7 @@ void* mount_sdcard(void* data)
        {       
                for(i = 0; i < 10; i++)
                {
-                       sprintf(file_name, "/dev/mmcblk%d", i);
+                       sprintf(file_name, "/dev/emul_mmcblk%d", i);
                        ret = access( file_name, F_OK );
                        if( ret == 0 )
                        {
@@ -293,6 +294,9 @@ int umount_sdcard(void)
        char file_name[128];
        memset(file_name, '\0', sizeof(file_name));
        LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
+       if(packet == NULL){
+           return ret;
+       }
        memset(packet, 0, sizeof(LXT_MESSAGE));
 
        LOG("start sdcard umount");
@@ -301,7 +305,7 @@ int umount_sdcard(void)
 
        for(i = 0; i < 10; i++)
        {
-               sprintf(file_name, "/dev/mmcblk%d", i);
+               sprintf(file_name, "/dev/emul_mmcblk%d", i);
                ret = access( file_name, F_OK);
                if ( ret == 0 )
                {
@@ -339,6 +343,10 @@ int umount_sdcard(void)
                }
        }
 
+       if(packet){
+           free(packet);
+           packet = NULL;
+       }
        return ret;
 } 
 
@@ -397,7 +405,10 @@ void userpool_add(int cli_fd, unsigned short cli_port)
        {
                if(g_client[i].cli_sockfd == -1) break;
        }
-       if( i >= MAX_CLIENT ) close(cli_fd);
+       if( i >= MAX_CLIENT ){ 
+           close(cli_fd);
+           return;
+       }
 
        LOG("g_client[%d].cli_port: %d", i, cli_port);
 
@@ -438,39 +449,79 @@ int parse_val(char *buff, unsigned char data, char *parsbuf)
        return 0;
 }
 
+#define STR_HELPER(x) #x
+#define STR(x) STR_HELPER(x)
+
 void udp_init(void)
 {
+       char emul_ip[HOST_NAME_MAX+1];
+       struct addrinfo *res;
+       struct addrinfo hints;
+       int rc;
+
        LOG("start");
-       char* emul_ip = getenv("HOSTNAME");
-       if(emul_ip == NULL)
+
+       memset(emul_ip, 0, sizeof(emul_ip));
+       if (gethostname(emul_ip, sizeof(emul_ip)) < 0)
+       {
+               LOG("gethostname(): %s", strerror(errno));
+               assert(0);
+       }
+
+       memset(&hints, 0, sizeof(hints));
+       hints.ai_family=AF_INET;
+       hints.ai_socktype=SOCK_DGRAM;
+       hints.ai_protocol=IPPROTO_UDP;
+
+       if ((rc=getaddrinfo(emul_ip, STR(SENSORD_PORT), &hints, &res)) != 0)
        {
-               LOG("emul_ip is null");
+               if (rc == EAI_SYSTEM)
+                       LOG("getaddrinfo(sensord): %s", strerror(errno));
+               else
+                       LOG("getaddrinfo(sensord): %s", gai_strerror(rc));
                assert(0);
        }
 
-       if ((uSensordFd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1){
+       if ((uSensordFd=socket(res->ai_family, res->ai_socktype, res->ai_protocol))==-1){
                fprintf(stderr, "socket error!\n");
        }
 
+       if (res->ai_addrlen > sizeof(si_sensord_other))
+       {
+               LOG("sockaddr structure too big");
+               /* XXX: if you `return' remember to clean up */
+               assert(0);
+       }
        memset((char *) &si_sensord_other, 0, sizeof(si_sensord_other));
-       si_sensord_other.sin_family = AF_INET;
-       si_sensord_other.sin_port = htons(sensord_port);
-       if (inet_aton(emul_ip, &si_sensord_other.sin_addr)==0) {
-               fprintf(stderr, "inet_aton() failed\n");
+       memcpy((char *) &si_sensord_other, res->ai_addr, res->ai_addrlen);
+       freeaddrinfo(res);
+
+       if ((rc=getaddrinfo(emul_ip, STR(GPSD_PORT), &hints, &res)) != 0)
+       {
+               if (rc == EAI_SYSTEM)
+                       LOG("getaddrinfo(gpsd): %s", strerror(errno));
+               else
+                       LOG("getaddrinfo(gpsd): %s", gai_strerror(rc));
+               assert(0);
        }
 
-       if ((uGpsdFd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1){
+       if ((uGpsdFd=socket(res->ai_family, res->ai_socktype, res->ai_protocol))==-1){
                fprintf(stderr, "socket error!\n");
        }
 
-       memset((char *) &si_gpsd_other, 0, sizeof(si_gpsd_other));
-       si_gpsd_other.sin_family = AF_INET;
-       si_gpsd_other.sin_port = htons(gpsd_port);
-       if (inet_aton(emul_ip, &si_gpsd_other.sin_addr)==0) {
-               fprintf(stderr, "inet_aton() failed\n");
+       if (res->ai_addrlen > sizeof(si_gpsd_other))
+       {
+               LOG("sockaddr structure too big");
+               assert(0);
        }
+       memset((char *) &si_gpsd_other, 0, sizeof(si_gpsd_other));
+       memcpy((char *) &si_gpsd_other, res->ai_addr, res->ai_addrlen);
+       freeaddrinfo(res);
 }
 
+#undef STR_HELPER
+#undef STR
+
 int recv_data(int event_fd, char** r_databuf, int size)
 {
        int recvd_size = 0;
@@ -479,7 +530,15 @@ int recv_data(int event_fd, char** r_databuf, int size)
        char* r_tmpbuf = NULL;
 
        r_tmpbuf = (char*)malloc(sizeof(char) * size + 1);
+       if(r_tmpbuf == NULL){
+           return -1;
+       }
+
        *r_databuf = (char*)malloc(sizeof(char) * size + 1);
+       if(*r_databuf == NULL){
+           free(r_tmpbuf);
+           return -1;
+       }
        memset(*r_databuf, '\0', sizeof(char) * size + 1);
 
        while(recvd_size < size)
@@ -545,12 +604,18 @@ void client_recv(int event_fd)
        char tmpbuf[48];
        int len, recvd_size, parse_len = 0;
        LXT_MESSAGE* packet = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
+       if (packet == NULL)
+       {
+           return;
+       }
        memset(packet, 0, sizeof(LXT_MESSAGE));
 
        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) {
+               free(packet);
+               packet = NULL;
                return;
        }
 
@@ -581,8 +646,11 @@ void client_recv(int event_fd)
                
                if(g_sdbd_sockfd != -1)
                        len = send(g_sdbd_sockfd, (void*)packet, sizeof(char) * HEADER_SIZE, 0);
-               else
+               else {
+                       free(packet);
+                       packet = NULL;
                        return;
+               }
 
                LOG("send_len: %d, next packet length: %d", len, packet->length);
 
@@ -626,6 +694,8 @@ void client_recv(int event_fd)
                {
                        free(r_databuf);
                        r_databuf = NULL;
+                       free(packet);
+                       packet = NULL;
                        LOG("close event_fd: %d", event_fd);
                        userpool_delete(event_fd);
                        close(event_fd); /* epoll set fd also deleted automatically by this call as a spec */
@@ -651,8 +721,11 @@ void client_recv(int event_fd)
                if(strncmp(tmpbuf, "telephony", 9) == 0)
                {
                        g_sdbd_sockfd = event_fd;
-                       if(g_vm_connect_status != 1)    // The connection is lost with vmodem
+                       if(g_vm_connect_status != 1) {  // The connection is lost with vmodem
+                               free(packet);
+                               packet = NULL;
                                return;
+                       }
 
                        recvd_size = recv_data(event_fd, &r_databuf, HEADER_SIZE);                      
                        len = send(g_vm_sockfd, r_databuf, HEADER_SIZE, 0);
@@ -762,6 +835,8 @@ void client_recv(int event_fd)
                        {
                                free(r_databuf);
                                r_databuf = NULL;
+                               free(packet);
+                               packet = NULL;
                                return;
                        }
 
@@ -771,6 +846,11 @@ void client_recv(int event_fd)
                        free(r_databuf);
                        r_databuf = NULL;
                        recvd_size = recv_data(event_fd, &r_databuf, packet->length);
+                       if(r_databuf == NULL){
+                           free(packet);
+                           packet = NULL;
+                           return;
+                       }
                        LOG("nfc data recv buffer: %s", r_databuf);
 
                        if (packet->group == STATUS) {
@@ -789,6 +869,8 @@ void client_recv(int event_fd)
                                if(!fd)
                                {
                                        LOG("nfc file open fail!");
+                                       free(r_databuf);
+                                       r_databuf = NULL;
                                        free(packet);
                                        packet = NULL;
                                        return;
@@ -833,6 +915,23 @@ void client_recv(int event_fd)
                        free(r_databuf);
                        r_databuf = NULL;
                        recvd_size = recv_data(event_fd, &r_databuf, packet->length);
+                       if(recvd_size <= 0){
+                               LOG("client_recv: recv_data err");
+                               if(r_databuf) {
+                                       free(r_databuf);
+                                       r_databuf = NULL;
+                               }
+                               if(packet) {
+                                       free(packet);
+                                       packet = NULL;
+                               }
+                               LOG("close event_fd: %d", event_fd);
+                               userpool_delete(event_fd);
+                               close(event_fd); /* epoll set fd also deleted automatically by this call as a spec */
+                               if(event_fd == g_sdbd_sockfd)
+                                       g_sdbd_sockfd = -1;
+                               return;
+                       }
 
                        LOG("Something may be added in the data end, but it does not matter.");
                        LOG("sdcard data recv buffer: %s", r_databuf);
@@ -868,6 +967,9 @@ void client_recv(int event_fd)
                                mount_status = is_mounted();
 
                                LXT_MESSAGE* mntData = (LXT_MESSAGE*)malloc(sizeof(LXT_MESSAGE));
+                               if(mntData == NULL){
+                                   break;
+                               }
                                memset(mntData, 0, sizeof(LXT_MESSAGE));
 
                                mntData->length = strlen(SDpath);       // length
@@ -894,6 +996,7 @@ void client_recv(int event_fd)
                                default:
                                        break;
                                }
+                               free(mntData);
                                break;
                        default:
                                LOG("unknown data %s", ret);
@@ -1181,7 +1284,10 @@ void send_guest_server(char* databuf)
        }
 
        if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
-                 LOG("socket error!");
+       {
+               LOG("socket error!");
+               return;
+       }
            
        memset((char *) &si_other, 0, sizeof(si_other));
        si_other.sin_family = AF_INET;
index 0867af73d4442da36770e6000bc625bddbae977a..fb033d19927c122631c5aad497b7ffdd42423e85 100644 (file)
@@ -3,7 +3,8 @@
  *
  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
- * Contact: 
+ * Contact:
+ * SooYoung Ha <yoosah.ha@samsnung.com>
  * Sungmin Ha <sungmin82.ha@samsung.com>
  * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
  *