From: Jinhyung Choi Date: Thu, 28 May 2015 06:29:36 +0000 (+0900) Subject: ecs: changed inet_listen_opts to local listen socket X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.2~412 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=afbf4e7e7aa2f54cd9b704b654542bef08850337;p=sdk%2Femulator%2Fqemu.git ecs: changed inet_listen_opts to local listen socket Signed-off-by: Jinhyung Choi Conflicts: tizen/src/ecs/ecs.c Change-Id: I3aa3137410799343186617c7a7ef9c4fd3228b5c --- diff --git a/tizen/src/ecs/ecs.c b/tizen/src/ecs/ecs.c index b48f215769..fbebdcb023 100644 --- a/tizen/src/ecs/ecs.c +++ b/tizen/src/ecs/ecs.c @@ -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 || 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 (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); @@ -759,8 +783,6 @@ static void ecs_notify_exit(Notifier *notifier, void *data) { static Notifier ecs_exit = { .notify = ecs_notify_exit }; int start_ecs(void) { - qemu_add_opts(&qemu_ecs_opts); - qemu_thread_create(&ecs_thread_id, "ecs", ecs_initialize, NULL, QEMU_THREAD_JOINABLE); emulator_add_exit_notifier(&ecs_exit); diff --git a/tizen/src/ecs/ecs.h b/tizen/src/ecs/ecs.h index 17d1393110..882070d18a 100644 --- a/tizen/src/ecs/ecs.h +++ b/tizen/src/ecs/ecs.h @@ -41,17 +41,11 @@ #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" @@ -248,35 +242,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__ */