git.annexia.org
/
ovirt-viewer.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
few minor bugfixes
[ovirt-viewer.git]
/
tunnel.c
diff --git
a/tunnel.c
b/tunnel.c
index
a03ef0b
..
c6d091d
100644
(file)
--- a/
tunnel.c
+++ b/
tunnel.c
@@
-34,6
+34,7
@@
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
+#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
@@
-46,9
+47,6
@@
/* constants */
/* 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;
// 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)
{
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;
//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 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;
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
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_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);
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
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_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
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?
DEBUG ("tunnel bound to local port %i", tunnel_port);
// increase client buffer size?