Cube  Diff

Differences From Artifact [fcffeffeb7]:

To Artifact [4bb1ac1ee8]:


1
2
3
4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12


13

14
15
16
17
18
19
20












-
-
+
-







// all server side masterserver and pinging functionality

#include "cube.h"

static ENetSocket mssock = ENET_SOCKET_NULL;

static void
httpgetsend(ENetAddress &ad, OFString *hostname, OFString *req, OFString *ref,
    OFString *agent)
{
	if (ad.host == ENET_HOST_ANY) {
		[OFStdOut writeFormat:@"looking up %@...\n", hostname];
		@autoreleasepool {
			enet_address_set_host(&ad, hostname.UTF8String);
		enet_address_set_host(&ad, hostname.UTF8String);
		}
		if (ad.host == ENET_HOST_ANY)
			return;
	}
	if (mssock != ENET_SOCKET_NULL)
		enet_socket_destroy(mssock);
	mssock = enet_socket_create(ENET_SOCKET_TYPE_STREAM, NULL);
	if (mssock == ENET_SOCKET_NULL) {
75
76
77
78
79
80
81
82
83
84


85
86
87


88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112




113
114
115
116
117
118
119
120
73
74
75
76
77
78
79



80
81



82
83

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102





103
104
105
106

107
108
109
110
111
112
113







-
-
-
+
+
-
-
-
+
+
-



















-
-
-
-
-
+
+
+
+
-







static ENetBuffer masterb;

static void
updatemasterserver(int seconds)
{
	// send alive signal to masterserver every hour of uptime
	if (seconds > updmaster) {
		@autoreleasepool {
			OFString *path = [OFString
			    stringWithFormat:@"%@register.do?action=add",
		OFString *path = [OFString
		    stringWithFormat:@"%@register.do?action=add", masterpath];
			    masterpath];
			httpgetsend(masterserver, masterbase, path,
			    @"cubeserver", @"Cube Server");
		httpgetsend(masterserver, masterbase, path, @"cubeserver",
		    @"Cube Server");
		}
		masterrep[0] = 0;
		masterb.data = masterrep;
		masterb.dataLength = MAXTRANS - 1;
		updmaster = seconds + 60 * 60;
	}
}

static void
checkmasterreply()
{
	bool busy = mssock != ENET_SOCKET_NULL;
	httpgetrecieve(masterb);
	if (busy && mssock == ENET_SOCKET_NULL)
		printf("masterserver reply: %s\n", stripheader(masterrep));
}

uchar *
retrieveservers(uchar *buf, int buflen)
{
	@autoreleasepool {
		OFString *path = [OFString
		    stringWithFormat:@"%@retrieve.do?item=list", masterpath];
		httpgetsend(masterserver, masterbase, path, @"cubeserver",
		    @"Cube Server");
	OFString *path =
	    [OFString stringWithFormat:@"%@retrieve.do?item=list", masterpath];
	httpgetsend(
	    masterserver, masterbase, path, @"cubeserver", @"Cube Server");
	}
	ENetBuffer eb;
	buf[0] = 0;
	eb.data = buf;
	eb.dataLength = buflen - 1;
	while (mssock != ENET_SOCKET_NULL)
		httpgetrecieve(eb);
	return stripheader(buf);
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171








172
173
174


175
176
177
178
179
180
181






182
149
150
151
152
153
154
155









156
157
158
159
160
161
162
163
164


165
166







167
168
169
170
171
172








-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+

-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
		enet_socket_send(pongsock, &addr, &buf, 1);
	}
}

void
servermsinit(OFString *master_, OFString *sdesc, bool listen)
{
	@autoreleasepool {
		const char *master = master_.UTF8String;
		const char *mid = strstr(master, "/");
		if (!mid)
			mid = master;
		masterpath = @(mid);
		masterbase = [[OFString alloc] initWithUTF8String:master
		                                           length:mid - master];
		serverdesc = sdesc;
	const char *master = master_.UTF8String;
	const char *mid = strstr(master, "/");
	if (!mid)
		mid = master;
	masterpath = @(mid);
	masterbase = [[OFString alloc] initWithUTF8String:master
	                                           length:mid - master];
	serverdesc = sdesc;

		if (listen) {
			ENetAddress address = { ENET_HOST_ANY,
	if (listen) {
		ENetAddress address = { ENET_HOST_ANY, CUBE_SERVINFO_PORT };
				CUBE_SERVINFO_PORT };
			pongsock = enet_socket_create(
			    ENET_SOCKET_TYPE_DATAGRAM, &address);
			if (pongsock == ENET_SOCKET_NULL)
				fatal(@"could not create server info socket\n");
		}
	}
		pongsock =
		    enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM, &address);
		if (pongsock == ENET_SOCKET_NULL)
			fatal(@"could not create server info socket\n");
	}
}
}