X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=tunnel.c;fp=tunnel.c;h=c6d091d917d816d34d5493462e27457488c0ac7c;hb=29ab08e7d59fe97f23d057583808d6d67377f9d7;hp=a03ef0b32757085673185bdec436ac88f9a48188;hpb=c333f350d703997b67db67b8a578ea4bc70089fa;p=ovirt-viewer.git diff --git a/tunnel.c b/tunnel.c index a03ef0b..c6d091d 100644 --- a/tunnel.c +++ b/tunnel.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -46,9 +47,6 @@ /* constants */ -// port to try to listen on, if we can't, increment until we find one we can -const int PORT_RANGE_START = 5600; - // max length of a vm name const int VM_NAME_MAX_LEN = 250; @@ -137,6 +135,8 @@ stop_tunnel(void) static gpointer tunnel_thread (gpointer _data) { + struct hostent *dns_serv; + //char vm_data[VM_NAME_MAX_LEN]; int local_server_socketfd, ovirt_server_socket, client_socketfd; unsigned int local_server_len, client_len, ovirt_server_len; @@ -145,6 +145,9 @@ tunnel_thread (gpointer _data) struct sockaddr_in ovirt_server_address; struct sockaddr_in client_address; + struct sockaddr_in local_server_address_lookup; + unsigned int local_server_address_lookup_len = sizeof(local_server_address_lookup); + GThread *client_server_gthread = NULL; GThread *server_client_gthread = NULL; @@ -154,8 +157,13 @@ tunnel_thread (gpointer _data) DEBUG ("tunnel thread starting up"); // ovirt server address + dns_serv = gethostbyname(hostname); + if(dns_serv == NULL){ + DEBUG("ovirt server lookup failed"); + return NULL; + } ovirt_server_address.sin_family = PF_INET; - ovirt_server_address.sin_addr.s_addr = inet_addr(hostname); + ovirt_server_address.sin_addr.s_addr = ((struct in_addr*)(dns_serv->h_addr))->s_addr; //inet_addr(hostname); ovirt_server_address.sin_port = htons(OVIRT_SERVER_PORT); ovirt_server_len = sizeof(ovirt_server_address); @@ -165,18 +173,21 @@ tunnel_thread (gpointer _data) sockets = g_slist_prepend(sockets, c_socket); // local server address - tunnel_port = PORT_RANGE_START; local_server_address.sin_family = PF_INET; local_server_address.sin_addr.s_addr = inet_addr("127.0.0.1"); - local_server_address.sin_port = htons(tunnel_port); + local_server_address.sin_port = 0; local_server_len = sizeof(local_server_address); // increment ports until one is available - while(bind(local_server_socketfd, (struct sockaddr*)&local_server_address, local_server_len) < 0){ - tunnel_port += 1; - local_server_address.sin_port += htons(tunnel_port); + if(bind(local_server_socketfd, (struct sockaddr*)&local_server_address, local_server_len) < 0){ + DEBUG("tunnel bind failed"); + return NULL; } + getsockname(local_server_socketfd, + (struct sockaddr*) &local_server_address_lookup, + &local_server_address_lookup_len); + tunnel_port = (int)ntohs(local_server_address_lookup.sin_port); DEBUG ("tunnel bound to local port %i", tunnel_port); // increase client buffer size?