ecs: changed inet_listen_opts to local listen socket
authorJinhyung Choi <jinhyung2.choi@samsung.com>
Thu, 28 May 2015 06:29:36 +0000 (15:29 +0900)
committerJinhyung Choi <jinhyung2.choi@samsung.com>
Thu, 28 May 2015 06:29:36 +0000 (15:29 +0900)
Change-Id: I9ae0f18c62d27c1206be85219b1729c722b85627
Signed-off-by: Jinhyung Choi <jinhyung2.choi@samsung.com>
tizen/src/ecs/ecs.c
tizen/src/ecs/ecs.h
tizen/src/emulator.c

index b10523c67c66ab5bf26d853b3370e5fb4dddef5c..fbebdcb02367c35f9ef2cd176377d66a19f9f114 100644 (file)
@@ -547,40 +547,6 @@ static void alive_checker(void *opaque) {
 
 }
 
-static int socket_initialize(ECS_State *cs, QemuOpts *opts) {
-    int fd = -1;
-    Error *local_err = NULL;
-
-    fd = inet_listen_opts(opts, 0, &local_err);
-    if (0 > fd || error_is_set(&local_err)) {
-        qerror_report_err(local_err);
-        error_free(local_err);
-        return -1;
-    }
-
-    INFO("Listen fd is %d\n", fd);
-
-    qemu_set_nonblock(fd);
-
-    cs->listen_fd = fd;
-
-#ifdef CONFIG_LINUX
-    epoll_init(cs);
-#else
-    FD_ZERO(&cs->reads);
-    FD_SET(fd, &cs->reads);
-#endif
-
-    make_keep_alive_msg();
-
-    cs->alive_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, alive_checker, cs);
-
-    timer_mod(cs->alive_timer,
-            qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + get_ticks_per_sec() * TIMER_ALIVE_S);
-
-    return 0;
-}
-
 #ifdef CONFIG_LINUX
 static int ecs_loop(ECS_State *cs) {
     int i, nfds;
@@ -667,13 +633,84 @@ static int ecs_loop(ECS_State *cs)
 
 #endif
 
+static int ecs_socket_listen(int port)
+{
+    struct sockaddr_in addr;
+    int slisten = -1;
+    int ret = -1;
+
+    addr.sin_family = AF_INET;
+    addr.sin_port = htons(port);
+
+    ret = inet_aton(HOST_LISTEN_ADDR, &addr.sin_addr);
+    if (ret == 0) {
+        ERR("inet_aton failure\n");
+        return -1;
+    }
+
+    slisten = qemu_socket(PF_INET, SOCK_STREAM, 0);
+    if (slisten < 0) {
+        ERR("socket creation failed.\n");
+        return slisten;
+    }
+
+    ret = socket_set_fast_reuse(slisten);
+    if (ret != 0) {
+        ERR("It cannot be reach here.\n");
+        closesocket(slisten);
+        return -1;
+    }
+
+    if (bind(slisten, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+        ERR("bind failed : %d\n", errno);
+        closesocket(slisten);
+        return -1;
+    }
+
+    if (listen(slisten,1) != 0) {
+        ERR("listen failed : %d\n", errno);
+        closesocket(slisten);
+        return -1;
+    }
+
+    return slisten;
+}
+
+static int socket_initialize(ECS_State *cs, int port) {
+    int fd = -1;
+
+    fd = ecs_socket_listen(port);
+    if (fd < 0) {
+        return -1;
+    }
+
+    INFO("Listen fd is %d\n", fd);
+
+    qemu_set_nonblock(fd);
+
+    cs->listen_fd = fd;
+
+#ifdef CONFIG_LINUX
+    epoll_init(cs);
+#else
+    FD_ZERO(&cs->reads);
+    FD_SET(fd, &cs->reads);
+#endif
+
+    make_keep_alive_msg();
+
+    cs->alive_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, alive_checker, cs);
+
+    timer_mod(cs->alive_timer,
+            qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + get_ticks_per_sec() * TIMER_ALIVE_S);
+
+    return 0;
+}
+
 static void* ecs_initialize(void* args) {
     int ret = 1;
     ECS_State *cs = NULL;
-    QemuOpts *opts = NULL;
-    Error *local_err = NULL;
     Monitor* mon = NULL;
-    char host_port[16];
     int port = 0;
 
     INFO("ecs starts initializing.\n");
@@ -681,16 +718,6 @@ static void* ecs_initialize(void* args) {
     qemu_mutex_init(&mutex_clilist);
     qemu_mutex_init(&mutex_location_data);
 
-    opts = qemu_opts_create(qemu_find_opts(ECS_OPTS_NAME), ECS_OPTS_NAME, 1, &local_err);
-    if (error_is_set(&local_err)) {
-        qerror_report_err(local_err);
-        error_free(local_err);
-        return NULL;
-    }
-
-    qemu_opt_set(opts, "host", HOST_LISTEN_ADDR);
-    qemu_opt_set_bool(opts, "ipv4", true);
-
     cs = g_malloc0(sizeof(ECS_State));
     if (NULL == cs) {
         ERR("ECS_State allocation failed.\n");
@@ -700,11 +727,8 @@ static void* ecs_initialize(void* args) {
     cs->listen_fd = -1;
 
     port = get_emul_ecs_port();
-    INFO("ecs port: %d\n", port);
-    sprintf(host_port, "%d", port);
 
-    qemu_opt_set(opts, "port", host_port);
-    ret = socket_initialize(cs, opts);
+    ret = socket_initialize(cs, port);
     if (ret < 0) {
         ERR("Socket initialization is failed.\n");
         ecs_close(cs);
index ad874d22efdca1c11fc3101f35a00e798b9218f6..6b544236aec9846181fd67785ceda43e78839ef0 100644 (file)
 #include "genmsg/ecs.pb-c.h"
 #include "genmsg/ecs_ids.pb-c.h"
 
-#define ECS_VERSION   "1.0"
-
-#define ECS_OPTS_NAME           "ecs"
 #define HOST_LISTEN_ADDR        "127.0.0.1"
-#define HOST_LISTEN_PORT        0
-#define EMULATOR_SERVER_NUM     10
 
 #define COMMANDS_TYPE           "type"
 #define COMMANDS_DATA           "data"
 
-
 #define COMMAND_TYPE_INJECTOR   "injector"
 #define COMMAND_TYPE_CONTROL    "control"
 #define COMMAND_TYPE_MONITOR    "monitor"
@@ -246,35 +240,4 @@ void set_injector_data(const char* data);
 /* Monitor */
 void handle_qmp_command(JSONMessageParser *parser, QList *tokens, void *opaque);
 
-static QemuOptsList qemu_ecs_opts = {
-    .name = ECS_OPTS_NAME,
-    .implied_opt_name = ECS_OPTS_NAME,
-    .head = QTAILQ_HEAD_INITIALIZER(qemu_ecs_opts.head),
-    .desc = {
-        {
-            .name = "host",
-            .type = QEMU_OPT_STRING,
-        },{
-            .name = "port",
-            .type = QEMU_OPT_STRING,
-        },{
-            .name = "localaddr",
-            .type = QEMU_OPT_STRING,
-        },{
-            .name = "localport",
-            .type = QEMU_OPT_STRING,
-        },{
-            .name = "to",
-            .type = QEMU_OPT_NUMBER,
-        },{
-            .name = "ipv4",
-            .type = QEMU_OPT_BOOL,
-        },{
-            .name = "ipv6",
-            .type = QEMU_OPT_BOOL,
-        },
-        { /* End of list */ }
-    },
-};
-
 #endif /* __ECS_H__ */
index 755528014a4851fc03f5c92af6b5bb364529d95b..2b65418da7816914ac0585e63deb069e4f3fedc3 100644 (file)
@@ -215,7 +215,6 @@ static void prepare_basic_features(gchar * const kernel_cmdline)
 
     maru_device_hotplug_init();
 
-    qemu_add_opts(&qemu_ecs_opts);
     start_ecs();
 
     start_sdb_noti_server(get_device_serial_number() + SDB_UDP_SENSOR_INDEX);