23 #ifdef HAVE_CURL_CURL_H
24 #include <curl/curl.h>
38 "http://crossfire.real-time.com/metaserver2/meta_client.php",
39 "http://metaserver.eu.cross-fire.org/meta_client.php",
40 "http://metaserver.us.cross-fire.org/meta_client.php",
55 static size_t mbuf_write(
void *contents,
size_t size,
size_t nmemb,
57 size_t realsize = size * nmemb;
58 struct mbuf *mem = (
struct mbuf *)userp;
63 printf(
"not enough memory (realloc returned NULL)\n");
67 memcpy(&(mem->
memory[mem->
size]), contents, realsize);
68 mem->
size += realsize;
121 for (
char *cp = inbuf; cp != NULL && *cp != 0; cp = newline) {
122 newline = strchr(cp,
'\n');
135 char *eq = strchr(cp,
'=');
141 if (!strcmp(cp,
"START_SERVER_DATA")) {
145 memset(&metaserver, 0,
sizeof (
Meta_Info));
146 }
else if (!strcmp(cp,
"END_SERVER_DATA")) {
151 snprintf(buf,
sizeof(buf),
"%s:%d",
154 snprintf(buf,
sizeof(buf),
"%s", metaserver.
hostname);
167 fprintf(stderr,
"parse_meta: unknown line '%s'\n", cp);
170 if (!strcmp(cp,
"hostname")) {
172 }
else if (!strcmp(cp,
"port")) {
173 metaserver.
port = atoi(eq);
174 }
else if (!strcmp(cp,
"html_comment")) {
176 }
else if (!strcmp(cp,
"text_comment")) {
178 }
else if (!strcmp(cp,
"archbase")) {
180 }
else if (!strcmp(cp,
"mapbase")) {
182 }
else if (!strcmp(cp,
"codebase")) {
184 }
else if (!strcmp(cp,
"flags")) {
185 strncpy(metaserver.
flags, eq, sizeof (metaserver.
flags));
186 }
else if (!strcmp(cp,
"version")) {
188 }
else if (!strcmp(cp,
"num_players")) {
190 }
else if (!strcmp(cp,
"in_bytes")) {
192 }
else if (!strcmp(cp,
"out_bytes")) {
194 }
else if (!strcmp(cp,
"uptime")) {
195 metaserver.
uptime = atoi(eq);
196 }
else if (!strcmp(cp,
"sc_version")) {
198 }
else if (!strcmp(cp,
"cs_version")) {
200 }
else if (!strcmp(cp,
"last_update")) {
206 metaserver.
idle_time = time(NULL) - atoi(eq);
211 fprintf(stderr,
"parse_meta: unknown line '%s=%s'\n", cp, eq);
224 #ifdef HAVE_CURL_CURL_H
225 CURL *curl = curl_easy_init();
237 curl_easy_setopt(curl, CURLOPT_URL, metaserver2);
238 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
mbuf_write);
239 curl_easy_setopt(curl, CURLOPT_WRITEDATA, (
void *)&chunk);
240 CURLcode res = curl_easy_perform(curl);
241 curl_easy_cleanup(curl);
258 #ifdef HAVE_CURL_CURL_H
259 curl_global_init(CURL_GLOBAL_ALL);
270 for (
size_t i = 0; i <
sizeof(
metaservers) /
sizeof(
char *); i++) {