--- sourceforge.net/trunk/rdesktop/tcp.c 2003/11/08 09:17:41 546 +++ sourceforge.net/trunk/rdesktop/tcp.c 2005/03/06 21:11:18 828 @@ -1,7 +1,7 @@ /* rdesktop: A Remote Desktop Protocol client. Protocol services - TCP layer - Copyright (C) Matthew Chapman 1999-2002 + Copyright (C) Matthew Chapman 1999-2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -35,7 +35,7 @@ static int sock; static struct stream in; static struct stream out; -extern int tcp_port_rdp; +int g_tcp_port_rdp = TCP_PORT_RDP; /* Initialise TCP transport data packet */ STREAM @@ -142,15 +142,13 @@ struct addrinfo hints, *res, *ressave; char tcp_port_rdp_s[10]; - snprintf(tcp_port_rdp_s, 10, "%d", tcp_port_rdp); + snprintf(tcp_port_rdp_s, 10, "%d", g_tcp_port_rdp); memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - n = getaddrinfo(server, tcp_port_rdp_s, &hints, &res); - - if (n < 0) + if ((n = getaddrinfo(server, tcp_port_rdp_s, &hints, &res))) { error("getaddrinfo: %s\n", gai_strerror(n)); return False; @@ -200,7 +198,7 @@ } servaddr.sin_family = AF_INET; - servaddr.sin_port = htons(tcp_port_rdp); + servaddr.sin_port = htons(g_tcp_port_rdp); if (connect(sock, (struct sockaddr *) &servaddr, sizeof(struct sockaddr)) < 0) { @@ -228,3 +226,19 @@ { close(sock); } + +char * +tcp_get_address() +{ + static char ipaddr[32]; + struct sockaddr_in sockaddr; + socklen_t len = sizeof(sockaddr); + if (getsockname(sock, (struct sockaddr *) &sockaddr, &len) == 0) + { + unsigned char *ip = (unsigned char *) &sockaddr.sin_addr; + sprintf(ipaddr, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); + } + else + strcpy(ipaddr, "127.0.0.1"); + return ipaddr; +}