Skip to content

Commit e7c6358

Browse files
committed
Updated logging API.
1 parent 4266b85 commit e7c6358

File tree

11 files changed

+137
-125
lines changed

11 files changed

+137
-125
lines changed

src/common.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
HKEY regkey = NULL;
2525

26-
unsigned char log_calls = 0;
26+
enum ipx_log_level min_log_level = LOG_INFO;
2727

2828
static const char *dll_names[] = {
2929
"ipxwrapper.dll",
@@ -49,7 +49,7 @@ BOOL reg_open(REGSAM access) {
4949
int err = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\IPXWrapper", 0, access, &regkey);
5050

5151
if(err != ERROR_SUCCESS) {
52-
log_printf("Could not open registry: %s", w32_error(err));
52+
log_printf(LOG_ERROR, "Could not open registry: %s", w32_error(err));
5353
regkey = NULL;
5454

5555
return FALSE;
@@ -79,7 +79,7 @@ DWORD reg_get_bin(const char *val_name, void *buf, DWORD size) {
7979

8080
if(err != ERROR_SUCCESS) {
8181
if(err != ERROR_FILE_NOT_FOUND) {
82-
log_printf("Error reading registry value: %s", w32_error(err));
82+
log_printf(LOG_ERROR, "Error reading registry value: %s", w32_error(err));
8383
}
8484

8585
return 0;
@@ -100,7 +100,7 @@ void load_dll(unsigned int dllnum) {
100100
GetSystemDirectory(path, sizeof(path));
101101

102102
if(strlen(path) + strlen(dll_names[dllnum]) + 2 > sizeof(path)) {
103-
log_printf("Path buffer too small, cannot load %s", dll_names[dllnum]);
103+
log_printf(LOG_ERROR, "Path buffer too small, cannot load %s", dll_names[dllnum]);
104104
abort();
105105
}
106106

@@ -112,7 +112,7 @@ void load_dll(unsigned int dllnum) {
112112

113113
dll_handles[dllnum] = LoadLibrary(dll);
114114
if(!dll_handles[dllnum]) {
115-
log_printf("Error loading %s: %s", dll, w32_error(GetLastError()));
115+
log_printf(LOG_ERROR, "Error loading %s: %s", dll, w32_error(GetLastError()));
116116
abort();
117117
}
118118
}
@@ -135,15 +135,13 @@ void __stdcall *find_sym(unsigned int dllnum, const char *symbol) {
135135

136136
void *ptr = GetProcAddress(dll_handles[dllnum], symbol);
137137
if(!ptr) {
138-
log_printf("Missing symbol in %s: %s", dll_names[dllnum], symbol);
138+
log_printf(LOG_ERROR, "Missing symbol in %s: %s", dll_names[dllnum], symbol);
139139
abort();
140140
}
141141

142142
return ptr;
143143
}
144144

145145
void __stdcall log_call(unsigned int dllnum, const char *symbol) {
146-
if(log_calls) {
147-
log_printf("%s:%s", dll_names[dllnum], symbol);
148-
}
146+
log_printf(LOG_CALL, "%s:%s", dll_names[dllnum], symbol);
149147
}

src/common.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,17 @@
4242
(unsigned int)(unsigned char)(node[5]) \
4343
)
4444

45-
extern HKEY regkey;
45+
enum ipx_log_level {
46+
LOG_CALL = 1,
47+
LOG_DEBUG,
48+
LOG_INFO = 4,
49+
LOG_WARNING,
50+
LOG_ERROR
51+
};
4652

47-
extern unsigned char log_calls;
53+
extern HKEY regkey;
4854

49-
void log_printf(const char *fmt, ...);
55+
extern enum ipx_log_level min_log_level;
5056

5157
const char *w32_error(DWORD errnum);
5258

@@ -64,6 +70,6 @@ void __stdcall log_call(unsigned int dllnum, const char *symbol);
6470

6571
void log_open(const char *file);
6672
void log_close();
67-
void log_printf(const char *fmt, ...);
73+
void log_printf(enum ipx_log_level level, const char *fmt, ...);
6874

6975
#endif /* !IPXWRAPPER_COMMON_H */

src/directplay.c

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ struct sp_data {
4343
#define DISCOVERY_SOCKET 42367
4444
#define API_HEADER_SIZE sizeof(struct sockaddr_ipx)
4545

46-
#define CALL(n) if(log_calls) { log_printf("DirectPlay: %s", n); }
46+
#define CALL(func) log_printf(LOG_CALL, "directplay.c: " func);
4747

4848
/* Lock the object mutex and return the data pointer */
4949
static struct sp_data *get_sp_data(IDirectPlaySP *sp) {
@@ -52,7 +52,7 @@ static struct sp_data *get_sp_data(IDirectPlaySP *sp) {
5252

5353
HRESULT r = IDirectPlaySP_GetSPData(sp, (void**)&data, &size, DPGET_LOCAL);
5454
if(r != DP_OK) {
55-
log_printf("GetSPData: %d", (int)r);
55+
log_printf(LOG_ERROR, "GetSPData: %d", (int)r);
5656
abort();
5757
}
5858

@@ -76,13 +76,13 @@ static BOOL recv_packet(int sockfd, char *buf, IDirectPlaySP *sp) {
7676
return TRUE;
7777
}
7878

79-
log_printf("Read error (IPX): %s", w32_error(WSAGetLastError()));
79+
log_printf(LOG_ERROR, "Read error (IPX): %s", w32_error(WSAGetLastError()));
8080
return FALSE;
8181
}
8282

8383
HRESULT h = IDirectPlaySP_HandleMessage(sp, buf, r, &addr);
8484
if(h != DP_OK) {
85-
log_printf("HandleMessage error: %d", (int)h);
85+
log_printf(LOG_ERROR, "HandleMessage error: %d", (int)h);
8686
}
8787

8888
return TRUE;
@@ -116,7 +116,7 @@ static DWORD WINAPI worker_main(LPVOID sp) {
116116
}
117117

118118
if(sp_data->ns_sock != -1 && !recv_packet(sp_data->ns_sock, buf, sp)) {
119-
log_printf("Closing ns_sock due to error");
119+
log_printf(LOG_ERROR, "Closing ns_sock due to error");
120120

121121
get_sp_data((IDirectPlaySP*)sp);
122122

@@ -140,7 +140,7 @@ static BOOL init_worker(IDirectPlaySP *sp) {
140140

141141
sp_data->worker_thread = CreateThread(NULL, 0, &worker_main, sp, 0, NULL);
142142
if(!sp_data->worker_thread) {
143-
log_printf("Failed to create worker thread");
143+
log_printf(LOG_ERROR, "Failed to create worker thread");
144144

145145
release_sp_data(sp_data);
146146
return FALSE;
@@ -167,7 +167,7 @@ static HRESULT WINAPI IPX_EnumSessions(LPDPSP_ENUMSESSIONSDATA data) {
167167
addr.sa_socket = htons(DISCOVERY_SOCKET);
168168

169169
if(sendto(sp_data->sock, data->lpMessage + API_HEADER_SIZE, data->dwMessageSize - API_HEADER_SIZE, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
170-
log_printf("sendto failed: %s", w32_error(WSAGetLastError()));
170+
log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError()));
171171

172172
release_sp_data(sp_data);
173173
return DPERR_GENERIC;
@@ -184,7 +184,7 @@ static BOOL send_get_addr(struct sockaddr_ipx *addr, IDirectPlaySP *sp, DPID pla
184184

185185
HRESULT r = IDirectPlaySP_GetSPPlayerData(sp, player_id, (void**)&addr_p, &size, DPGET_LOCAL);
186186
if(r != DP_OK) {
187-
log_printf("GetSPPlayerData: %d", (int)r);
187+
log_printf(LOG_ERROR, "GetSPPlayerData: %d", (int)r);
188188
return FALSE;
189189
}
190190

@@ -209,7 +209,7 @@ static BOOL send_get_addr(struct sockaddr_ipx *addr, IDirectPlaySP *sp, DPID pla
209209

210210
NO_ADDR:
211211

212-
log_printf("No known address for player ID %u, dropping packet", (unsigned int)player_id);
212+
log_printf(LOG_WARNING, "No known address for player ID %u, dropping packet", (unsigned int)player_id);
213213
return FALSE;
214214
}
215215

@@ -225,7 +225,7 @@ static HRESULT WINAPI IPX_Send(LPDPSP_SENDDATA data) {
225225
struct sp_data *sp_data = get_sp_data(data->lpISP);
226226

227227
if(sendto(sp_data->sock, data->lpMessage + API_HEADER_SIZE, data->dwMessageSize - API_HEADER_SIZE, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
228-
log_printf("sendto failed: %s", w32_error(WSAGetLastError()));
228+
log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError()));
229229

230230
release_sp_data(sp_data);
231231
return DPERR_GENERIC;
@@ -245,6 +245,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) {
245245

246246
if(data->dwPriority || data->dwTimeout) {
247247
log_printf(
248+
LOG_ERROR,
248249
"SendEx called with dwPriority = %u, dwTimeout = %u",
249250
(unsigned int)(data->dwPriority),
250251
(unsigned int)(data->dwTimeout)
@@ -262,7 +263,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) {
262263

263264
for(i = 0; i < data->cBuffers; i++) {
264265
if(off + data->lpSendBuffers[i].len > data->dwMessageSize) {
265-
log_printf("dwMessageSize too small, aborting");
266+
log_printf(LOG_ERROR, "dwMessageSize too small, aborting");
266267
return DPERR_GENERIC;
267268
}
268269

@@ -279,7 +280,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) {
279280
struct sp_data *sp_data = get_sp_data(data->lpISP);
280281

281282
if(sendto(sp_data->sock, buf, off, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
282-
log_printf("sendto failed: %s", w32_error(WSAGetLastError()));
283+
log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError()));
283284

284285
release_sp_data(sp_data);
285286
return DPERR_GENERIC;
@@ -302,7 +303,7 @@ static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) {
302303

303304
HRESULT r = IDirectPlaySP_GetSPPlayerData(data->lpISP, data->idNameServer, (void**)&addr_p, &size, DPGET_LOCAL);
304305
if(r != DP_OK) {
305-
log_printf("GetSPPlayerData: %d", (int)r);
306+
log_printf(LOG_ERROR, "GetSPPlayerData: %d", (int)r);
306307
}else if(addr_p) {
307308
memcpy(&(sp_data->ns_addr), addr_p, sizeof(struct sockaddr_ipx));
308309
sp_data->ns_id = data->idNameServer;
@@ -312,7 +313,7 @@ static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) {
312313
/* Do the actual sending */
313314

314315
if(sendto(sp_data->sock, data->lpMessage + API_HEADER_SIZE, data->dwMessageSize - API_HEADER_SIZE, 0, (struct sockaddr*)data->lpSPMessageHeader, sizeof(struct sockaddr_ipx)) == -1) {
315-
log_printf("sendto failed: %s", w32_error(WSAGetLastError()));
316+
log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError()));
316317

317318
release_sp_data(sp_data);
318319
return DPERR_GENERIC;
@@ -328,7 +329,7 @@ static HRESULT WINAPI IPX_CreatePlayer(LPDPSP_CREATEPLAYERDATA data) {
328329
if(data->lpSPMessageHeader) {
329330
HRESULT r = IDirectPlaySP_SetSPPlayerData(data->lpISP, data->idPlayer, data->lpSPMessageHeader, sizeof(struct sockaddr_ipx), DPSET_LOCAL);
330331
if(r != DP_OK) {
331-
log_printf("SetSPPlayerData: %d", (int)r);
332+
log_printf(LOG_ERROR, "SetSPPlayerData: %d", (int)r);
332333
return DPERR_GENERIC;
333334
}
334335
}
@@ -378,7 +379,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
378379
if((sp_data->ns_sock = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == -1) {
379380
release_sp_data(sp_data);
380381

381-
log_printf("Cannot create ns_sock: %s", w32_error(WSAGetLastError()));
382+
log_printf(LOG_ERROR, "Cannot create ns_sock: %s", w32_error(WSAGetLastError()));
382383
return DPERR_CANNOTCREATESERVER;
383384
}
384385

@@ -397,7 +398,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
397398

398399
release_sp_data(sp_data);
399400

400-
log_printf("Cannot bind ns_sock: %s", w32_error(WSAGetLastError()));
401+
log_printf(LOG_ERROR, "Cannot bind ns_sock: %s", w32_error(WSAGetLastError()));
401402
return DPERR_CANNOTCREATESERVER;
402403
}
403404

@@ -407,7 +408,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
407408

408409
release_sp_data(sp_data);
409410

410-
log_printf("WSAEventSelect failed: %s", w32_error(WSAGetLastError()));
411+
log_printf(LOG_ERROR, "WSAEventSelect failed: %s", w32_error(WSAGetLastError()));
411412
return DPERR_CANNOTCREATESERVER;
412413
}
413414
}
@@ -446,7 +447,7 @@ static HRESULT WINAPI IPX_ShutdownEx(LPDPSP_SHUTDOWNDATA data) {
446447

447448
if(sp_data->worker_thread) {
448449
if(WaitForSingleObject(sp_data->worker_thread, 3000) == WAIT_TIMEOUT) {
449-
log_printf("DirectPlay worker didn't exit in 3 seconds, killing");
450+
log_printf(LOG_WARNING, "DirectPlay worker didn't exit in 3 seconds, killing");
450451
TerminateThread(sp_data->worker_thread, 0);
451452
}
452453

@@ -472,20 +473,20 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) {
472473
return r_SPInit(data);
473474
}
474475

475-
log_printf("SPInit: %p (lpAddress = %p, dwAddressSize = %u)", data->lpISP, data->lpAddress, (unsigned int)(data->dwAddressSize));
476+
log_printf(LOG_DEBUG, "SPInit: %p (lpAddress = %p, dwAddressSize = %u)", data->lpISP, data->lpAddress, (unsigned int)(data->dwAddressSize));
476477

477478
{
478479
struct sp_data *sp_data;
479480
DWORD size;
480481

481482
HRESULT r = IDirectPlaySP_GetSPData(data->lpISP, (void**)&sp_data, &size, DPGET_LOCAL);
482483
if(r != DP_OK) {
483-
log_printf("SPInit: GetSPData: %d", r);
484+
log_printf(LOG_ERROR, "SPInit: GetSPData: %d", r);
484485
return DPERR_UNAVAILABLE;
485486
}
486487

487488
if(sp_data) {
488-
log_printf("SPInit: Already initialised, returning DP_OK");
489+
log_printf(LOG_DEBUG, "SPInit: Already initialised, returning DP_OK");
489490
return DP_OK;
490491
}
491492
}
@@ -496,17 +497,17 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) {
496497
}
497498

498499
if(!InitializeCriticalSectionAndSpinCount(&(sp_data->lock), 0x80000000)) {
499-
log_printf("Error initialising critical section: %s", w32_error(GetLastError()));
500+
log_printf(LOG_ERROR, "Error initialising critical section: %s", w32_error(GetLastError()));
500501
goto FAIL2;
501502
}
502503

503504
if((sp_data->event = WSACreateEvent()) == WSA_INVALID_EVENT) {
504-
log_printf("Error creating WSA event object: %s", w32_error(WSAGetLastError()));
505+
log_printf(LOG_ERROR, "Error creating WSA event object: %s", w32_error(WSAGetLastError()));
505506
goto FAIL3;
506507
}
507508

508509
if((sp_data->sock = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == -1) {
509-
log_printf("Error creating IPX socket: %s", w32_error(WSAGetLastError()));
510+
log_printf(LOG_ERROR, "Error creating IPX socket: %s", w32_error(WSAGetLastError()));
510511
goto FAIL4;
511512
}
512513

@@ -515,14 +516,14 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) {
515516
addr.sa_family = AF_IPX;
516517

517518
if(bind(sp_data->sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
518-
log_printf("Error binding IPX socket: %s", w32_error(WSAGetLastError()));
519+
log_printf(LOG_ERROR, "Error binding IPX socket: %s", w32_error(WSAGetLastError()));
519520
goto FAIL5;
520521
}
521522

522523
int addrlen = sizeof(sp_data->addr);
523524

524525
if(getsockname(sp_data->sock, (struct sockaddr*)&(sp_data->addr), &addrlen) == -1) {
525-
log_printf("getsockname failed: %s", w32_error(WSAGetLastError()));
526+
log_printf(LOG_ERROR, "getsockname failed: %s", w32_error(WSAGetLastError()));
526527
goto FAIL5;
527528
}
528529

@@ -535,13 +536,13 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) {
535536
setsockopt(sp_data->sock, SOL_SOCKET, SO_BROADCAST, (char*)&bcast, sizeof(BOOL));
536537

537538
if(WSAEventSelect(sp_data->sock, sp_data->event, FD_READ) == -1) {
538-
log_printf("WSAEventSelect failed: %s", w32_error(WSAGetLastError()));
539+
log_printf(LOG_ERROR, "WSAEventSelect failed: %s", w32_error(WSAGetLastError()));
539540
goto FAIL5;
540541
}
541542

542543
HRESULT r = IDirectPlaySP_SetSPData(data->lpISP, sp_data, sizeof(*sp_data), DPSET_LOCAL);
543544
if(r != DP_OK) {
544-
log_printf("SetSPData: %d", (int)r);
545+
log_printf(LOG_ERROR, "SetSPData: %d", (int)r);
545546
goto FAIL5;
546547
}
547548

@@ -582,7 +583,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) {
582583

583584
reg_open(KEY_QUERY_VALUE);
584585

585-
log_calls = reg_get_char("log_calls", 0);
586+
min_log_level = reg_get_dword("min_log_level", LOG_INFO);
586587

587588
reg_close();
588589
}else if(why == DLL_PROCESS_DETACH) {

src/interface.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,21 @@ struct ipx_interface *get_interfaces(int ifnum) {
3131

3232
int err = GetAdaptersInfo(&tbuf, &bufsize);
3333
if(err == ERROR_NO_DATA) {
34-
log_printf("No network interfaces detected!");
34+
log_printf(LOG_WARNING, "No network interfaces detected!");
3535
return NULL;
3636
}else if(err != ERROR_SUCCESS && err != ERROR_BUFFER_OVERFLOW) {
37-
log_printf("Error fetching network interfaces: %s", w32_error(err));
37+
log_printf(LOG_ERROR, "Error fetching network interfaces: %s", w32_error(err));
3838
return NULL;
3939
}
4040

4141
if(!(ifroot = malloc(bufsize))) {
42-
log_printf("Out of memory! (Tried to allocate %u bytes)", (unsigned int)bufsize);
42+
log_printf(LOG_ERROR, "Out of memory! (Tried to allocate %u bytes)", (unsigned int)bufsize);
4343
return NULL;
4444
}
4545

4646
err = GetAdaptersInfo(ifroot, &bufsize);
4747
if(err != ERROR_SUCCESS) {
48-
log_printf("Error fetching network interfaces: %s", w32_error(err));
48+
log_printf(LOG_ERROR, "Error fetching network interfaces: %s", w32_error(err));
4949

5050
free(ifroot);
5151
return NULL;
@@ -80,7 +80,7 @@ struct ipx_interface *get_interfaces(int ifnum) {
8080

8181
struct ipx_interface *nnic = malloc(sizeof(struct ipx_interface));
8282
if(!nnic) {
83-
log_printf("Out of memory! (Tried to allocate %u bytes)", (unsigned int)sizeof(struct ipx_interface));
83+
log_printf(LOG_ERROR, "Out of memory! (Tried to allocate %u bytes)", (unsigned int)sizeof(struct ipx_interface));
8484

8585
free_interfaces(nics);
8686
return NULL;
@@ -111,7 +111,7 @@ struct ipx_interface *get_interfaces(int ifnum) {
111111
const unsigned char hamachi_bug[] = {0x7A, 0x79, 0x00, 0x00, 0x00, 0x00};
112112

113113
if(strcmp(ifptr->Description, "Hamachi Network Interface") == 0 && memcmp(nnic->ipx_node, hamachi_bug, 6) == 0) {
114-
log_printf("Invalid Hamachi interface detected, correcting node number");
114+
log_printf(LOG_WARNING, "Invalid Hamachi interface detected, correcting node number");
115115
memcpy(nnic->ipx_node + 2, &(nnic->ipaddr), 4);
116116
}
117117

0 commit comments

Comments
 (0)