ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/socket/metaserver.C
(Generate patch)

Comparing deliantra/server/socket/metaserver.C (file contents):
Revision 1.1 by elmex, Sun Aug 13 17:16:06 2006 UTC vs.
Revision 1.2 by root, Tue Aug 29 08:01:38 2006 UTC

1/* 1/*
2 * static char *rcsid_metaserver_c = 2 * static char *rcsid_metaserver_c =
3 * "$Id: metaserver.C,v 1.1 2006/08/13 17:16:06 elmex Exp $"; 3 * "$Id: metaserver.C,v 1.2 2006/08/29 08:01:38 root Exp $";
4 */ 4 */
5 5
6/* 6/*
7 CrossFire, A Multiplayer game for X-windows 7 CrossFire, A Multiplayer game for X-windows
8 8
56 */ 56 */
57void metaserver_init(void) 57void metaserver_init(void)
58{ 58{
59 59
60#ifdef WIN32 /* ***win32 metaserver_init(): init win32 socket */ 60#ifdef WIN32 /* ***win32 metaserver_init(): init win32 socket */
61 struct hostent *hostbn; 61 struct hostent *hostbn;
62 int temp = 1; 62 int temp = 1;
63#endif 63#endif
64 64
65 if (!settings.meta_on) { 65 if (!settings.meta_on) {
66 metafd=-1; 66 metafd=-1;
67 return; 67 return;
68 } 68 }
69 69
70 if (isdigit(settings.meta_server[0])) 70 if (isdigit(settings.meta_server[0]))
71 sock.sin_addr.s_addr = inet_addr(settings.meta_server); 71 sock.sin_addr.s_addr = inet_addr(settings.meta_server);
72 else { 72 else {
73 struct hostent *hostbn = gethostbyname(settings.meta_server); 73 struct hostent *hostbn = gethostbyname(settings.meta_server);
74 if (hostbn == NULL) { 74 if (hostbn == NULL) {
75 LOG(llevDebug,"metaserver_init: Unable to resolve hostname %s\n", settings.meta_server); 75 LOG(llevDebug,"metaserver_init: Unable to resolve hostname %s\n", settings.meta_server);
76 return; 76 return;
77 } 77 }
78 memcpy(&sock.sin_addr, hostbn->h_addr, hostbn->h_length); 78 memcpy(&sock.sin_addr, hostbn->h_addr, hostbn->h_length);
79 } 79 }
80#ifdef WIN32 /* ***win32 metaserver_init(): init win32 socket */ 80#ifdef WIN32 /* ***win32 metaserver_init(): init win32 socket */
81 ioctlsocket(metafd, FIONBIO , &temp); 81 ioctlsocket(metafd, FIONBIO , &temp);
82#else 82#else
83 fcntl(metafd, F_SETFL, O_NONBLOCK); 83 fcntl(metafd, F_SETFL, O_NONBLOCK);
84#endif 84#endif
85 if ((metafd=socket(AF_INET, SOCK_DGRAM, 0))==-1) { 85 if ((metafd=socket(AF_INET, SOCK_DGRAM, 0))==-1) {
86 LOG(llevDebug,"metaserver_init: Unable to create socket, err %d\n", errno); 86 LOG(llevDebug,"metaserver_init: Unable to create socket, err %d\n", errno);
87 return; 87 return;
88 } 88 }
89 sock.sin_family = AF_INET; 89 sock.sin_family = AF_INET;
90 sock.sin_port = htons(settings.meta_port); 90 sock.sin_port = htons(settings.meta_port);
91 91
92 /* No hostname specified, so lets try to figure one out */ 92 /* No hostname specified, so lets try to figure one out */
93 if (settings.meta_host[0]==0) { 93 if (settings.meta_host[0]==0) {
94 char hostname[MAX_BUF], domain[MAX_BUF]; 94 char hostname[MAX_BUF], domain[MAX_BUF];
95 if (gethostname(hostname, MAX_BUF-1)) { 95 if (gethostname(hostname, MAX_BUF-1)) {
96 LOG(llevDebug,"metaserver_init: gethostname failed - will not report hostname\n"); 96 LOG(llevDebug,"metaserver_init: gethostname failed - will not report hostname\n");
97 return; 97 return;
98 } 98 }
99 99
100#ifdef WIN32 /* ***win32 metaserver_init(): gethostbyname! */ 100#ifdef WIN32 /* ***win32 metaserver_init(): gethostbyname! */
101 hostbn = gethostbyname(hostname); 101 hostbn = gethostbyname(hostname);
102 if (hostbn != (struct hostent *) NULL) /* quick hack */ 102 if (hostbn != (struct hostent *) NULL) /* quick hack */
103 memcpy(domain, hostbn->h_addr, hostbn->h_length); 103 memcpy(domain, hostbn->h_addr, hostbn->h_length);
104 104
105 if (hostbn == (struct hostent *) NULL) { 105 if (hostbn == (struct hostent *) NULL) {
106#else 106#else
107 if (getdomainname(domain, MAX_BUF-1)) { 107 if (getdomainname(domain, MAX_BUF-1)) {
108#endif /* win32 */ 108#endif /* win32 */
109 LOG(llevDebug,"metaserver_init: getdomainname failed - will not report hostname\n"); 109 LOG(llevDebug,"metaserver_init: getdomainname failed - will not report hostname\n");
110 return; 110 return;
111 } 111 }
112 /* Potential overrun here but unlikely to occur */ 112 /* Potential overrun here but unlikely to occur */
113 sprintf(settings.meta_host,"%s.%s", hostname, domain); 113 sprintf(settings.meta_host,"%s.%s", hostname, domain);
114 } 114 }
115} 115}
116 116
117/** 117/**
118 * Updates our info in the metaserver 118 * Updates our info in the metaserver
139 //if (pl->socket.is_bot) continue; 139 //if (pl->socket.is_bot) continue;
140 num_players++; 140 num_players++;
141 } 141 }
142 142
143 sprintf(data,"%s|%d|%s|%s|%d|%d|%ld", settings.meta_host, num_players, VERSION "+", 143 sprintf(data,"%s|%d|%s|%s|%d|%d|%ld", settings.meta_host, num_players, VERSION "+",
144 settings.meta_comment, cst_tot.ibytes, cst_tot.obytes, 144 settings.meta_comment, cst_tot.ibytes, cst_tot.obytes,
145 (long)time(NULL) - cst_tot.time_start); 145 (long)time(NULL) - cst_tot.time_start);
146 if (sendto(metafd, data, strlen(data), 0, (struct sockaddr *)&sock, sizeof(sock))<0) { 146 if (sendto(metafd, data, strlen(data), 0, (struct sockaddr *)&sock, sizeof(sock))<0) {
147 LOG(llevDebug,"metaserver_update: sendto failed, err = %d\n", errno); 147 LOG(llevDebug,"metaserver_update: sendto failed, err = %d\n", errno);
148 } 148 }
149} 149}
150 150

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines