From 8423ffa1a8c56e65220e2a354cd62f71f99a7a06 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Thu, 23 Dec 2010 00:57:28 +0100 Subject: qemu-sockets-android.c: Add support for socket= option. Change-Id: If7896d653b36fde05c24d3170ff5b0beb27fff5f --- qemu-sockets.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'qemu-sockets.c') diff --git a/qemu-sockets.c b/qemu-sockets.c index c526324..c4c0f65 100644 --- a/qemu-sockets.c +++ b/qemu-sockets.c @@ -52,6 +52,11 @@ static QemuOptsList dummy_opts = { },{ .name = "ipv6", .type = QEMU_OPT_BOOL, +#ifdef CONFIG_ANDROID + },{ + .name = "socket", + .type = QEMU_OPT_NUMBER, +#endif }, { /* end if list */ } }, @@ -130,6 +135,13 @@ int inet_listen_opts(QemuOpts *opts, int port_offset) ai.ai_family = PF_UNSPEC; ai.ai_socktype = SOCK_STREAM; +#ifdef CONFIG_ANDROID + const char* socket_fd = qemu_opt_get(opts, "socket"); + if (socket_fd) { + return atoi(socket_fd); + } +#endif + if ((qemu_opt_get(opts, "host") == NULL) || (qemu_opt_get(opts, "port") == NULL)) { fprintf(stderr, "%s: host and/or port not specified\n", __FUNCTION__); @@ -226,6 +238,13 @@ int inet_connect_opts(QemuOpts *opts) char uport[33]; int sock,rc; +#ifdef CONFIG_ANDROID + const char* socket_fd = qemu_opt_get(opts, "socket"); + if (socket_fd) { + return atoi(socket_fd); + } +#endif + memset(&ai,0, sizeof(ai)); ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; ai.ai_family = PF_UNSPEC; @@ -454,6 +473,25 @@ static int inet_parse(QemuOpts *opts, const char *str) qemu_opt_set(opts, "ipv4", "on"); if (strstr(optstr, ",ipv6")) qemu_opt_set(opts, "ipv6", "on"); +#ifdef CONFIG_ANDROID + h = strstr(optstr, ",socket="); + if (h) { + int socket_fd; + char str_fd[12]; + if (1 != sscanf(h+7,"%d",&socket_fd)) { + fprintf(stderr,"%s: socket fd parse error (%s)\n", + __FUNCTION__, h+7); + return -1; + } + if (socket_fd < 0 || socket_fd >= INT_MAX) { + fprintf(stderr,"%s: socket fd range error (%d)\n", + __FUNCTION__, socket_fd); + return -1; + } + snprintf(str_fd, sizeof str_fd, "%d", socket_fd); + qemu_opt_set(opts, "socket", str_fd); + } +#endif return 0; } -- cgit v1.1