diff options
| author | 2014-02-10 21:22:59 +0100 | |
|---|---|---|
| committer | 2014-02-10 21:22:59 +0100 | |
| commit | 9cc128a83cb590c249c11914297fb5a0c6c0549b (patch) | |
| tree | 8076b848323ff66e59503c46e116b5e3606ae5d8 /src | |
| parent | b16986f04b1c6652330f656d175ff134a9adce2b (diff) | |
| download | libusbmuxd-9cc128a83cb590c249c11914297fb5a0c6c0549b.tar.gz libusbmuxd-9cc128a83cb590c249c11914297fb5a0c6c0549b.tar.bz2 | |
Replace socket implementation and fix indentation in iproxy sources
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/libusbmuxd.c | 42 | ||||
| -rw-r--r-- | src/sock_stuff.h | 65 | ||||
| -rw-r--r-- | src/socket.c (renamed from src/sock_stuff.c) | 113 | ||||
| -rw-r--r-- | src/socket.h | 65 | 
5 files changed, 152 insertions, 135 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index 71f218c..4cd338e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,7 +8,7 @@ libusbmuxd_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBUSBMUXD_SO_VERSION) -no  libusbmuxd_la_LIBADD =  libusbmuxd_la_SOURCES = \  		collection.c collection.h \ -		sock_stuff.c sock_stuff.h \ +		socket.c socket.h \  		libusbmuxd.c  if WIN32 diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c index 1cf6dcb..97114a8 100644 --- a/src/libusbmuxd.c +++ b/src/libusbmuxd.c @@ -69,7 +69,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  // usbmuxd protocol  #include "usbmuxd-proto.h"  // socket utility functions -#include "sock_stuff.h" +#include "socket.h"  // misc utility functions  #include "collection.h" @@ -111,9 +111,9 @@ static usbmuxd_device_info_t *devices_find(uint32_t handle)  static int connect_usbmuxd_socket()  {  #if defined(WIN32) || defined(__CYGWIN__) -	return connect_socket("127.0.0.1", USBMUXD_SOCKET_PORT); +	return socket_connect("127.0.0.1", USBMUXD_SOCKET_PORT);  #else -	return connect_unix_socket(USBMUXD_SOCKET_FILE); +	return socket_connect_unix(USBMUXD_SOCKET_FILE);  #endif  } @@ -169,7 +169,7 @@ static int receive_packet(int sfd, struct usbmuxd_header *header, void **payload  	header->message = 0;  	header->tag = 0; -	recv_len = recv_buf_timeout(sfd, &hdr, sizeof(hdr), 0, timeout); +	recv_len = socket_receive_timeout(sfd, &hdr, sizeof(hdr), 0, timeout);  	if (recv_len < 0) {  		return recv_len;  	} else if ((size_t)recv_len < sizeof(hdr)) { @@ -179,7 +179,7 @@ static int receive_packet(int sfd, struct usbmuxd_header *header, void **payload  	uint32_t payload_size = hdr.length - sizeof(hdr);  	if (payload_size > 0) {  		payload_loc = (char*)malloc(payload_size); -		if (recv_buf_timeout(sfd, payload_loc, payload_size, 0, 5000) != (int)payload_size) { +		if (socket_receive_timeout(sfd, payload_loc, payload_size, 0, 5000) != (int)payload_size) {  			DEBUG(1, "%s: Error receiving payload of size %d\n", __func__, payload_size);  			free(payload_loc);  			return -EBADMSG; @@ -204,7 +204,7 @@ static int receive_packet(int sfd, struct usbmuxd_header *header, void **payload  			memcpy(header, &hdr, sizeof(hdr));  			return hdr.length;  		} -		 +  		plist_get_string_val(node, &message);  		if (message) {  			uint64_t val = 0; @@ -338,17 +338,17 @@ static int send_packet(int sfd, uint32_t message, uint32_t tag, void *payload, u  	if (payload && (payload_size > 0)) {  		header.length += payload_size;  	} -	int sent = send_buf(sfd, &header, sizeof(header)); +	int sent = socket_send(sfd, &header, sizeof(header));  	if (sent != sizeof(header)) {  		DEBUG(1, "%s: ERROR: could not send packet header\n", __func__);  		return -1;  	}  	if (payload && (payload_size > 0)) { -		sent += send_buf(sfd, payload, payload_size); +		sent += socket_send(sfd, payload, payload_size);  	}  	if (sent != (int)header.length) {  		DEBUG(1, "%s: ERROR: could not send whole packet\n", __func__); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	}  	return sent; @@ -591,11 +591,11 @@ retry:  	tag = ++use_tag;  	if (send_listen_packet(sfd, tag) <= 0) {  		DEBUG(1, "%s: ERROR: could not send listen packet\n", __func__); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	}  	if (usbmuxd_get_result(sfd, tag, &res, NULL) && (res != 0)) { -		close_socket(sfd); +		socket_close(sfd);  		if ((res == RESULT_BADVERSION) && (proto_version == 1)) {  			proto_version = 0;  			goto retry; @@ -685,7 +685,7 @@ static void device_monitor_cleanup(void* data)  	} ENDFOREACH  	collection_free(&devices); -	close_socket(listenfd); +	socket_close(listenfd);  	listenfd = -1;  } @@ -753,7 +753,7 @@ int usbmuxd_unsubscribe()  {  	event_cb = NULL; -	shutdown_socket(listenfd, SHUT_RDWR); +	socket_shutdown(listenfd, SHUT_RDWR);  #ifdef WIN32  	if (devmon != NULL) { @@ -842,7 +842,7 @@ retry:  				if (res == RESULT_BADVERSION) {  					proto_version = 0;  				} -				close_socket(sfd); +				socket_close(sfd);  				try_list_devices = 0;  				goto retry;  			} @@ -856,7 +856,7 @@ retry:  		if (usbmuxd_get_result(sfd, tag, &res, NULL) && (res == 0)) {  			listen_success = 1;  		} else { -			close_socket(sfd); +			socket_close(sfd);  			if ((res == RESULT_BADVERSION) && (proto_version == 1)) {  				proto_version = 0;  				goto retry; @@ -918,7 +918,7 @@ retry:  got_device_list:  	// explicitly close connection -	close_socket(sfd); +	socket_close(sfd);  	// create copy of device info entries from collection  	newlist = (usbmuxd_device_info_t*)malloc(sizeof(usbmuxd_device_info_t) * (collection_count(&tmpdevs) + 1)); @@ -1009,7 +1009,7 @@ retry:  			} else {  				if ((res == RESULT_BADVERSION) && (proto_version == 1)) {  					proto_version = 0; -					close_socket(sfd); +					socket_close(sfd);  					goto retry;  				}  				DEBUG(1, "%s: Connect failed, Error code=%d\n", __func__, res); @@ -1021,14 +1021,14 @@ retry:  		return sfd;  	} -	close_socket(sfd); +	socket_close(sfd);  	return -1;  }  int usbmuxd_disconnect(int sfd)  { -	return close_socket(sfd); +	return socket_close(sfd);  }  int usbmuxd_send(int sfd, const char *data, uint32_t len, uint32_t *sent_bytes) @@ -1056,7 +1056,7 @@ int usbmuxd_send(int sfd, const char *data, uint32_t len, uint32_t *sent_bytes)  int usbmuxd_recv_timeout(int sfd, char *data, uint32_t len, uint32_t *recv_bytes, unsigned int timeout)  { -	int num_recv = recv_buf_timeout(sfd, (void*)data, len, 0, timeout); +	int num_recv = socket_receive_timeout(sfd, (void*)data, len, 0, timeout);  	if (num_recv < 0) {  		*recv_bytes = 0;  		return num_recv; @@ -1241,5 +1241,5 @@ void libusbmuxd_set_use_inotify(int set)  void libusbmuxd_set_debug_level(int level)  {  	libusbmuxd_debug = level; -	sock_stuff_set_verbose(level); +	socket_set_verbose(level);  } diff --git a/src/sock_stuff.h b/src/sock_stuff.h deleted file mode 100644 index 5efcd27..0000000 --- a/src/sock_stuff.h +++ /dev/null @@ -1,65 +0,0 @@ -/* -	libusbmuxd - client library to talk to usbmuxd - -Copyright (C) 2009	Nikias Bassen <nikias@gmx.li> -Copyright (C) 2009	Paul Sladen <libiphone@paul.sladen.org> -Copyright (C) 2009	Martin Szulecki <opensuse@sukimashita.com> - -This library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation, either version 2.1 of the -License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - -*/ - -#ifndef __SOCK_STUFF_H -#define __SOCK_STUFF_H - -#include <stdint.h> - -enum fd_mode { -	FDM_READ, -	FDM_WRITE, -	FDM_EXCEPT -}; -typedef enum fd_mode fd_mode; - -#ifdef WIN32 -#include <winsock2.h> -#define SHUT_RD SD_READ -#define SHUT_WR SD_WRITE -#define SHUT_RDWR SD_BOTH -#endif - -#ifndef WIN32 -int create_unix_socket(const char *filename); -int connect_unix_socket(const char *filename); -#endif -int create_socket(uint16_t port); -#if defined(WIN32) || defined(__CYGWIN__) -int connect_socket(const char *addr, uint16_t port); -#endif -int check_fd(int fd, fd_mode fdm, unsigned int timeout); - -int shutdown_socket(int fd, int how); -int close_socket(int fd); - -int recv_buf(int fd, void *data, size_t size); -int peek_buf(int fd, void *data, size_t size); -int recv_buf_timeout(int fd, void *data, size_t size, int flags, -					 unsigned int timeout); - -int send_buf(int fd, void *data, size_t size); - -void sock_stuff_set_verbose(int level); - -#endif							/* __SOCK_STUFF_H */ diff --git a/src/sock_stuff.c b/src/socket.c index 609c8ad..c35de33 100644 --- a/src/sock_stuff.c +++ b/src/socket.c @@ -1,25 +1,23 @@  /* -	libusbmuxd - client library to talk to usbmuxd - -Copyright (C) 2009	Nikias Bassen <nikias@gmx.li> -Copyright (C) 2009	Paul Sladen <libiphone@paul.sladen.org> -Copyright (C) 2009	Martin Szulecki <opensuse@sukimashita.com> - -This library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as -published by the Free Software Foundation, either version 2.1 of the -License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - -*/ + * socket.c + * + * Copyright (c) 2012 Martin Szulecki All Rights Reserved. + * Copyright (c) 2012 Nikias Bassen All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  + */  #include <stdio.h>  #include <stddef.h> @@ -30,8 +28,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  #include <sys/time.h>  #include <sys/stat.h>  #ifdef WIN32 -#include <windows.h>  #include <winsock2.h> +#include <windows.h>  static int wsa_init = 0;  #else  #include <sys/socket.h> @@ -40,19 +38,19 @@ static int wsa_init = 0;  #include <netdb.h>  #include <arpa/inet.h>  #endif -#include "sock_stuff.h" +#include "socket.h"  #define RECV_TIMEOUT 20000  static int verbose = 0; -void sock_stuff_set_verbose(int level) +void socket_set_verbose(int level)  {  	verbose = level;  }  #ifndef WIN32 -int create_unix_socket(const char *filename) +int socket_create_unix(const char *filename)  {  	struct sockaddr_un name;  	int sock; @@ -85,20 +83,20 @@ int create_unix_socket(const char *filename)  	if (bind(sock, (struct sockaddr *) &name, size) < 0) {  		perror("bind"); -		close_socket(sock); +		socket_close(sock);  		return -1;  	}  	if (listen(sock, 10) < 0) {  		perror("listen"); -		close_socket(sock); +		socket_close(sock);  		return -1;  	}  	return sock;  } -int connect_unix_socket(const char *filename) +int socket_connect_unix(const char *filename)  {  	struct sockaddr_un name;  	int sfd = -1; @@ -134,7 +132,7 @@ int connect_unix_socket(const char *filename)  			+ strlen(name.sun_path) + 1);  	if (connect(sfd, (struct sockaddr *) &name, size) < 0) { -		close_socket(sfd); +		socket_close(sfd);  		if (verbose >= 2)  			fprintf(stderr, "%s: connect: %s\n", __func__,  					strerror(errno)); @@ -145,7 +143,7 @@ int connect_unix_socket(const char *filename)  }  #endif -int create_socket(uint16_t port) +int socket_create(uint16_t port)  {  	int sfd = -1;  	int yes = 1; @@ -168,7 +166,7 @@ int create_socket(uint16_t port)  	if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(int)) == -1) {  		perror("setsockopt()"); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	} @@ -179,21 +177,20 @@ int create_socket(uint16_t port)  	if (0 > bind(sfd, (struct sockaddr *) &saddr, sizeof(saddr))) {  		perror("bind()"); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	}  	if (listen(sfd, 1) == -1) {  		perror("listen()"); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	}  	return sfd;  } -#if defined(WIN32) || defined(__CYGWIN__) -int connect_socket(const char *addr, uint16_t port) +int socket_connect(const char *addr, uint16_t port)  {  	int sfd = -1;  	int yes = 1; @@ -235,7 +232,7 @@ int connect_socket(const char *addr, uint16_t port)  	if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (void*)&yes, sizeof(int)) == -1) {  		perror("setsockopt()"); -		close_socket(sfd); +		socket_close(sfd);  		return -1;  	} @@ -246,15 +243,14 @@ int connect_socket(const char *addr, uint16_t port)  	if (connect(sfd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0) {  		perror("connect"); -		close_socket(sfd); +		socket_close(sfd);  		return -2;  	}  	return sfd;  } -#endif /* WIN32 || __CYGWIN__ */ -int check_fd(int fd, fd_mode fdm, unsigned int timeout) +int socket_check_fd(int fd, fd_mode fdm, unsigned int timeout)  {  	fd_set fds;  	int sret; @@ -321,12 +317,33 @@ int check_fd(int fd, fd_mode fdm, unsigned int timeout)  	return sret;  } -int shutdown_socket(int fd, int how) +int socket_accept(int fd, uint16_t port) +{ +#ifdef WIN32 +	int addr_len; +#else +	socklen_t addr_len; +#endif +	int result; +	struct sockaddr_in addr; + +	memset(&addr, 0, sizeof(addr)); +	addr.sin_family = AF_INET; +	addr.sin_addr.s_addr = htonl(INADDR_ANY); +	addr.sin_port = htons(port); + +	addr_len = sizeof(addr); +	result = accept(fd, (struct sockaddr*)&addr, &addr_len); + +	return result; +} + +int socket_shutdown(int fd, int how)  {  	return shutdown(fd, how);  } -int close_socket(int fd) { +int socket_close(int fd) {  #ifdef WIN32  	return closesocket(fd);  #else @@ -334,24 +351,24 @@ int close_socket(int fd) {  #endif  } -int recv_buf(int fd, void *data, size_t length) +int socket_receive(int fd, void *data, size_t length)  { -	return recv_buf_timeout(fd, data, length, 0, RECV_TIMEOUT); +	return socket_receive_timeout(fd, data, length, 0, RECV_TIMEOUT);  } -int peek_buf(int fd, void *data, size_t length) +int socket_peek(int fd, void *data, size_t length)  { -	return recv_buf_timeout(fd, data, length, MSG_PEEK, RECV_TIMEOUT); +	return socket_receive_timeout(fd, data, length, MSG_PEEK, RECV_TIMEOUT);  } -int recv_buf_timeout(int fd, void *data, size_t length, int flags, +int socket_receive_timeout(int fd, void *data, size_t length, int flags,  					 unsigned int timeout)  {  	int res;  	int result;  	// check if data is available -	res = check_fd(fd, FDM_READ, timeout); +	res = socket_check_fd(fd, FDM_READ, timeout);  	if (res <= 0) {  		return res;  	} @@ -369,7 +386,7 @@ int recv_buf_timeout(int fd, void *data, size_t length, int flags,  	return result;  } -int send_buf(int fd, void *data, size_t length) +int socket_send(int fd, void *data, size_t length)  {  	return send(fd, data, length, 0);  } diff --git a/src/socket.h b/src/socket.h new file mode 100644 index 0000000..c2b2599 --- /dev/null +++ b/src/socket.h @@ -0,0 +1,65 @@ +/* + * socket.h + * + * Copyright (c) 2012 Martin Szulecki All Rights Reserved. + * Copyright (c) 2012 Nikias Bassen All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA  + */ + +#ifndef __SOCKET_SOCKET_H +#define __SOCKET_SOCKET_H + +#include <stdlib.h> +#include <stdint.h> + +enum fd_mode { +	FDM_READ, +	FDM_WRITE, +	FDM_EXCEPT +}; +typedef enum fd_mode fd_mode; + +#ifdef WIN32 +#include <winsock2.h> +#define SHUT_RD SD_READ +#define SHUT_WR SD_WRITE +#define SHUT_RDWR SD_BOTH +#else +#include <sys/socket.h> +#endif + +#ifndef WIN32 +int socket_create_unix(const char *filename); +int socket_connect_unix(const char *filename); +#endif +int socket_create(uint16_t port); +int socket_connect(const char *addr, uint16_t port); +int socket_check_fd(int fd, fd_mode fdm, unsigned int timeout); +int socket_accept(int fd, uint16_t port); + +int socket_shutdown(int fd, int how); +int socket_close(int fd); + +int socket_receive(int fd, void *data, size_t size); +int socket_peek(int fd, void *data, size_t size); +int socket_receive_timeout(int fd, void *data, size_t size, int flags, +					 unsigned int timeout); + +int socket_send(int fd, void *data, size_t size); + +void socket_set_verbose(int level); + +#endif	/* __SOCKET_SOCKET_H */ | 
