From 3a6c8b019e3ccf8a9ef14087dbe8a1f40e7f60df Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Tue, 14 Aug 2018 17:50:12 +0200 Subject: [PATCH] daemon/socket_connection: guard unix socket code by HAVE_UNIX_SOCKETS --- platform/daemon/src/socket_connection.c | 108 ++++++++++++------------ 1 file changed, 56 insertions(+), 52 deletions(-) diff --git a/platform/daemon/src/socket_connection.c b/platform/daemon/src/socket_connection.c index e9149d1f0..6b91f565f 100644 --- a/platform/daemon/src/socket_connection.c +++ b/platform/daemon/src/socket_connection.c @@ -447,58 +447,6 @@ int socket_connection_create_launchd(void){ } #endif -/** - * create socket data_source for unix domain socket - */ -int socket_connection_create_unix(char *path){ - - // create btstack_data_source_t - btstack_data_source_t *ds = calloc(sizeof(btstack_data_source_t), 1); - if (ds == NULL) return -1; - - // create unix socket - int fd = socket (AF_UNIX, SOCK_STREAM, 0); - if (fd < 0) { - log_error( "Error creating socket ...(%s)", strerror(errno)); - free(ds); - return -1; - } - log_info ("Socket created at %s", path); - - struct sockaddr_un addr; - memset(&addr, 0, sizeof(addr)); - addr.sun_family = AF_UNIX; - strcpy(addr.sun_path, path); - unlink(path); - - const int y = 1; - setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void*) &y, sizeof(int)); - - if (bind (fd, (struct sockaddr *) &addr, sizeof (addr) ) ) { - log_error( "Error on bind() ...(%s)", strerror(errno)); - free(ds); - return -1; - } - - // http://blog.henning.makholm.net/2008/06/unix-domain-socket-woes.html - // make socket accept from all clients - chmod(path, S_IRWXU | S_IRWXG | S_IRWXO); - // - - if (listen(fd, MAX_PENDING_CONNECTIONS)) { - log_error( "Error on listen() ...(%s)", strerror(errno)); - free(ds); - return -1; - } - - btstack_run_loop_set_data_source_fd(ds, fd); - btstack_run_loop_set_data_source_handler(ds, &socket_connection_accept); - btstack_run_loop_enable_data_source_callbacks(ds, DATA_SOURCE_CALLBACK_READ); - btstack_run_loop_add_data_source(ds); - - log_info ("Server up and running ..."); - return 0; -} /** * set packet handler for all auto-accepted connections @@ -576,6 +524,60 @@ int socket_connection_close_tcp(connection_t * connection){ return 0; } +#ifdef HAVE_UNIX_SOCKETS + +/** + * create socket data_source for unix domain socket + */ +int socket_connection_create_unix(char *path){ + + // create btstack_data_source_t + btstack_data_source_t *ds = calloc(sizeof(btstack_data_source_t), 1); + if (ds == NULL) return -1; + + // create unix socket + int fd = socket (AF_UNIX, SOCK_STREAM, 0); + if (fd < 0) { + log_error( "Error creating socket ...(%s)", strerror(errno)); + free(ds); + return -1; + } + log_info ("Socket created at %s", path); + + struct sockaddr_un addr; + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strcpy(addr.sun_path, path); + unlink(path); + + const int y = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void*) &y, sizeof(int)); + + if (bind (fd, (struct sockaddr *) &addr, sizeof (addr) ) ) { + log_error( "Error on bind() ...(%s)", strerror(errno)); + free(ds); + return -1; + } + + // http://blog.henning.makholm.net/2008/06/unix-domain-socket-woes.html + // make socket accept from all clients + chmod(path, S_IRWXU | S_IRWXG | S_IRWXO); + // + + if (listen(fd, MAX_PENDING_CONNECTIONS)) { + log_error( "Error on listen() ...(%s)", strerror(errno)); + free(ds); + return -1; + } + + btstack_run_loop_set_data_source_fd(ds, fd); + btstack_run_loop_set_data_source_handler(ds, &socket_connection_accept); + btstack_run_loop_enable_data_source_callbacks(ds, DATA_SOURCE_CALLBACK_READ); + btstack_run_loop_add_data_source(ds); + + log_info ("Server up and running ..."); + return 0; +} /** * create socket connection to BTdaemon @@ -613,6 +615,8 @@ int socket_connection_close_unix(connection_t * connection){ return 0; } +#endif /* HAVE_UNIX_SOCKETS */ + /** * Init socket connection module */