From 30e2a2cd75faa6f774d10757759595b8f7f70ee4 Mon Sep 17 00:00:00 2001 From: "ho.namkoong" Date: Mon, 5 Aug 2013 12:16:33 +0900 Subject: [PATCH 01/16] [Title] fix launch app script [Type] [Module] [Priority] [CQ#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] Change-Id: I99ad5fe502683980f32ebf2c3230b7529a9226f3 --- sdk_launch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk_launch b/sdk_launch index 03e8256..2166781 100755 --- a/sdk_launch +++ b/sdk_launch @@ -124,7 +124,7 @@ then else result_mode="DEBUG" fi - cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode __DLP_DEBUG_ARG__ :$port $launch_app_mode $args" + cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode __DLP_DEBUG_ARG__ :$port $launch_app_mode" # cmd="$COV_TEST_PREFIX /home/developer/sdk_tools/gdbserver/gdbserver :$port /opt/apps/$pkgid/bin/$exe" fi else @@ -132,7 +132,7 @@ else then if [ "" != "$result_mode" ] then - cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode $launch_app_mode $args" + cmd="/usr/bin/launch_app $pkgid.$exe __AUL_SDK__ $result_mode $launch_app_mode" else cmd="/usr/bin/launch_app $pkgid.$exe" fi -- 2.7.4 From 2591cfb9f817ecc9cf15269014528ea316daa0d1 Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Fri, 13 Sep 2013 18:34:01 +0900 Subject: [PATCH 02/16] cp license file to usr/share Change-Id: Ic6b96ae9425a0e1ee92e66ffc3d39f7eb22a83ee Signed-off-by: yoonki.park --- packaging/sdbd.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index c4a0f46..ce73689 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,7 +1,7 @@ Name: sdbd Summary: SDB daemon Version: 2.2.8 -Release: 0 +Release: 1 Group: TO_BE/FILLED_IN License: TO BE FILLED IN Source0: %{name}-%{version}.tar.gz @@ -27,6 +27,9 @@ make %{?jobs:-j%jobs} %install rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/share/license +cp LICENSE %{buildroot}/usr/share/license/%{name} + %make_install %post @@ -39,6 +42,7 @@ chsmack -t /home/developer %{_prefix}/sbin/sdbd %{_prefix}/sbin/sdk_launch %{_sysconfdir}/init.d/sdbd +/usr/share/license/%{name} %ifarch %{ix86} %{_sysconfdir}/rc.d/rc3.d -- 2.7.4 From 5671046492fcfaf1c287e840a80e62734f61a241 Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Mon, 30 Sep 2013 20:10:34 +0900 Subject: [PATCH 03/16] Revert "cp license file to usr/share" This reverts commit 2591cfb9f817ecc9cf15269014528ea316daa0d1. --- packaging/sdbd.spec | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index ce73689..c4a0f46 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,7 +1,7 @@ Name: sdbd Summary: SDB daemon Version: 2.2.8 -Release: 1 +Release: 0 Group: TO_BE/FILLED_IN License: TO BE FILLED IN Source0: %{name}-%{version}.tar.gz @@ -27,9 +27,6 @@ make %{?jobs:-j%jobs} %install rm -rf %{buildroot} -mkdir -p %{buildroot}/usr/share/license -cp LICENSE %{buildroot}/usr/share/license/%{name} - %make_install %post @@ -42,7 +39,6 @@ chsmack -t /home/developer %{_prefix}/sbin/sdbd %{_prefix}/sbin/sdk_launch %{_sysconfdir}/init.d/sdbd -/usr/share/license/%{name} %ifarch %{ix86} %{_sysconfdir}/rc.d/rc3.d -- 2.7.4 From 6dc46fdc6dbf4820c973e802878581065b337547 Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Thu, 10 Oct 2013 13:49:02 +0900 Subject: [PATCH 04/16] support for getting platform system information Change-Id: Ie93809dbc52b3c636a28a771fd06eb4463ee6865 Signed-off-by: kh5325.kim --- Makefile | 6 ++-- packaging/sdbd.spec | 4 ++- src/services.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 84 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 02c3437..240e1be 100644 --- a/Makefile +++ b/Makefile @@ -89,8 +89,8 @@ SDBD_SRC_FILES := \ SDBD_CFLAGS := -O2 -g -DSDB_HOST=0 -Wall -Wno-unused-parameter SDBD_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE SDBD_CFLAGS += -DHAVE_FORKEXEC -fPIE -D_DROP_PRIVILEGE -D_FILE_OFFSET_BITS=64 - -IFLAGS := -Iinclude -Isrc +SDBD_LFLAGS := -lcapi-system-info +IFLAGS := -Iinclude -Isrc -I/usr/include/system OBJDIR := bin INSTALLDIR := usr/sbin INITSCRIPTDIR := etc/init.d @@ -126,7 +126,7 @@ sdb : $(SDB_SRC_FILES) sdbd : $(SDBD_SRC_FILES) mkdir -p $(OBJDIR) - $(CC) -pthread -o $(OBJDIR)/$(MODULE) $(SDBD_CFLAGS) $(IFLAGS) $(SDBD_SRC_FILES) + $(CC) -pthread -o $(OBJDIR)/$(MODULE) $(SDBD_CFLAGS) $(IFLAGS) $(SDBD_SRC_FILES) $(SDBD_LFLAGS) install : mkdir -p $(DESTDIR)/$(INSTALLDIR) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index ce73689..44b3fe4 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -5,6 +5,8 @@ Release: 1 Group: TO_BE/FILLED_IN License: TO BE FILLED IN Source0: %{name}-%{version}.tar.gz + +BuildRequires: capi-system-info-devel Requires(post): pkgmgr Requires(post): pkgmgr-server Requires(post): wrt @@ -38,7 +40,7 @@ chsmack -t /home/developer %files %manifest sdbd.manifest -%defattr(-,root,root,-) +%defattr(-,root,root,-) %{_prefix}/sbin/sdbd %{_prefix}/sbin/sdk_launch %{_sysconfdir}/init.d/sdbd diff --git a/src/services.c b/src/services.c index dfc2735..4af9982 100644 --- a/src/services.c +++ b/src/services.c @@ -38,6 +38,9 @@ # include "sdktools.h" #endif +#include "strutils.h" +#include + typedef struct stinfo stinfo; struct stinfo { @@ -577,6 +580,79 @@ static int create_syncproc_thread() #endif +#define UNKNOWN "unknown" +#define INFOBUF_MAXLEN 64 +#define INFO_VERSION "2.2.0" +typedef struct platform_info { + + char platform_info_version[INFOBUF_MAXLEN]; + char model_name[INFOBUF_MAXLEN]; // Emulator + char platform_name[INFOBUF_MAXLEN]; // Tizen + char platform_version[INFOBUF_MAXLEN]; // 2.2.1 + char profile_name[INFOBUF_MAXLEN]; // 2.2.1 +} pinfo; + +static void get_platforminfo(int fd, void *cookie) { + pinfo sysinfo; + + char *value = NULL; + s_strncpy(sysinfo.platform_info_version, INFO_VERSION, strlen(INFO_VERSION)); + + int r = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value); + if (r != SYSTEM_INFO_ERROR_NONE) { + s_strncpy(sysinfo.model_name, UNKNOWN, strlen(UNKNOWN)); + D("fail to get system model:%d\n", errno); + } else { + s_strncpy(sysinfo.model_name, value, sizeof(sysinfo.model_name)); + D("returns model_name:%s\n", value); + if (value != NULL) { + free(value); + } + } + + r = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &value); + if (r != SYSTEM_INFO_ERROR_NONE) { + s_strncpy(sysinfo.platform_name, UNKNOWN, strlen(UNKNOWN)); + D("fail to get platform name:%d\n", errno); + } else { + s_strncpy(sysinfo.platform_name, value, sizeof(sysinfo.platform_name)); + D("returns platform_name:%s\n", value); + if (value != NULL) { + free(value); + } + + } + + // FIXME: the result is different when using SYSTEM_INFO_KEY_TIZEN_VERSION_NAME + r = system_info_get_platform_string("tizen.org/feature/platform.version", &value); + if (r != SYSTEM_INFO_ERROR_NONE) { + s_strncpy(sysinfo.platform_version, UNKNOWN, strlen(UNKNOWN)); + D("fail to get platform version:%d\n", errno); + } else { + s_strncpy(sysinfo.platform_version, value, sizeof(sysinfo.platform_version)); + D("returns platform_version:%s\n", value); + if (value != NULL) { + free(value); + } + } + + r = system_info_get_platform_string("tizen.org/feature/profile", &value); + if (r != SYSTEM_INFO_ERROR_NONE) { + s_strncpy(sysinfo.profile_name, UNKNOWN, strlen(UNKNOWN)); + D("fail to get profile name:%d\n", errno); + } else { + s_strncpy(sysinfo.profile_name, value, sizeof(sysinfo.profile_name)); + D("returns profile name:%s\n", value); + if (value != NULL) { + free(value); + } + } + + writex(fd, &sysinfo, sizeof(pinfo)); + + sdb_close(fd); +} + int service_to_fd(const char *name) { int ret = -1; @@ -664,10 +740,8 @@ int service_to_fd(const char *name) } else if(!strncmp(name, "cs:", 5)) { ret = create_service_thread(inoti_service, NULL); #endif -#if 0 - } else if(!strncmp(name, "echo:", 5)){ - ret = create_service_thread(echo_service, 0); -#endif + } else if(!strncmp(name, "sysinfo:", 8)){ + ret = create_service_thread(get_platforminfo, 0); } if (ret >= 0) { if (close_on_exec(ret) < 0) { -- 2.7.4 From 0e853f457ac65b25ee1f5beb02ed8332aac3a710 Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Thu, 10 Oct 2013 16:05:03 +0900 Subject: [PATCH 05/16] send notify to qemu when sdbd has been booted up Change-Id: Ibe67da241c97a8669de418b4db6186269a53cefa Signed-off-by: kh5325.kim --- src/sdb.c | 66 ++++++++++++++++++++++++++++++ src/sdb.h | 2 + src/transport_local.c | 109 ++++++++++++++++---------------------------------- 3 files changed, 103 insertions(+), 74 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index 563dd18..0a6d7e7 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -37,6 +37,7 @@ #include "usb_vendors.h" #endif +#define PROC_CMDLINE_PATH "/proc/cmdline" #if SDB_TRACE SDB_MUTEX_DEFINE( D_lock ); #endif @@ -335,6 +336,71 @@ static char *connection_state_name(atransport *t) } } +static int get_str_cmdline(char *src, char *dest, char str[], int str_size) { + char *s = strstr(src, dest); + if (s == NULL) { + return -1; + } + char *e = strstr(s, " "); + if (e == NULL) { + return -1; + } + + int len = e-s-strlen(dest); + + if (len >= str_size) { + D("buffer size(%d) should be bigger than %d\n", str_size, len+1); + return -1; + } + + s_strncpy(str, s + strlen(dest), len); + return len; +} + +int get_emulator_forward_port() { + char cmdline[512]; + int fd = unix_open(PROC_CMDLINE_PATH, O_RDONLY); + char *port_str = "sdb_port="; + char port_buf[7]={0,}; + int port = -1; + + if (fd < 0) { + return -1; + } + if(read_line(fd, cmdline, sizeof(cmdline))) { + D("qemu cmd: %s\n", cmdline); + if (get_str_cmdline(cmdline, port_str, port_buf, sizeof(port_buf)) < 1) { + D("could not get port from cmdline\n"); + sdb_close(fd); + return -1; + } + // FIXME: remove comma! + port_buf[strlen(port_buf)-1]='\0'; + port = strtol(port_buf, NULL, 10); + } + return port; +} + +int get_emulator_name(char str[], int str_size) { + char cmdline[512]; + int fd = unix_open(PROC_CMDLINE_PATH, O_RDONLY); + char *name_str = "vm_name="; + + if (fd < 0) { + D("fail to read /proc/cmdline\n"); + return -1; + } + if(read_line(fd, cmdline, sizeof(cmdline))) { + D("qemu cmd: %s\n", cmdline); + if (get_str_cmdline(cmdline, name_str, str, str_size) < 1) { + D("could not get emulator name from cmdline\n"); + sdb_close(fd); + return -1; + } + } + return 0; +} + void parse_banner(char *banner, atransport *t) { char *type, *product, *end; diff --git a/src/sdb.h b/src/sdb.h index 958fc40..ad6acf1 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -338,6 +338,8 @@ int should_drop_privileges(void); int set_developer_privileges(); void set_root_privileges(); +int get_emulator_forward_port(void); +int get_emulator_name(char str[], int str_size); /* packet allocator */ apacket *get_apacket(void); void put_apacket(apacket *p); diff --git a/src/transport_local.c b/src/transport_local.c index 6811f61..ee59551 100644 --- a/src/transport_local.c +++ b/src/transport_local.c @@ -270,8 +270,11 @@ static void *server_socket_thread(void * arg) alen = sizeof(addr); D("server: trying to get new connection from %d\n", port); - // im ready to accept new client! - pthread_cond_broadcast(¬i_cond); + + if (is_emulator()) { + // im ready to accept new client! + pthread_cond_broadcast(¬i_cond); + } fd = sdb_socket_accept(serverfd, &addr, &alen); if(fd >= 0) { @@ -400,27 +403,6 @@ static const char _ok_resp[] = "ok"; #endif // !SDB_HOST #endif -static int get_str_cmdline(char *src, char *dest, char str[], int str_size) { - char *s = strstr(src, dest); - if (s == NULL) { - return -1; - } - char *e = strstr(s, " "); - if (e == NULL) { - return -1; - } - - int len = e-s-strlen(dest); - - if (len >= str_size) { - printf("buffer size should be over %d\n", len+1); - return -1; - } - - s_strncpy(str, s + strlen(dest), len); - return len; -} - static int send_msg_to_localhost_from_guest(int local_port, char *request, int sock_type) { int ret, s; struct sockaddr_in server; @@ -430,6 +412,8 @@ static int send_msg_to_localhost_from_guest(int local_port, char *request, int s server.sin_port = htons(local_port); server.sin_addr.s_addr = inet_addr(QEMU_FORWARD_IP); + D("try to send notification to host(%s:%d) using %s:[%s]\n", QEMU_FORWARD_IP, local_port, (sock_type == 0) ? "tcp" : "udp", request); + if (sock_type == 0) { s = socket(AF_INET, SOCK_STREAM, 0); } else { @@ -446,67 +430,43 @@ static int send_msg_to_localhost_from_guest(int local_port, char *request, int s return -1; } if (sdb_write(s, request, strlen(request)) < 0) { - D("could not send sdbd noti request\n"); + D("could not send notification request to host\n"); + sdb_close(s); + return -1; } - sdb_close(s); + D("sent notification request to host\n"); + return 0; } static void notify_sdbd_startup() { - int ret; char buffer[512]; char request[512]; // send the request to sdbserver - char cmdline[512]; - int fd = unix_open("/proc/cmdline", O_RDONLY); - char *port_str = "sdb_port="; - char *name_str = "vm_name="; - char port[7]={0,}; char vm_name[256]={0,}; + int base_port = get_emulator_forward_port(); + int r = get_emulator_name(vm_name, sizeof vm_name); - if (fd < 0) { - D("fail to read /proc/cmdline\n"); + if (base_port < 0 || r < 0) { return; } - if(read_line(fd, cmdline, sizeof(cmdline))) { - D("qemu cmd: %s\n", cmdline); - ret = get_str_cmdline(cmdline, port_str, port, sizeof(port)); - if (ret < 1) { - D("could not get port from cmdline\n"); - sdb_close(fd); - return; - } - // FIXME: remove comma! - port[strlen(port)-1]='\0'; - - ret = get_str_cmdline(cmdline, name_str, vm_name, sizeof(vm_name)); - if (ret < 1) { - D("could not get port from cmdline\n"); - sdb_close(fd); - return; - } - int base_port = strtol(port, NULL, 10); - snprintf(request, sizeof request, "host:emulator:%d:%s",base_port + 1, vm_name); - - snprintf( buffer, sizeof buffer, "%04x%s", strlen(request), request ); - D("[%s]\n", buffer); - if (send_msg_to_localhost_from_guest(DEFAULT_SDB_PORT, buffer, 0) <0) { - D("could not send sdbd noti request\n"); - sdb_close(fd); - return; - } - // send to sensord with udp - char sensord_buf[16]; - snprintf(sensord_buf, sizeof sensord_buf, "2\n"); - if (send_msg_to_localhost_from_guest(base_port + 3, sensord_buf, 1) < 0) { - D("could not send senserd noti request\n"); - sdb_close(fd); - return; - } + + // tell qemu sdbd is just started with udp + char sensord_buf[16]; + snprintf(sensord_buf, sizeof sensord_buf, "2\n"); + if (send_msg_to_localhost_from_guest(base_port + 3, sensord_buf, 1) < 0) { + D("could not send sensord noti request\n"); + } + + // tell sdb server emulator's vms name + snprintf(request, sizeof request, "host:emulator:%d:%s",base_port + 1, vm_name); + snprintf(buffer, sizeof buffer, "%04x%s", strlen(request), request ); + + if (send_msg_to_localhost_from_guest(DEFAULT_SDB_PORT, buffer, 0) <0) { + D("could not send sdbd noti request. it might sdb server has not been started yet.\n"); } - sdb_close(fd); } void local_init(int port) @@ -548,12 +508,13 @@ void local_init(int port) * wait until server socket thread made! * get noti from server_socket_thread */ + if (is_emulator()) { + sdb_mutex_lock(®ister_noti_lock); + pthread_cond_wait(¬i_cond, ®ister_noti_lock); - sdb_mutex_lock(®ister_noti_lock); - pthread_cond_wait(¬i_cond, ®ister_noti_lock); - - notify_sdbd_startup(); - sdb_mutex_unlock(®ister_noti_lock); + notify_sdbd_startup(); + sdb_mutex_unlock(®ister_noti_lock); + } } static void remote_kick(atransport *t) -- 2.7.4 From a45ba4ef2cebc454c7d1218fd01c75f550807bfd Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Thu, 10 Oct 2013 16:36:54 +0900 Subject: [PATCH 06/16] send device name when incomming connection Change-Id: I3e8f2e3c18eeeee2008df2584538e929b0a949fd Signed-off-by: kh5325.kim --- src/sdb.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++---- src/sdb.h | 4 +++- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/sdb.c b/src/sdb.c index 0a6d7e7..aa75a82 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -29,6 +29,7 @@ #include "sysdeps.h" #include "sdb.h" +#include "strutils.h" #if !SDB_HOST #include @@ -36,7 +37,7 @@ #else #include "usb_vendors.h" #endif - +#include #define PROC_CMDLINE_PATH "/proc/cmdline" #if SDB_TRACE SDB_MUTEX_DEFINE( D_lock ); @@ -299,7 +300,7 @@ static void send_close(unsigned local, unsigned remote, atransport *t) p->msg.arg1 = remote; send_packet(p, t); } - +static int device_status = 0; // 0:online, 1: password locked later static void send_connect(atransport *t) { D("Calling send_connect \n"); @@ -307,9 +308,24 @@ static void send_connect(atransport *t) cp->msg.command = A_CNXN; cp->msg.arg0 = A_VERSION; cp->msg.arg1 = MAX_PAYLOAD; - snprintf((char*) cp->data, sizeof cp->data, "%s::", - HOST ? "host" : sdb_device_banner); + + char device_name[256]={0,}; + int r = 0; + + if (is_emulator()) { + r = get_emulator_name(device_name, sizeof device_name); + } else { + r = get_device_name(device_name, sizeof device_name); + } + if (r < 0) { + snprintf((char*) cp->data, sizeof cp->data, "%s::%s::%d", sdb_device_banner, DEFAULT_DEVICENAME, device_status); + } else { + snprintf((char*) cp->data, sizeof cp->data, "%s::%s::%d", sdb_device_banner, device_name, device_status); + } + + D("CNXN data:%s\n", (char*)cp->data); cp->msg.data_length = strlen((char*) cp->data) + 1; + send_packet(cp, t); #if SDB_HOST /* XXX why sleep here? */ @@ -401,6 +417,37 @@ int get_emulator_name(char str[], int str_size) { return 0; } +int get_device_name(char str[], int str_size) { + char *value = NULL; + int r = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value); + if (r != SYSTEM_INFO_ERROR_NONE) { + D("fail to get system model:%d\n", errno); + return -1; + } else { + s_strncpy(str, value, str_size); + D("returns model_name:%s\n", value); + if (value != NULL) { + free(value); + } + return 0; + } + /* + int fd = unix_open(USB_SERIAL_PATH, O_RDONLY); + if (fd < 0) { + D("fail to read:%s (%d)\n", USB_SERIAL_PATH, errno); + return -1; + } + + if(read_line(fd, str, str_size)) { + D("device serial name: %s\n", str); + sdb_close(fd); + return 0; + } + sdb_close(fd); + */ + return -1; +} + void parse_banner(char *banner, atransport *t) { char *type, *product, *end; diff --git a/src/sdb.h b/src/sdb.h index ad6acf1..01c8b40 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -340,6 +340,7 @@ void set_root_privileges(); int get_emulator_forward_port(void); int get_emulator_name(char str[], int str_size); +int get_device_name(char str[], int str_size); /* packet allocator */ apacket *get_apacket(void); void put_apacket(apacket *p); @@ -489,12 +490,13 @@ int sendfailmsg(int fd, const char *reason); int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s); int is_emulator(void); +#define DEFAULT_DEVICENAME "unknown" #if SDB_HOST /* tizen-specific */ #define DEVICEMAP_SEPARATOR ":" #define DEVICENAME_MAX 256 #define VMS_PATH OS_PATH_SEPARATOR_STR "vms" OS_PATH_SEPARATOR_STR // should include sysdeps.h above -#define DEFAULT_DEVICENAME "" + void register_device_name(const char *device_type, const char *device_name, int port); int get_devicename_from_shdmem(int port, char *device_name); int read_line(const int fd, char* ptr, const size_t maxlen); -- 2.7.4 From 88e59dbe2ec1f4f40b6af8e6dad150b57c7d1c83 Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Thu, 10 Oct 2013 21:32:23 +0900 Subject: [PATCH 07/16] cp sdbd.service file & clean up build script files Change-Id: Icfdd8a59092e7dd51a71ab87324a7a4f0726b4b3 Signed-off-by: kh5325.kim --- Makefile | 95 +---------------------------------------- packaging/sdbd.changes | 10 +++++ packaging/sdbd.spec | 38 ++++++++--------- packaging/sdbd_device.service | 10 +++++ packaging/sdbd_emulator.service | 15 +++++++ sdk_launch => script/sdk_launch | 0 6 files changed, 56 insertions(+), 112 deletions(-) create mode 100644 packaging/sdbd.changes create mode 100644 packaging/sdbd_device.service create mode 100644 packaging/sdbd_emulator.service rename sdk_launch => script/sdk_launch (100%) diff --git a/Makefile b/Makefile index 240e1be..dc0eb36 100644 --- a/Makefile +++ b/Makefile @@ -1,67 +1,8 @@ # # -# Makefile for sdb +# Makefile for sdbd # -# -HOST_OS := $(shell uname -s | tr A-Z a-z) - -# sdb host tool -# ========================================================= - -# Default to a virtual (sockets) usb interface -USB_SRCS := -EXTRA_SRCS := - -ifeq ($(HOST_OS),linux) - USB_SRCS := usb_linux.c - EXTRA_SRCS := get_my_path_linux.c - LOCAL_LDLIBS += -lrt -lncurses -lpthread -endif - -ifeq ($(HOST_OS),darwin) - USB_SRCS := usb_osx.c - EXTRA_SRCS := get_my_path_darwin.c - LOCAL_LDLIBS += -lpthread -framework CoreFoundation -framework IOKit -framework Carbon - SDB_EXTRA_CFLAGS := -mmacosx-version-min=10.4 -endif - -ifeq ($(HOST_OS),freebsd) - USB_SRCS := usb_libusb.c - EXTRA_SRCS := get_my_path_freebsd.c - LOCAL_LDLIBS += -lpthread -lusb -endif - - - -SDB_SRC_FILES := \ - src/sdb.c \ - src/console.c \ - src/transport.c \ - src/transport_local.c \ - src/transport_usb.c \ - src/commandline.c \ - src/sdb_client.c \ - src/sockets.c \ - src/services.c \ - src/file_sync_client.c \ - src/$(EXTRA_SRCS) \ - src/$(USB_SRCS) \ - src/utils.c \ - src/usb_vendors.c \ - src/fdevent.c \ - src/socket_inaddr_any_server.c \ - src/socket_local_client.c \ - src/socket_local_server.c \ - src/socket_loopback_client.c \ - src/socket_loopback_server.c \ - src/socket_network_client.c - -SDB_CFLAGS := -O2 -g -DSDB_HOST=1 -DSDB_HOST_ON_TARGET=1 -Wall -Wno-unused-parameter -SDB_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -SDB_CFLAGS += -DHAVE_FORKEXEC -DHAVE_TERMIO_H -DHAVE_SYMLINKS -SDB_LFLAGS := $(LOCAL_LDLIBS) - SDBD_SRC_FILES := \ src/sdb.c \ src/fdevent.c \ @@ -94,36 +35,11 @@ IFLAGS := -Iinclude -Isrc -I/usr/include/system OBJDIR := bin INSTALLDIR := usr/sbin INITSCRIPTDIR := etc/init.d -RCSCRIPTDIR := etc/rc.d/rc3.d -LAUNCH_SCRIPT := sdk_launch - -UNAME := $(shell uname -sm) -ifneq (,$(findstring 86,$(UNAME))) - HOST_ARCH := x86 -endif -TARGET_ARCH = $(HOST_ARCH) -ifeq ($(TARGET_ARCH),) - TARGET_ARCH := arm -endif - -ifeq ($(TARGET_ARCH),arm) - MODULE := sdbd - SDBD_CFLAGS += -DANDROID_GADGET=1 -else -ifeq ($(TARGET_HOST),true) - MODULE := sdb -else - MODULE := sdbd -endif -endif +MODULE := sdbd all : $(MODULE) -sdb : $(SDB_SRC_FILES) - mkdir -p $(OBJDIR) - $(CC) -pthread -o $(OBJDIR)/$(MODULE) $(SDB_CFLAGS) $(SDB_EXTRA_CFLAGS) $(SDB_LFLAGS) $(IFLAGS) $(SDB_SRC_FILES) - sdbd : $(SDBD_SRC_FILES) mkdir -p $(OBJDIR) $(CC) -pthread -o $(OBJDIR)/$(MODULE) $(SDBD_CFLAGS) $(IFLAGS) $(SDBD_SRC_FILES) $(SDBD_LFLAGS) @@ -131,15 +47,8 @@ sdbd : $(SDBD_SRC_FILES) install : mkdir -p $(DESTDIR)/$(INSTALLDIR) install $(OBJDIR)/$(MODULE) $(DESTDIR)/$(INSTALLDIR)/$(MODULE) - install $(LAUNCH_SCRIPT) $(DESTDIR)/$(INSTALLDIR)/$(LAUNCH_SCRIPT) -ifeq ($(MODULE),sdbd) mkdir -p $(DESTDIR)/$(INITSCRIPTDIR) install script/sdbd $(DESTDIR)/$(INITSCRIPTDIR)/sdbd -endif -ifeq ($(TARGET_ARCH),x86) - mkdir -p $(DESTDIR)/$(RCSCRIPTDIR) - install script/S06sdbd $(DESTDIR)/$(RCSCRIPTDIR)/S06sdbd -endif clean : rm -rf $(OBJDIR)/* diff --git a/packaging/sdbd.changes b/packaging/sdbd.changes new file mode 100644 index 0000000..89f04c3 --- /dev/null +++ b/packaging/sdbd.changes @@ -0,0 +1,10 @@ +* Wed Apr 04 2013 Ho Namkoong + - supports platform gdbserver +* Mon Dec 02 2012 Yoonki Park + - supports cs report service using inotify +* Mon Dec 02 2012 Yoonki Park + - sdb code dropped from adb (Ice Cream Samdwich 4.1.1) +* Wed Apr 18 2012 Yoonki Park + - set dir permission to 777 +* Sat Mar 31 2012 Yoonki Park + - let sshd be daemon and create sshd.pid file \ No newline at end of file diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 44b3fe4..049e4e9 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,10 +1,13 @@ Name: sdbd Summary: SDB daemon -Version: 2.2.8 -Release: 1 -Group: TO_BE/FILLED_IN -License: TO BE FILLED IN +Version: 2.2.13 +Release: 0 +License: Apache-2.0 +Summary: SDB daemon +Group: System/Utilities Source0: %{name}-%{version}.tar.gz +Source1001: sdbd_device.service +Source1002: sdbd_emulator.service BuildRequires: capi-system-info-devel Requires(post): pkgmgr @@ -17,7 +20,7 @@ Requires: debug-launchpad Requires: dbus %description -Description: SDB daemon +Description: SDB daemon. %prep @@ -32,7 +35,17 @@ rm -rf %{buildroot} mkdir -p %{buildroot}/usr/share/license cp LICENSE %{buildroot}/usr/share/license/%{name} + %make_install +mkdir -p %{buildroot}%{_libdir}/systemd/system +%if 0%{?simulator} +install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service +%else +install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service +%endif + +mkdir -p %{buildroot}%{_prefix}/sbin +install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %post chsmack -a sdbd::home /home/developer @@ -45,19 +58,6 @@ chsmack -t /home/developer %{_prefix}/sbin/sdk_launch %{_sysconfdir}/init.d/sdbd /usr/share/license/%{name} - -%ifarch %{ix86} - %{_sysconfdir}/rc.d/rc3.d -%endif +%{_libdir}/systemd/system/sdbd.service %changelog -* Wed Apr 04 2013 Ho Namkoong - - supports platform gdbserver -* Mon Dec 02 2012 Yoonki Park - - supports cs report service using inotify -* Mon Dec 02 2012 Yoonki Park - - sdb code dropped from adb (Ice Cream Samdwich 4.1.1) -* Wed Apr 18 2012 Yoonki Park - - set dir permission to 777 -* Sat Mar 31 2012 Yoonki Park - - let sshd be daemon and create sshd.pid file diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service new file mode 100644 index 0000000..0b92d85 --- /dev/null +++ b/packaging/sdbd_device.service @@ -0,0 +1,10 @@ +[Unit] +Description=sdbd +After=default.target + +[Service] +Type=forking +Environment=DISPLAY=:0 +PIDFile=/tmp/.sdbd.pid +RemainAfterExit=yes +ExecStart=/usr/sbin/sdbd diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service new file mode 100644 index 0000000..274c3e9 --- /dev/null +++ b/packaging/sdbd_emulator.service @@ -0,0 +1,15 @@ +[Unit] +Description=sdbd +Before=sensord.service + +[Service] +Type=forking +Environment=DISPLAY=:0 +PIDFile=/tmp/.sdbd.pid +RemainAfterExit=yes +ExecStartPre=/bin/bash -c "/bin/echo `/bin/sed 's/^.*sdb_port=\([^, ]*\).*$/\1/g' /proc/cmdline` > /opt/home/sdb_port.txt" +ExecStart=/usr/sbin/sdbd + +[Install] +WantedBy=emulator.target + diff --git a/sdk_launch b/script/sdk_launch similarity index 100% rename from sdk_launch rename to script/sdk_launch -- 2.7.4 From 5b89f0c278e5ab86af922b3ab807cda6d9147891 Mon Sep 17 00:00:00 2001 From: "kh5325.kim" Date: Fri, 11 Oct 2013 17:39:10 +0900 Subject: [PATCH 08/16] fixed to cp sdbd.service file to right target Change-Id: Ie0c35ac38863615a4542102810aecc496af68168 Signed-off-by: kh5325.kim --- packaging/sdbd.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 4c31af7..27e89de 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -36,9 +36,9 @@ rm -rf %{buildroot} %make_install mkdir -p %{buildroot}%{_libdir}/systemd/system %if 0%{?simulator} -install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service -%else install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service +%else +install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service %endif mkdir -p %{buildroot}%{_prefix}/sbin -- 2.7.4 From 7e3c2611d02c00fb3f74b8d00eca2aa3659b0537 Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Wed, 16 Oct 2013 15:58:45 +0900 Subject: [PATCH 09/16] remove resource leak Change-Id: I63610fd78399f58ddb7eac45d84c146f4fac7631 Signed-off-by: yoonki.park --- src/sdb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sdb.c b/src/sdb.c index aa75a82..b726574 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -394,6 +394,7 @@ int get_emulator_forward_port() { port_buf[strlen(port_buf)-1]='\0'; port = strtol(port_buf, NULL, 10); } + sdb_close(fd); return port; } @@ -414,6 +415,7 @@ int get_emulator_name(char str[], int str_size) { return -1; } } + sdb_close(fd); return 0; } -- 2.7.4 From b365f8105d0612f98d57b68f05ffab17c9c686ed Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Thu, 17 Oct 2013 13:32:21 +0900 Subject: [PATCH 10/16] verify system info pkg version dependency Change-Id: If5ea7679055f473e1d38ab14de1383354663f9c1 Signed-off-by: yoonki.park --- packaging/sdbd.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 27e89de..53c6391 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -9,7 +9,7 @@ Source0: %{name}-%{version}.tar.gz Source1001: sdbd_device.service Source1002: sdbd_emulator.service -BuildRequires: capi-system-info-devel +BuildRequires: capi-system-info-devel >= 0.2.0 Requires(post): pkgmgr Requires(post): pkgmgr-server Requires(post): wrt -- 2.7.4 From 10bfc881e596781cc128f83658b49918311bb456 Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Fri, 11 Oct 2013 23:48:06 +0900 Subject: [PATCH 11/16] make link sdbd.service file to emulator target dir Change-Id: I26a4a042b694777dde1f60f79a977ef927cd59a0 Signed-off-by: yoonki.park --- packaging/sdbd.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 53c6391..1161e9d 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,7 +1,7 @@ Name: sdbd Summary: SDB daemon Version: 2.2.13 -Release: 0 +Release: 1 License: Apache-2.0 Summary: SDB daemon Group: System/Utilities @@ -37,6 +37,8 @@ rm -rf %{buildroot} mkdir -p %{buildroot}%{_libdir}/systemd/system %if 0%{?simulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service +mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants +ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ %else install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service %endif @@ -55,5 +57,8 @@ chsmack -t /home/developer %{_prefix}/sbin/sdk_launch %{_sysconfdir}/init.d/sdbd %{_libdir}/systemd/system/sdbd.service +%if 0%{?simulator} +%{_libdir}/systemd/system/emulator.target.wants/sdbd.service +%endif %changelog -- 2.7.4 From 23acaa596302c76366e25f249e1eb9d2ea4da0d3 Mon Sep 17 00:00:00 2001 From: Junfeng Dong Date: Thu, 31 Oct 2013 11:26:31 +0800 Subject: [PATCH 12/16] Fix some runtime issue in 3.0 set manifest request domain to floor. Remove wrong run time requires. Change-Id: I8598b9320faf7890dd47d51b0b4ce00751af7b62 Signed-off-by: Junfeng Dong --- packaging/sdbd.changes | 5 ++++- packaging/sdbd.manifest | 5 +++++ packaging/sdbd.spec | 16 ++++------------ sdbd.manifest | 31 ------------------------------- 4 files changed, 13 insertions(+), 44 deletions(-) create mode 100644 packaging/sdbd.manifest delete mode 100644 sdbd.manifest diff --git a/packaging/sdbd.changes b/packaging/sdbd.changes index 89f04c3..fc078af 100644 --- a/packaging/sdbd.changes +++ b/packaging/sdbd.changes @@ -1,3 +1,6 @@ +* Thu Oct 31 2013 Junfeng Dong submit/tizen/20131011.084016@81e3d5b +- Fix some runtime issue in 3.0 + * Wed Apr 04 2013 Ho Namkoong - supports platform gdbserver * Mon Dec 02 2012 Yoonki Park @@ -7,4 +10,4 @@ * Wed Apr 18 2012 Yoonki Park - set dir permission to 777 * Sat Mar 31 2012 Yoonki Park - - let sshd be daemon and create sshd.pid file \ No newline at end of file + - let sshd be daemon and create sshd.pid file diff --git a/packaging/sdbd.manifest b/packaging/sdbd.manifest new file mode 100644 index 0000000..86dbb26 --- /dev/null +++ b/packaging/sdbd.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 1161e9d..f7381a0 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -8,15 +8,10 @@ Group: System/Utilities Source0: %{name}-%{version}.tar.gz Source1001: sdbd_device.service Source1002: sdbd_emulator.service +Source1003: %{name}.manifest BuildRequires: capi-system-info-devel >= 0.2.0 -Requires(post): pkgmgr -Requires(post): pkgmgr-server -Requires(post): wrt -Requires(post): aul -Requires: default-files-tizen Requires: sys-assert -Requires: debug-launchpad Requires: dbus %description @@ -25,15 +20,15 @@ Description: SDB daemon. %prep %setup -q +cp %{SOURCE1003} . %build make %{?jobs:-j%jobs} %install -rm -rf %{buildroot} - %make_install + mkdir -p %{buildroot}%{_libdir}/systemd/system %if 0%{?simulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service @@ -46,12 +41,9 @@ install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service mkdir -p %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ -%post -chsmack -a sdbd::home /home/developer -chsmack -t /home/developer - %files %manifest sdbd.manifest +%license LICENSE %defattr(-,root,root,-) %{_prefix}/sbin/sdbd %{_prefix}/sbin/sdk_launch diff --git a/sdbd.manifest b/sdbd.manifest deleted file mode 100644 index cc708a5..0000000 --- a/sdbd.manifest +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.7.4 From 0289ceb6950258c15f7471a2c2ae4eba667a62a0 Mon Sep 17 00:00:00 2001 From: "yoonki.park" Date: Mon, 4 Nov 2013 14:36:46 +0900 Subject: [PATCH 13/16] version up to 3.0.0 Change-Id: Ie42c8f10e84d3ce3603306620459c1a600358e58 Signed-off-by: yoonki.park --- packaging/sdbd.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index f7381a0..c6a8de4 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -1,7 +1,7 @@ Name: sdbd Summary: SDB daemon -Version: 2.2.13 -Release: 1 +Version: 3.0.0 +Release: 0 License: Apache-2.0 Summary: SDB daemon Group: System/Utilities -- 2.7.4 From da60ed8dd45cc54f72e35688d0f016062ed4976e Mon Sep 17 00:00:00 2001 From: =?utf8?q?K=C3=A9vin=20THIERRY?= Date: Fri, 10 Jan 2014 16:10:21 +0100 Subject: [PATCH 14/16] Start sdbd at boot time MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Bug-Tizen: TIVI-2400 Change-Id: Idc9c4616ea36f0f51330626d60ecfd562d4edd16 Signed-off-by: Kévin THIERRY --- packaging/sdbd.changes | 3 +++ packaging/sdbd.spec | 10 +++++++--- packaging/sdbd_device.service | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packaging/sdbd.changes b/packaging/sdbd.changes index fc078af..e1c0619 100644 --- a/packaging/sdbd.changes +++ b/packaging/sdbd.changes @@ -1,3 +1,6 @@ +* Fri Jan 10 2014 Kévin THIERRY accepted/tizen/20131112.015040@29f2623 +- Start sdbd at boot time + * Thu Oct 31 2013 Junfeng Dong submit/tizen/20131011.084016@81e3d5b - Fix some runtime issue in 3.0 diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index c6a8de4..1c65cb3 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -29,16 +29,18 @@ make %{?jobs:-j%jobs} %install %make_install -mkdir -p %{buildroot}%{_libdir}/systemd/system +install -d %{buildroot}%{_libdir}/systemd/system %if 0%{?simulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service -mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants +install -d %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ %else install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service +install -d %{buildroot}/%{_libdir}/systemd/system/multi-user.target.wants/ +ln -s %{_libdir}/systemd/system/%{name}.service %{buildroot}/%{_libdir}/systemd/system/multi-user.target.wants/ %endif -mkdir -p %{buildroot}%{_prefix}/sbin +install -d %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %files @@ -51,6 +53,8 @@ install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %{_libdir}/systemd/system/sdbd.service %if 0%{?simulator} %{_libdir}/systemd/system/emulator.target.wants/sdbd.service +%else +%{_libdir}/systemd/system/multi-user.target.wants/%{name}.service %endif %changelog diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 0b92d85..295f594 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -1,6 +1,6 @@ [Unit] Description=sdbd -After=default.target +After=syslog.target [Service] Type=forking @@ -8,3 +8,6 @@ Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes ExecStart=/usr/sbin/sdbd + +[Install] +WantedBy=multi-user.target -- 2.7.4 From 48009389842b30fed3707b0173068d20cb62df03 Mon Sep 17 00:00:00 2001 From: =?utf8?q?K=C3=A9vin=20THIERRY?= Date: Mon, 13 Jan 2014 04:27:48 -0800 Subject: [PATCH 15/16] Revert "Start sdbd at boot time" MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This reverts commit da60ed8dd45cc54f72e35688d0f016062ed4976e. Change-Id: I864d0df0e78bbcfddf5f19a9013d7e40549598e8 Signed-off-by: Kévin THIERRY --- packaging/sdbd.changes | 3 --- packaging/sdbd.spec | 10 +++------- packaging/sdbd_device.service | 5 +---- 3 files changed, 4 insertions(+), 14 deletions(-) diff --git a/packaging/sdbd.changes b/packaging/sdbd.changes index e1c0619..fc078af 100644 --- a/packaging/sdbd.changes +++ b/packaging/sdbd.changes @@ -1,6 +1,3 @@ -* Fri Jan 10 2014 Kévin THIERRY accepted/tizen/20131112.015040@29f2623 -- Start sdbd at boot time - * Thu Oct 31 2013 Junfeng Dong submit/tizen/20131011.084016@81e3d5b - Fix some runtime issue in 3.0 diff --git a/packaging/sdbd.spec b/packaging/sdbd.spec index 1c65cb3..c6a8de4 100644 --- a/packaging/sdbd.spec +++ b/packaging/sdbd.spec @@ -29,18 +29,16 @@ make %{?jobs:-j%jobs} %install %make_install -install -d %{buildroot}%{_libdir}/systemd/system +mkdir -p %{buildroot}%{_libdir}/systemd/system %if 0%{?simulator} install -m 0644 %SOURCE1002 %{buildroot}%{_libdir}/systemd/system/sdbd.service -install -d %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants +mkdir -p %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants ln -s %{_libdir}/systemd/system/sdbd.service %{buildroot}/%{_libdir}/systemd/system/emulator.target.wants/ %else install -m 0644 %SOURCE1001 %{buildroot}%{_libdir}/systemd/system/sdbd.service -install -d %{buildroot}/%{_libdir}/systemd/system/multi-user.target.wants/ -ln -s %{_libdir}/systemd/system/%{name}.service %{buildroot}/%{_libdir}/systemd/system/multi-user.target.wants/ %endif -install -d %{buildroot}%{_prefix}/sbin +mkdir -p %{buildroot}%{_prefix}/sbin install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %files @@ -53,8 +51,6 @@ install -m 755 script/sdk_launch %{buildroot}%{_prefix}/sbin/ %{_libdir}/systemd/system/sdbd.service %if 0%{?simulator} %{_libdir}/systemd/system/emulator.target.wants/sdbd.service -%else -%{_libdir}/systemd/system/multi-user.target.wants/%{name}.service %endif %changelog diff --git a/packaging/sdbd_device.service b/packaging/sdbd_device.service index 295f594..0b92d85 100644 --- a/packaging/sdbd_device.service +++ b/packaging/sdbd_device.service @@ -1,6 +1,6 @@ [Unit] Description=sdbd -After=syslog.target +After=default.target [Service] Type=forking @@ -8,6 +8,3 @@ Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes ExecStart=/usr/sbin/sdbd - -[Install] -WantedBy=multi-user.target -- 2.7.4 From 89f1249fe3462ce00f3aaa01494e4a8ba4bfade8 Mon Sep 17 00:00:00 2001 From: Aleksander Zdyb Date: Fri, 31 Jan 2014 12:00:45 +0100 Subject: [PATCH 16/16] Parse commandline of sdbd and make use of values provided Settings such as emulator name or ports are no longer parsed from /proc/cmdline. Individual ports can be now explicitly specified and not determined by some hardcoded arithmetical logic. An additional advantage is possibility to launch sdbd in tcp mode on specified IP and port. Moreover running on emulator or not is not determined at runtime, but rather passed as an option. Available options are: * -e, --emulator=HOST:PORT emulator's name and forward port * -c, --connect-to=HOST:PORT hostname or IP and port of sdb listening on host (for notification) * -s, --sensors=HOST:PORT hostname or IP and port of sensors daemon * -l, --listen-port=PORT port on which sdbd shall be listening on Some functions are rewritten to make use of commandline args: * is_emulator(), * get_emulator_forward_port(), * get_emulator_name(). send_msg_to_localhost_from_guest() is more generic now -- accepts hostname. Change-Id: I498ce3688019418548dc94c55c4ea8144be8687a Signed-off-by: Aleksander Zdyb --- Makefile | 3 +- packaging/sdbd_emulator.service | 4 +- src/commandline_sdbd.c | 142 ++++++++++++++++++++++++++ src/commandline_sdbd.h | 98 ++++++++++++++++++ src/sdb.c | 63 +++++------- src/sdb.h | 9 ++ src/transport_local.c | 108 ++++++++++++++------ test/test_commandline_sdbd.c | 216 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 571 insertions(+), 72 deletions(-) create mode 100644 src/commandline_sdbd.c create mode 100644 src/commandline_sdbd.h create mode 100644 test/test_commandline_sdbd.c diff --git a/Makefile b/Makefile index dc0eb36..6fef698 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,8 @@ SDBD_SRC_FILES := \ src/strutils.c \ src/libsmack.c \ src/init.c \ - src/fileutils.c + src/fileutils.c \ + src/commandline_sdbd.c SDBD_CFLAGS := -O2 -g -DSDB_HOST=0 -Wall -Wno-unused-parameter SDBD_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE diff --git a/packaging/sdbd_emulator.service b/packaging/sdbd_emulator.service index 274c3e9..3bcbcf1 100644 --- a/packaging/sdbd_emulator.service +++ b/packaging/sdbd_emulator.service @@ -7,9 +7,7 @@ Type=forking Environment=DISPLAY=:0 PIDFile=/tmp/.sdbd.pid RemainAfterExit=yes -ExecStartPre=/bin/bash -c "/bin/echo `/bin/sed 's/^.*sdb_port=\([^, ]*\).*$/\1/g' /proc/cmdline` > /opt/home/sdb_port.txt" -ExecStart=/usr/sbin/sdbd +ExecStart=/bin/sh -c "/usr/sbin/sdbd `/usr/bin/awk '{match($0, /sdb_port=([0-9]+)/,port_match); match($0, /vm_name=([^, ]*)/,vm_match); print \"--emulator=\" vm_match[1] \":\" port_match[1] \" --connect-to=10.0.2.2:26099\" \" --sensors=10.0.2.2:\"port_match[1]+3 \" --listen-port=\"port_match[1]+1 }' /proc/cmdline`" [Install] WantedBy=emulator.target - diff --git a/src/commandline_sdbd.c b/src/commandline_sdbd.c new file mode 100644 index 0000000..ccf75f2 --- /dev/null +++ b/src/commandline_sdbd.c @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "commandline_sdbd.h" +#include "sdb.h" + +#include +#include +#include + + +/*! + * @fn int split_host_port(const char *optarg, char **host, int *port) + * @brief Splits string of form \c "localhost:22" into \c host (string) + * and \c port (int) parts. + * + * @param optarg optarg from getopt + * @param host Where to put host part string + * @param port Where to put port part int + * + * @returns \ref SDBD_COMMANDLINE_SUCCESS on success + * or \ref SDBD_COMMANDLINE_FAILURE otherwise + */ +int split_host_port(const char *optarg, char **host, int *port); + +int parse_sdbd_commandline(SdbdCommandlineArgs *sdbd_args, int argc, char *argv[]) { + int split_retval; + + int opt; + int long_index = 0; + + static struct option long_options[] = { + { ARG_EMULATOR_VM_NAME, required_argument, NULL, ARG_S_EMULATOR_VM_NAME }, + { ARG_SENSORS, required_argument, NULL, ARG_S_SENSORS }, + { ARG_SDB, required_argument, NULL, ARG_S_SDB }, + { ARG_SDBD_LISTEN_PORT, required_argument, NULL, ARG_S_SDBD_LISTEN_PORT }, + { NULL, 0, NULL, 0 } + }; + + optind = 1; /* the index of the next element to be processed in argv */ + + while ((opt = getopt_long(argc, argv, "", long_options, &long_index)) != -1) { + switch (opt) { + case ARG_S_EMULATOR_VM_NAME: + split_retval = split_host_port(optarg, + &sdbd_args->emulator.host, + &sdbd_args->emulator.port); + if (split_retval != SDBD_COMMANDLINE_SUCCESS) { + return split_retval; + } + break; + case ARG_S_SENSORS: + split_retval = split_host_port(optarg, + &sdbd_args->sensors.host, + &sdbd_args->sensors.port); + if (split_retval != SDBD_COMMANDLINE_SUCCESS) { + return split_retval; + } + break; + case ARG_S_SDB: + split_retval = split_host_port(optarg, + &sdbd_args->sdb.host, + &sdbd_args->sdb.port); + if (split_retval != SDBD_COMMANDLINE_SUCCESS) { + return split_retval; + } + break; + case ARG_S_SDBD_LISTEN_PORT: + if (sscanf(optarg, "%d", &sdbd_args->sdbd_port) < 1) { + return SDBD_COMMANDLINE_FAILURE; + } + break; + case 1: + return SDBD_COMMANDLINE_FAILURE_UNKNOWN_OPT; + case '?': + return SDBD_COMMANDLINE_FAILURE_UNKNOWN_OPT; + default: + return SDBD_COMMANDLINE_FAILURE; + } + } + + return SDBD_COMMANDLINE_SUCCESS; +} + + +void apply_sdbd_commandline_defaults(SdbdCommandlineArgs *sdbd_args) { + sdbd_args->sensors.host = strdup(QEMU_FORWARD_IP); + sdbd_args->sensors.port = DEFAULT_SENSORS_LOCAL_TRANSPORT_PORT; + + sdbd_args->sdb.host = strdup(QEMU_FORWARD_IP); + sdbd_args->sdb.port = DEFAULT_SDB_PORT; + + sdbd_args->sdbd_port = DEFAULT_SDB_LOCAL_TRANSPORT_PORT; +} + + +int split_host_port(const char *optarg, char **host, int *port) { + const char *colon = strchr(optarg, ':'); + char *old_val = NULL; + + if (colon) { + old_val = *host; + *host = strndup(optarg, colon - optarg); + if (sscanf(colon + 1, "%d", port) < 1) { + return SDBD_COMMANDLINE_FAILURE; + } + } else { + return SDBD_COMMANDLINE_FAILURE; + } + + if (old_val) { + free(old_val); + } + return SDBD_COMMANDLINE_SUCCESS; +} + + +void clear_sdbd_commandline_args(SdbdCommandlineArgs *sdbd_args) { + free(sdbd_args->emulator.host); + sdbd_args->emulator.host = NULL; + + free(sdbd_args->sdb.host); + sdbd_args->sdb.host = NULL; + + free(sdbd_args->sensors.host); + sdbd_args->sensors.host = NULL; + + memset(sdbd_args, 0, sizeof(SdbdCommandlineArgs)); +} diff --git a/src/commandline_sdbd.h b/src/commandline_sdbd.h new file mode 100644 index 0000000..9b070ad --- /dev/null +++ b/src/commandline_sdbd.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COMMANDLINE_SDBD_H +#define COMMANDLINE_SDBD_H + +#define ARG_EMULATOR_VM_NAME "emulator" +#define ARG_S_EMULATOR_VM_NAME 'e' + +#define ARG_SDBD_LISTEN_PORT "listen-port" +#define ARG_S_SDBD_LISTEN_PORT 'l' + +#define ARG_SDB "connect-to" +#define ARG_S_SDB 'c' + +#define ARG_SENSORS "sensors" +#define ARG_S_SENSORS 's' + +#define SDBD_COMMANDLINE_SUCCESS 0 ///< Success +#define SDBD_COMMANDLINE_FAILURE -1 ///< Generic failure +#define SDBD_COMMANDLINE_FAILURE_UNKNOWN_OPT -2 ///< Unknown option + +/*! + * @struct HostPort + * @brief A simple host:port tuple + */ +typedef struct { + char *host; + int port; +} HostPort; + +/*! + * @struct SdbdCommandlineArgs + * @brief Contains all values, which are read from commandline. + */ +typedef struct { + HostPort emulator; ///< emulator name and forward port + HostPort sdb; ///< sdb address + HostPort sensors; ///< sensors address + int sdbd_port; ///< Port to listen on in tcp mode +} SdbdCommandlineArgs; + + +/*! + * @fn int parse_sdbd_commandline(SdbdCommandlineArgs *sdbd_args, int argc, char *argv[]) + * @brief Parses commandline and stores result in sdbd_args. + * + * @note \c argc and \c argv must be the ones passed to main() function, + * e.g. have program name as the first value. + * + * @param sdbd_args SdbdCommandlineArgs where arguments shall be put + * @param argc Count of arguments passed to the program (from main()) + * @param argv Array of pointers to the strings, which are program arguments (from main()) + * + * @returns \ref SDBD_COMMANDLINE_SUCCESS on success. On failure one of: + * - \ref SDBD_COMMANDLINE_FAILURE + * - \ref SDBD_COMMANDLINE_FAILURE_UNKNOWN_OPT + */ +int parse_sdbd_commandline(SdbdCommandlineArgs *sdbd_args, int argc, char **argv); + + +/*! + * @fn void apply_sdbd_commandline_defaults(SdbdCommandlineArgs *sdbd_args) + * @brief Applies default values to \c sdbd_args. + * + * @param sdbd_args SdbdCommandlineArgs where values shall be put + * + * @note It won't free old values. + * @see \ref clear_sdbd_commandline_args + */ +void apply_sdbd_commandline_defaults(SdbdCommandlineArgs *sdbd_args); + + +/*! + * @fn void clear_sdbd_commandline_args(SdbdCommandlineArgs *sdbd_args) + * @brief Frees and clears \c sdbd_args 's members. + * + * @param sdbd_args SdbdCommandlineArgs to be cleared + * + * @note This function will generate segmentation fault, + * if string pointers are not allocated and not NULL-ed. + */ +void clear_sdbd_commandline_args(SdbdCommandlineArgs *sdbd_args); + +#endif /* COMMANDLINE_SDBD_H */ diff --git a/src/sdb.c b/src/sdb.c index b726574..42383d0 100644 --- a/src/sdb.c +++ b/src/sdb.c @@ -26,10 +26,15 @@ #include #include #include +#include + #include "sysdeps.h" #include "sdb.h" #include "strutils.h" +#if !SDB_HOST +#include "commandline_sdbd.h" +#endif #if !SDB_HOST #include @@ -45,12 +50,16 @@ SDB_MUTEX_DEFINE( D_lock ); int HOST = 0; +#if !SDB_HOST +SdbdCommandlineArgs sdbd_commandline_args; +#endif + int is_emulator(void) { - if (access(USB_NODE_FILE, F_OK) == 0) { - return 0; - } else { - return 1; - } +#if SDB_HOST + return 0; +#else + return sdbd_commandline_args.emulator.host != NULL; +#endif } void handle_sig_term(int sig) { @@ -374,48 +383,23 @@ static int get_str_cmdline(char *src, char *dest, char str[], int str_size) { } int get_emulator_forward_port() { - char cmdline[512]; - int fd = unix_open(PROC_CMDLINE_PATH, O_RDONLY); - char *port_str = "sdb_port="; - char port_buf[7]={0,}; - int port = -1; + SdbdCommandlineArgs *sdbd_args = &sdbd_commandline_args; /* alias */ - if (fd < 0) { + if (sdbd_args->emulator.host == NULL) { return -1; } - if(read_line(fd, cmdline, sizeof(cmdline))) { - D("qemu cmd: %s\n", cmdline); - if (get_str_cmdline(cmdline, port_str, port_buf, sizeof(port_buf)) < 1) { - D("could not get port from cmdline\n"); - sdb_close(fd); - return -1; - } - // FIXME: remove comma! - port_buf[strlen(port_buf)-1]='\0'; - port = strtol(port_buf, NULL, 10); - } - sdb_close(fd); - return port; + + return sdbd_args->emulator.port; } int get_emulator_name(char str[], int str_size) { - char cmdline[512]; - int fd = unix_open(PROC_CMDLINE_PATH, O_RDONLY); - char *name_str = "vm_name="; + SdbdCommandlineArgs *sdbd_args = &sdbd_commandline_args; /* alias */ - if (fd < 0) { - D("fail to read /proc/cmdline\n"); + if (sdbd_args->emulator.host == NULL) { return -1; } - if(read_line(fd, cmdline, sizeof(cmdline))) { - D("qemu cmd: %s\n", cmdline); - if (get_str_cmdline(cmdline, name_str, str, str_size) < 1) { - D("could not get emulator name from cmdline\n"); - sdb_close(fd); - return -1; - } - } - sdb_close(fd); + + s_strncpy(str, sdbd_args->emulator.host, str_size); return 0; } @@ -812,6 +796,7 @@ static BOOL WINAPI ctrlc_handler(DWORD type) static void sdb_cleanup(void) { + clear_sdbd_commandline_args(&sdbd_commandline_args); usb_cleanup(); // if(required_pid > 0) { // kill(required_pid, SIGKILL); @@ -1628,6 +1613,8 @@ int main(int argc, char **argv) //sdbd will never die on emulator! signal(SIGTERM, handle_sig_term); /* tizen specific */ + apply_sdbd_commandline_defaults(&sdbd_commandline_args); + parse_sdbd_commandline(&sdbd_commandline_args, argc, argv); return sdb_main(0, DEFAULT_SDB_PORT); #endif } diff --git a/src/sdb.h b/src/sdb.h index 01c8b40..e8bb48c 100644 --- a/src/sdb.h +++ b/src/sdb.h @@ -18,8 +18,13 @@ #define __SDB_H #include +#include #include "transport.h" /* readx(), writex() */ +#include "fdevent.h" +#if !SDB_HOST +#include "commandline_sdbd.h" +#endif #define MAX_PAYLOAD 4096 @@ -444,6 +449,7 @@ void sdb_qemu_trace(const char* fmt, ...); # define QEMU_FORWARD_IP "10.0.2.2" #define DEFAULT_SDB_LOCAL_TRANSPORT_PORT 26101 /* tizen specific */ +#define DEFAULT_SENSORS_LOCAL_TRANSPORT_PORT 26103 /* tizen specific */ #define SDB_CLASS 0xff #define SDB_SUBCLASS 0x20 //0x42 /* tizen specific */ @@ -483,6 +489,9 @@ int connection_state(atransport *t); extern int HOST; extern int SHELL_EXIT_NOTIFY_FD; +#if !SDB_HOST +extern SdbdCommandlineArgs sdbd_commandline_args; +#endif #define CHUNK_SIZE (64*1024) diff --git a/src/transport_local.c b/src/transport_local.c index ee59551..743ef2d 100644 --- a/src/transport_local.c +++ b/src/transport_local.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "sysdeps.h" #include @@ -32,6 +33,9 @@ #define TRACE_TAG TRACE_TRANSPORT #include "sdb.h" #include "strutils.h" +#if !SDB_HOST +#include "commandline_sdbd.h" +#endif #ifdef HAVE_BIG_ENDIAN #define H4(x) (((x) & 0xFF000000) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | (((x) & 0x000000FF) << 24) @@ -403,38 +407,79 @@ static const char _ok_resp[] = "ok"; #endif // !SDB_HOST #endif -static int send_msg_to_localhost_from_guest(int local_port, char *request, int sock_type) { - int ret, s; - struct sockaddr_in server; +/*! + * static int send_msg_to_host_from_guest(const char *hostname, int host_port, char *request, int sock_type) + * @brief Sends \c request to host using specified protocol + * + * @param hostname Hostname -- could be domain name or IP + * @param host_port Host port + * @param request Message to be sent to host + * @param protocol IP protocol to be used: IPPROTO_TCP or IPPROTO_UDP + * + * @returns 0 on success, -1 otherwise + * + * @note SOCK_STREAM will be used for IPPROTO_TCP as socket type + * and SOCK_DGRAM for IPPROTO_UDP + */ +static int send_msg_to_host_from_guest(const char *hostname, int host_port, char *request, int protocol) { + int sock = -1; + char port[32]; /* string decimal representation for getaddrinfo */ + struct addrinfo hints = {0}; + struct addrinfo *addresses, *curr_addr; + int getaddr_ret; + const char *protocol_name = "unknown"; /* for debug message */ + + switch(protocol) { + case IPPROTO_TCP: + protocol_name = "tcp"; + hints.ai_socktype = SOCK_STREAM; + break; + case IPPROTO_UDP: + protocol_name = "udp"; + hints.ai_socktype = SOCK_DGRAM; + break; + default: + D("unsupported protocol: %d", protocol); + return -1; + } - memset( &server, 0, sizeof(server) ); - server.sin_family = AF_INET; - server.sin_port = htons(local_port); - server.sin_addr.s_addr = inet_addr(QEMU_FORWARD_IP); + D("try to send notification to host(%s:%d) using %s:[%s]\n", hostname, host_port, protocol_name, request); - D("try to send notification to host(%s:%d) using %s:[%s]\n", QEMU_FORWARD_IP, local_port, (sock_type == 0) ? "tcp" : "udp", request); + hints.ai_family = AF_INET; - if (sock_type == 0) { - s = socket(AF_INET, SOCK_STREAM, 0); - } else { - s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - } - if (s < 0) { - D("could not create socket\n"); + sprintf(port, "%d", host_port); + getaddr_ret = getaddrinfo(hostname, port, &hints, &addresses); + + if (getaddr_ret != 0) { + D("could not resolve %s\n", hostname); return -1; } - ret = connect(s, (struct sockaddr*) &server, sizeof(server)); - if (ret < 0) { + + for(curr_addr = addresses; curr_addr != NULL; curr_addr = curr_addr->ai_next) { + sock = socket(curr_addr->ai_family, curr_addr->ai_socktype, curr_addr->ai_protocol); + if (sock == -1) + continue; + + if (connect(sock, curr_addr->ai_addr, curr_addr->ai_addrlen) != -1) + break; /* Success */ + + sdb_close(sock); + } + + if(curr_addr == NULL) { /* No address succeeded */ + freeaddrinfo(addresses); D("could not connect to server\n"); - sdb_close(s); return -1; } - if (sdb_write(s, request, strlen(request)) < 0) { + + freeaddrinfo(addresses); + + if (sdb_write(sock, request, strlen(request)) < 0) { D("could not send notification request to host\n"); - sdb_close(s); + sdb_close(sock); return -1; } - sdb_close(s); + sdb_close(sock); D("sent notification request to host\n"); return 0; @@ -444,27 +489,30 @@ static void notify_sdbd_startup() { char buffer[512]; char request[512]; + SdbdCommandlineArgs *sdbd_args = &sdbd_commandline_args; /* alias */ + // send the request to sdbserver - char vm_name[256]={0,}; - int base_port = get_emulator_forward_port(); - int r = get_emulator_name(vm_name, sizeof vm_name); + const char *vm_name = sdbd_args->emulator.host; + int sdbd_port = sdbd_args->sdbd_port; + int sensors_port = sdbd_args->sensors.port; + - if (base_port < 0 || r < 0) { + if (sdbd_port <= 0 || vm_name == NULL) { return; } // tell qemu sdbd is just started with udp char sensord_buf[16]; snprintf(sensord_buf, sizeof sensord_buf, "2\n"); - if (send_msg_to_localhost_from_guest(base_port + 3, sensord_buf, 1) < 0) { + if (send_msg_to_host_from_guest(sdbd_args->sensors.host, sensors_port, sensord_buf, IPPROTO_UDP) < 0) { D("could not send sensord noti request\n"); } - // tell sdb server emulator's vms name - snprintf(request, sizeof request, "host:emulator:%d:%s",base_port + 1, vm_name); - snprintf(buffer, sizeof buffer, "%04x%s", strlen(request), request ); + // tell sdb server emulator's vms name and forward port + snprintf(request, sizeof request, "host:emulator:%d:%s", sdbd_port, vm_name); + snprintf(buffer, sizeof buffer, "%04x%s", strlen(request), request); - if (send_msg_to_localhost_from_guest(DEFAULT_SDB_PORT, buffer, 0) <0) { + if (send_msg_to_host_from_guest(sdbd_args->sdb.host, sdbd_args->sdb.port, buffer, IPPROTO_TCP) < 0) { D("could not send sdbd noti request. it might sdb server has not been started yet.\n"); } } diff --git a/test/test_commandline_sdbd.c b/test/test_commandline_sdbd.c new file mode 100644 index 0000000..8d332f5 --- /dev/null +++ b/test/test_commandline_sdbd.c @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "commandline_sdbd.h" +#include "sdb.h" + +#include +#include +#include + +#include + +/*! + * @define print_nullable(s) + * Takes string (const char *) and returns it or "(null)" literal + * in case \c s is NULL. + */ +#define print_nullable(s) \ + (((s) == NULL) ? "(null)" : (s)) + + +/*! + * @define ck_hostport(hp, h, p) + * Check if HostPort contains given host and port + * + * Host strings are equal if both point to the same address (including NULL) + * or, provided none of them is NULL, if strcmp() == 0. + * + * @param hp \ref HostPort to be checked (const HostPort *) + * @param h hostname (const char *) to be checked against + * @param p port (\c int) to be checked against + */ +#define _ck_hostport(hp, h, p) \ + ( (((hp)->host == (h)) \ + || (((hp)->host) && (h) && (strcmp((hp)->host, (h)) == 0))) \ + && (hp)->port == (p) ) + + +/*! + * @define ck_assert_hostport_eq(hp,h,p) + * Makes assertion against HostPort containing given host and port + * + * @param hp \ref HostPort to be checked (const HostPort *) + * @param h hostname (const char *) to be checked against + * @param p port (\c int) to be checked against + * + * @see ck_hostport + */ +#define ck_assert_hostport_eq(hp,h,p) \ + (fail_unless(_ck_hostport(hp,h,p), "Assertion failed (%s,%d) != (%s, %d)", \ + print_nullable((hp)->host), (hp)->port, print_nullable(h), (p))) + + +void setup(void) { + +} + +void teardown(void) { + +} + + +START_TEST(test_ok) { + char *argv[] = { + "./test", + "--emulator=tizen:101", + "--listen-port=101", + "--sensors=localhost:103", + "--connect-to=localhost:99" + }; + + SdbdCommandlineArgs sdbd_args = {0}; + + apply_sdbd_commandline_defaults(&sdbd_args); + int parse_res = parse_sdbd_commandline(&sdbd_args, 5, argv); + + if (parse_res != SDBD_COMMANDLINE_SUCCESS) { + ck_abort_msg("parsing commandline failed"); + return; + } + + ck_assert_hostport_eq(&sdbd_args.emulator, "tizen", 101); + ck_assert_hostport_eq(&sdbd_args.sensors, "localhost", 103); + ck_assert_hostport_eq(&sdbd_args.sdb, "localhost", 99); + ck_assert_int_eq(sdbd_args.sdbd_port, 101); + +} END_TEST + + +START_TEST(test_empty) { + char *argv[] = { + "./test" + }; + + SdbdCommandlineArgs sdbd_args = {0}; + + int parse_res = parse_sdbd_commandline(&sdbd_args, 1, argv); + + if (parse_res != SDBD_COMMANDLINE_SUCCESS) { + ck_abort_msg("parsing commandline failed"); + return; + } + + /* Now check if sdbd_commandline_args was not tainted */ + SdbdCommandlineArgs zero_args; + memset(&zero_args, 0, sizeof(SdbdCommandlineArgs)); + if (memcmp(&sdbd_args, &zero_args, sizeof(SdbdCommandlineArgs)) != 0) { + ck_abort_msg("SdbdCommandlineArgs is tainted"); + } + +} END_TEST + + +START_TEST(test_unknown) { + char *argv[] = { + "./test", + "--emulator=tizen:26101", + "--unknown=true" + }; + + SdbdCommandlineArgs sdbd_args = {0}; + + int parse_res = parse_sdbd_commandline(&sdbd_args, 3, argv); + + if (parse_res != SDBD_COMMANDLINE_FAILURE_UNKNOWN_OPT) { + ck_abort_msg("parsing commandline failed"); + return; + } + +} END_TEST + + +START_TEST(test_clear_args) { + SdbdCommandlineArgs sdbd_args = {0}; + + sdbd_args.emulator.host = strdup("emul_host"); + sdbd_args.emulator.port = 123456; + sdbd_args.sdb.host = strdup("sdb_host"); + sdbd_args.sdb.port = 623451; + sdbd_args.sensors.host = strdup("sdb_host"); + sdbd_args.sensors.port = 634512; + sdbd_args.sdbd_port = 543216; + + clear_sdbd_commandline_args(&sdbd_args); + + ck_assert_hostport_eq(&sdbd_args.emulator, NULL, 0); + ck_assert_hostport_eq(&sdbd_args.sensors, NULL, 0); + ck_assert_hostport_eq(&sdbd_args.sdb, NULL, 0); + ck_assert_int_eq(sdbd_args.sdbd_port, 0); +} END_TEST + + +START_TEST(test_double_clear) { + SdbdCommandlineArgs sdbd_args = {0}; + clear_sdbd_commandline_args(&sdbd_args); +} END_TEST + + +START_TEST(test_default_args) { + SdbdCommandlineArgs sdbd_args = {0}; + + apply_sdbd_commandline_defaults(&sdbd_args); + + ck_assert_hostport_eq(&sdbd_args.emulator, NULL, 0); + ck_assert_hostport_eq(&sdbd_args.sensors, QEMU_FORWARD_IP, DEFAULT_SENSORS_LOCAL_TRANSPORT_PORT); + ck_assert_hostport_eq(&sdbd_args.sdb, QEMU_FORWARD_IP, DEFAULT_SDB_PORT); + ck_assert_int_eq(sdbd_args.sdbd_port, DEFAULT_SDB_LOCAL_TRANSPORT_PORT); +} END_TEST + + +Suite *sdbd_commandline_suite (void) { + Suite *s = suite_create ("sdbd commandline"); + + TCase *tc_core = tcase_create ("Core"); + tcase_add_checked_fixture(tc_core, setup, teardown); + tcase_add_test (tc_core, test_ok); + tcase_add_test (tc_core, test_empty); + tcase_add_test (tc_core, test_unknown); + tcase_add_test (tc_core, test_clear_args); + tcase_add_test (tc_core, test_double_clear); + tcase_add_test (tc_core, test_default_args); + suite_add_tcase (s, tc_core); + + return s; +} + + +int run_tests(int print_output) { + int number_failed; + Suite *s = sdbd_commandline_suite(); + SRunner *sr = srunner_create (s); + srunner_run_all (sr, print_output); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} + + +#ifndef COMMANDLINE_SDBD_TESTS_NO_MAIN +int main(int argc, char *argv[]) { + return run_tests(CK_NORMAL); +} +#endif /* COMMANDLINE_SDBD_TESTS_NO_MAIN */ -- 2.7.4