From e7c63580447ed47f3f6609022a7bfb028edf4dd7 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Wed, 16 Nov 2011 21:32:59 +0000 Subject: [PATCH] Updated logging API. --- src/common.c | 16 ++++----- src/common.h | 14 +++++--- src/directplay.c | 61 +++++++++++++++++----------------- src/interface.c | 12 +++---- src/ipxconfig.cpp | 12 +++++-- src/ipxwrapper.c | 18 +++++----- src/log.c | 3 +- src/router-exe.c | 2 +- src/router.c | 84 +++++++++++++++++++++++------------------------ src/stubdll.c | 2 +- src/winsock.c | 38 ++++++++++----------- 11 files changed, 137 insertions(+), 125 deletions(-) diff --git a/src/common.c b/src/common.c index e82c226..5786bf2 100644 --- a/src/common.c +++ b/src/common.c @@ -23,7 +23,7 @@ HKEY regkey = NULL; -unsigned char log_calls = 0; +enum ipx_log_level min_log_level = LOG_INFO; static const char *dll_names[] = { "ipxwrapper.dll", @@ -49,7 +49,7 @@ BOOL reg_open(REGSAM access) { int err = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\IPXWrapper", 0, access, ®key); if(err != ERROR_SUCCESS) { - log_printf("Could not open registry: %s", w32_error(err)); + log_printf(LOG_ERROR, "Could not open registry: %s", w32_error(err)); regkey = NULL; return FALSE; @@ -79,7 +79,7 @@ DWORD reg_get_bin(const char *val_name, void *buf, DWORD size) { if(err != ERROR_SUCCESS) { if(err != ERROR_FILE_NOT_FOUND) { - log_printf("Error reading registry value: %s", w32_error(err)); + log_printf(LOG_ERROR, "Error reading registry value: %s", w32_error(err)); } return 0; @@ -100,7 +100,7 @@ void load_dll(unsigned int dllnum) { GetSystemDirectory(path, sizeof(path)); if(strlen(path) + strlen(dll_names[dllnum]) + 2 > sizeof(path)) { - log_printf("Path buffer too small, cannot load %s", dll_names[dllnum]); + log_printf(LOG_ERROR, "Path buffer too small, cannot load %s", dll_names[dllnum]); abort(); } @@ -112,7 +112,7 @@ void load_dll(unsigned int dllnum) { dll_handles[dllnum] = LoadLibrary(dll); if(!dll_handles[dllnum]) { - log_printf("Error loading %s: %s", dll, w32_error(GetLastError())); + log_printf(LOG_ERROR, "Error loading %s: %s", dll, w32_error(GetLastError())); abort(); } } @@ -135,7 +135,7 @@ void __stdcall *find_sym(unsigned int dllnum, const char *symbol) { void *ptr = GetProcAddress(dll_handles[dllnum], symbol); if(!ptr) { - log_printf("Missing symbol in %s: %s", dll_names[dllnum], symbol); + log_printf(LOG_ERROR, "Missing symbol in %s: %s", dll_names[dllnum], symbol); abort(); } @@ -143,7 +143,5 @@ void __stdcall *find_sym(unsigned int dllnum, const char *symbol) { } void __stdcall log_call(unsigned int dllnum, const char *symbol) { - if(log_calls) { - log_printf("%s:%s", dll_names[dllnum], symbol); - } + log_printf(LOG_CALL, "%s:%s", dll_names[dllnum], symbol); } diff --git a/src/common.h b/src/common.h index 183fd2f..181ec5a 100644 --- a/src/common.h +++ b/src/common.h @@ -42,11 +42,17 @@ (unsigned int)(unsigned char)(node[5]) \ ) +enum ipx_log_level { + LOG_CALL = 1, + LOG_DEBUG, + LOG_INFO = 4, + LOG_WARNING, + LOG_ERROR +}; + extern HKEY regkey; -extern unsigned char log_calls; - -void log_printf(const char *fmt, ...); +extern enum ipx_log_level min_log_level; const char *w32_error(DWORD errnum); @@ -64,6 +70,6 @@ void __stdcall log_call(unsigned int dllnum, const char *symbol); void log_open(const char *file); void log_close(); -void log_printf(const char *fmt, ...); +void log_printf(enum ipx_log_level level, const char *fmt, ...); #endif /* !IPXWRAPPER_COMMON_H */ diff --git a/src/directplay.c b/src/directplay.c index b069be6..8a3d637 100644 --- a/src/directplay.c +++ b/src/directplay.c @@ -43,7 +43,7 @@ struct sp_data { #define DISCOVERY_SOCKET 42367 #define API_HEADER_SIZE sizeof(struct sockaddr_ipx) -#define CALL(n) if(log_calls) { log_printf("DirectPlay: %s", n); } +#define CALL(func) log_printf(LOG_CALL, "directplay.c: " func); /* Lock the object mutex and return the data pointer */ static struct sp_data *get_sp_data(IDirectPlaySP *sp) { @@ -52,7 +52,7 @@ static struct sp_data *get_sp_data(IDirectPlaySP *sp) { HRESULT r = IDirectPlaySP_GetSPData(sp, (void**)&data, &size, DPGET_LOCAL); if(r != DP_OK) { - log_printf("GetSPData: %d", (int)r); + log_printf(LOG_ERROR, "GetSPData: %d", (int)r); abort(); } @@ -76,13 +76,13 @@ static BOOL recv_packet(int sockfd, char *buf, IDirectPlaySP *sp) { return TRUE; } - log_printf("Read error (IPX): %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Read error (IPX): %s", w32_error(WSAGetLastError())); return FALSE; } HRESULT h = IDirectPlaySP_HandleMessage(sp, buf, r, &addr); if(h != DP_OK) { - log_printf("HandleMessage error: %d", (int)h); + log_printf(LOG_ERROR, "HandleMessage error: %d", (int)h); } return TRUE; @@ -116,7 +116,7 @@ static DWORD WINAPI worker_main(LPVOID sp) { } if(sp_data->ns_sock != -1 && !recv_packet(sp_data->ns_sock, buf, sp)) { - log_printf("Closing ns_sock due to error"); + log_printf(LOG_ERROR, "Closing ns_sock due to error"); get_sp_data((IDirectPlaySP*)sp); @@ -140,7 +140,7 @@ static BOOL init_worker(IDirectPlaySP *sp) { sp_data->worker_thread = CreateThread(NULL, 0, &worker_main, sp, 0, NULL); if(!sp_data->worker_thread) { - log_printf("Failed to create worker thread"); + log_printf(LOG_ERROR, "Failed to create worker thread"); release_sp_data(sp_data); return FALSE; @@ -167,7 +167,7 @@ static HRESULT WINAPI IPX_EnumSessions(LPDPSP_ENUMSESSIONSDATA data) { addr.sa_socket = htons(DISCOVERY_SOCKET); if(sendto(sp_data->sock, data->lpMessage + API_HEADER_SIZE, data->dwMessageSize - API_HEADER_SIZE, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("sendto failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError())); release_sp_data(sp_data); return DPERR_GENERIC; @@ -184,7 +184,7 @@ static BOOL send_get_addr(struct sockaddr_ipx *addr, IDirectPlaySP *sp, DPID pla HRESULT r = IDirectPlaySP_GetSPPlayerData(sp, player_id, (void**)&addr_p, &size, DPGET_LOCAL); if(r != DP_OK) { - log_printf("GetSPPlayerData: %d", (int)r); + log_printf(LOG_ERROR, "GetSPPlayerData: %d", (int)r); return FALSE; } @@ -209,7 +209,7 @@ static BOOL send_get_addr(struct sockaddr_ipx *addr, IDirectPlaySP *sp, DPID pla NO_ADDR: - log_printf("No known address for player ID %u, dropping packet", (unsigned int)player_id); + log_printf(LOG_WARNING, "No known address for player ID %u, dropping packet", (unsigned int)player_id); return FALSE; } @@ -225,7 +225,7 @@ static HRESULT WINAPI IPX_Send(LPDPSP_SENDDATA data) { struct sp_data *sp_data = get_sp_data(data->lpISP); if(sendto(sp_data->sock, data->lpMessage + API_HEADER_SIZE, data->dwMessageSize - API_HEADER_SIZE, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("sendto failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError())); release_sp_data(sp_data); return DPERR_GENERIC; @@ -245,6 +245,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) { if(data->dwPriority || data->dwTimeout) { log_printf( + LOG_ERROR, "SendEx called with dwPriority = %u, dwTimeout = %u", (unsigned int)(data->dwPriority), (unsigned int)(data->dwTimeout) @@ -262,7 +263,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) { for(i = 0; i < data->cBuffers; i++) { if(off + data->lpSendBuffers[i].len > data->dwMessageSize) { - log_printf("dwMessageSize too small, aborting"); + log_printf(LOG_ERROR, "dwMessageSize too small, aborting"); return DPERR_GENERIC; } @@ -279,7 +280,7 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) { struct sp_data *sp_data = get_sp_data(data->lpISP); if(sendto(sp_data->sock, buf, off, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("sendto failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError())); release_sp_data(sp_data); return DPERR_GENERIC; @@ -302,7 +303,7 @@ static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) { HRESULT r = IDirectPlaySP_GetSPPlayerData(data->lpISP, data->idNameServer, (void**)&addr_p, &size, DPGET_LOCAL); if(r != DP_OK) { - log_printf("GetSPPlayerData: %d", (int)r); + log_printf(LOG_ERROR, "GetSPPlayerData: %d", (int)r); }else if(addr_p) { memcpy(&(sp_data->ns_addr), addr_p, sizeof(struct sockaddr_ipx)); sp_data->ns_id = data->idNameServer; @@ -312,7 +313,7 @@ static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) { /* Do the actual sending */ 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) { - log_printf("sendto failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "sendto failed: %s", w32_error(WSAGetLastError())); release_sp_data(sp_data); return DPERR_GENERIC; @@ -328,7 +329,7 @@ static HRESULT WINAPI IPX_CreatePlayer(LPDPSP_CREATEPLAYERDATA data) { if(data->lpSPMessageHeader) { HRESULT r = IDirectPlaySP_SetSPPlayerData(data->lpISP, data->idPlayer, data->lpSPMessageHeader, sizeof(struct sockaddr_ipx), DPSET_LOCAL); if(r != DP_OK) { - log_printf("SetSPPlayerData: %d", (int)r); + log_printf(LOG_ERROR, "SetSPPlayerData: %d", (int)r); return DPERR_GENERIC; } } @@ -378,7 +379,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) { if((sp_data->ns_sock = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == -1) { release_sp_data(sp_data); - log_printf("Cannot create ns_sock: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Cannot create ns_sock: %s", w32_error(WSAGetLastError())); return DPERR_CANNOTCREATESERVER; } @@ -397,7 +398,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) { release_sp_data(sp_data); - log_printf("Cannot bind ns_sock: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Cannot bind ns_sock: %s", w32_error(WSAGetLastError())); return DPERR_CANNOTCREATESERVER; } @@ -407,7 +408,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) { release_sp_data(sp_data); - log_printf("WSAEventSelect failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "WSAEventSelect failed: %s", w32_error(WSAGetLastError())); return DPERR_CANNOTCREATESERVER; } } @@ -446,7 +447,7 @@ static HRESULT WINAPI IPX_ShutdownEx(LPDPSP_SHUTDOWNDATA data) { if(sp_data->worker_thread) { if(WaitForSingleObject(sp_data->worker_thread, 3000) == WAIT_TIMEOUT) { - log_printf("DirectPlay worker didn't exit in 3 seconds, killing"); + log_printf(LOG_WARNING, "DirectPlay worker didn't exit in 3 seconds, killing"); TerminateThread(sp_data->worker_thread, 0); } @@ -472,7 +473,7 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) { return r_SPInit(data); } - log_printf("SPInit: %p (lpAddress = %p, dwAddressSize = %u)", data->lpISP, data->lpAddress, (unsigned int)(data->dwAddressSize)); + log_printf(LOG_DEBUG, "SPInit: %p (lpAddress = %p, dwAddressSize = %u)", data->lpISP, data->lpAddress, (unsigned int)(data->dwAddressSize)); { struct sp_data *sp_data; @@ -480,12 +481,12 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) { HRESULT r = IDirectPlaySP_GetSPData(data->lpISP, (void**)&sp_data, &size, DPGET_LOCAL); if(r != DP_OK) { - log_printf("SPInit: GetSPData: %d", r); + log_printf(LOG_ERROR, "SPInit: GetSPData: %d", r); return DPERR_UNAVAILABLE; } if(sp_data) { - log_printf("SPInit: Already initialised, returning DP_OK"); + log_printf(LOG_DEBUG, "SPInit: Already initialised, returning DP_OK"); return DP_OK; } } @@ -496,17 +497,17 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) { } if(!InitializeCriticalSectionAndSpinCount(&(sp_data->lock), 0x80000000)) { - log_printf("Error initialising critical section: %s", w32_error(GetLastError())); + log_printf(LOG_ERROR, "Error initialising critical section: %s", w32_error(GetLastError())); goto FAIL2; } if((sp_data->event = WSACreateEvent()) == WSA_INVALID_EVENT) { - log_printf("Error creating WSA event object: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error creating WSA event object: %s", w32_error(WSAGetLastError())); goto FAIL3; } if((sp_data->sock = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX)) == -1) { - log_printf("Error creating IPX socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error creating IPX socket: %s", w32_error(WSAGetLastError())); goto FAIL4; } @@ -515,14 +516,14 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) { addr.sa_family = AF_IPX; if(bind(sp_data->sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("Error binding IPX socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error binding IPX socket: %s", w32_error(WSAGetLastError())); goto FAIL5; } int addrlen = sizeof(sp_data->addr); if(getsockname(sp_data->sock, (struct sockaddr*)&(sp_data->addr), &addrlen) == -1) { - log_printf("getsockname failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "getsockname failed: %s", w32_error(WSAGetLastError())); goto FAIL5; } @@ -535,13 +536,13 @@ HRESULT WINAPI SPInit(LPSPINITDATA data) { setsockopt(sp_data->sock, SOL_SOCKET, SO_BROADCAST, (char*)&bcast, sizeof(BOOL)); if(WSAEventSelect(sp_data->sock, sp_data->event, FD_READ) == -1) { - log_printf("WSAEventSelect failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "WSAEventSelect failed: %s", w32_error(WSAGetLastError())); goto FAIL5; } HRESULT r = IDirectPlaySP_SetSPData(data->lpISP, sp_data, sizeof(*sp_data), DPSET_LOCAL); if(r != DP_OK) { - log_printf("SetSPData: %d", (int)r); + log_printf(LOG_ERROR, "SetSPData: %d", (int)r); goto FAIL5; } @@ -582,7 +583,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { reg_open(KEY_QUERY_VALUE); - log_calls = reg_get_char("log_calls", 0); + min_log_level = reg_get_dword("min_log_level", LOG_INFO); reg_close(); }else if(why == DLL_PROCESS_DETACH) { diff --git a/src/interface.c b/src/interface.c index 8c519cb..47a8c4b 100644 --- a/src/interface.c +++ b/src/interface.c @@ -31,21 +31,21 @@ struct ipx_interface *get_interfaces(int ifnum) { int err = GetAdaptersInfo(&tbuf, &bufsize); if(err == ERROR_NO_DATA) { - log_printf("No network interfaces detected!"); + log_printf(LOG_WARNING, "No network interfaces detected!"); return NULL; }else if(err != ERROR_SUCCESS && err != ERROR_BUFFER_OVERFLOW) { - log_printf("Error fetching network interfaces: %s", w32_error(err)); + log_printf(LOG_ERROR, "Error fetching network interfaces: %s", w32_error(err)); return NULL; } if(!(ifroot = malloc(bufsize))) { - log_printf("Out of memory! (Tried to allocate %u bytes)", (unsigned int)bufsize); + log_printf(LOG_ERROR, "Out of memory! (Tried to allocate %u bytes)", (unsigned int)bufsize); return NULL; } err = GetAdaptersInfo(ifroot, &bufsize); if(err != ERROR_SUCCESS) { - log_printf("Error fetching network interfaces: %s", w32_error(err)); + log_printf(LOG_ERROR, "Error fetching network interfaces: %s", w32_error(err)); free(ifroot); return NULL; @@ -80,7 +80,7 @@ struct ipx_interface *get_interfaces(int ifnum) { struct ipx_interface *nnic = malloc(sizeof(struct ipx_interface)); if(!nnic) { - log_printf("Out of memory! (Tried to allocate %u bytes)", (unsigned int)sizeof(struct ipx_interface)); + log_printf(LOG_ERROR, "Out of memory! (Tried to allocate %u bytes)", (unsigned int)sizeof(struct ipx_interface)); free_interfaces(nics); return NULL; @@ -111,7 +111,7 @@ struct ipx_interface *get_interfaces(int ifnum) { const unsigned char hamachi_bug[] = {0x7A, 0x79, 0x00, 0x00, 0x00, 0x00}; if(strcmp(ifptr->Description, "Hamachi Network Interface") == 0 && memcmp(nnic->ipx_node, hamachi_bug, 6) == 0) { - log_printf("Invalid Hamachi interface detected, correcting node number"); + log_printf(LOG_WARNING, "Invalid Hamachi interface detected, correcting node number"); memcpy(nnic->ipx_node + 2, &(nnic->ipaddr), 4); } diff --git a/src/ipxconfig.cpp b/src/ipxconfig.cpp index 94634b7..cb1471c 100644 --- a/src/ipxconfig.cpp +++ b/src/ipxconfig.cpp @@ -319,8 +319,12 @@ int main() { global_conf.filter = 1; } - if(reg_read("log_calls", &log_calls, 1) != 1) { + DWORD min_log_level; + + if(reg_read("min_log_level", &min_log_level, sizeof(DWORD)) != sizeof(DWORD) || min_log_level >= 4) { log_calls = 0; + }else{ + log_calls = 1; } get_nics(); @@ -507,7 +511,9 @@ static bool save_config() { } } - if(!reg_write("global", &global_conf, sizeof(global_conf)) || !reg_write("log_calls", &log_calls, 1)) { + DWORD min_log_level = log_calls ? 1 : 4; + + if(!reg_write("global", &global_conf, sizeof(global_conf)) || !reg_write("min_log_level", &min_log_level, sizeof(DWORD))) { return false; } @@ -700,7 +706,7 @@ static void init_windows() { windows.opt_w95 = create_child(windows.opt_group, 0, 0, 0, 0, "BUTTON", "Enable Windows 95 SO_BROADCAST bug", BS_AUTOCHECKBOX | WS_TABSTOP, 0, ID_OPT_W95); windows.opt_bcast = create_child(windows.opt_group, 0, 0, 0, 0, "BUTTON", "Send broadcast packets to all subnets", BS_AUTOCHECKBOX | WS_TABSTOP, 0, ID_OPT_BCAST); windows.opt_filter = create_child(windows.opt_group, 0, 0, 0, 0, "BUTTON", "Filter receieved packets by subnet", BS_AUTOCHECKBOX | WS_TABSTOP, 0, ID_OPT_FILTER); - windows.opt_log = create_child(windows.opt_group, 0, 0, 0, 0, "BUTTON", "Log all WinSock API calls", BS_AUTOCHECKBOX | WS_TABSTOP, 0, ID_OPT_LOG); + windows.opt_log = create_child(windows.opt_group, 0, 0, 0, 0, "BUTTON", "Enable verbose logging", BS_AUTOCHECKBOX | WS_TABSTOP, 0, ID_OPT_LOG); Button_SetCheck(windows.opt_w95, global_conf.w95_bug ? BST_CHECKED : BST_UNCHECKED); Button_SetCheck(windows.opt_bcast, global_conf.bcast_all ? BST_CHECKED : BST_UNCHECKED); diff --git a/src/ipxwrapper.c b/src/ipxwrapper.c index 377cb5c..8ec4ed1 100644 --- a/src/ipxwrapper.c +++ b/src/ipxwrapper.c @@ -60,7 +60,7 @@ static time_t local_updated = 0; static BOOL init_cs(CRITICAL_SECTION *cs, int *counter) { if(!InitializeCriticalSectionAndSpinCount(cs, 0x80000000)) { - log_printf("Failed to initialise critical section: %s", w32_error(GetLastError())); + log_printf(LOG_ERROR, "Failed to initialise critical section: %s", w32_error(GetLastError())); return FALSE; } @@ -77,8 +77,8 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { if(why == DLL_PROCESS_ATTACH) { log_open("ipxwrapper.log"); - log_printf("IPXWrapper %s", version_string); - log_printf("Compiled at %s", compile_time); + log_printf(LOG_INFO, "IPXWrapper %s", version_string); + log_printf(LOG_INFO, "Compiled at %s", compile_time); if(!rclient_init(&g_rclient)) { return FALSE; @@ -93,6 +93,8 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { global_conf.filter = 1; } + min_log_level = reg_get_dword("min_log_level", LOG_INFO); + INIT_CS(&sockets_cs); INIT_CS(&hosts_cs); INIT_CS(&addrs_cs); @@ -100,7 +102,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { WSADATA wsdata; int err = WSAStartup(MAKEWORD(1,1), &wsdata); if(err) { - log_printf("Failed to initialize winsock: %s", w32_error(err)); + log_printf(LOG_ERROR, "Failed to initialize winsock: %s", w32_error(err)); return FALSE; } @@ -114,7 +116,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { /* Create UDP socket for sending packets if not using a private router */ if((send_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { - log_printf("Failed to create UDP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to create UDP socket: %s", w32_error(WSAGetLastError())); return FALSE; } @@ -124,7 +126,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { addr.sin_port = 0; if(bind(send_fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("Failed to bind UDP socket (send_fd): %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to bind UDP socket (send_fd): %s", w32_error(WSAGetLastError())); return FALSE; } } @@ -218,7 +220,7 @@ void add_host(const unsigned char *net, const unsigned char *node, uint32_t ipad if(!hptr) { LeaveCriticalSection(&hosts_cs); - log_printf("No memory for hosts list entry"); + log_printf(LOG_ERROR, "No memory for hosts list entry"); return; } @@ -293,7 +295,7 @@ BOOL ip_is_local(uint32_t ipaddr) { while(i) { struct ipaddr_list *nn = malloc(sizeof(struct ipaddr_list)); if(!nn) { - log_printf("Out of memory! Can't allocate ipaddr_list structure!"); + log_printf(LOG_ERROR, "Out of memory! Can't allocate ipaddr_list structure!"); break; } diff --git a/src/log.c b/src/log.c index 469e3ae..523bcb2 100644 --- a/src/log.c +++ b/src/log.c @@ -21,6 +21,7 @@ #include #include "ipxwrapper.h" +#include "common.h" static HANDLE log_fh = NULL; static HANDLE log_mutex = NULL; @@ -55,7 +56,7 @@ void log_close() { log_mutex = NULL; } -void log_printf(const char *fmt, ...) { +void log_printf(enum ipx_log_level level, const char *fmt, ...) { DWORD called = GetTickCount(); WaitForSingleObject(log_mutex, INFINITE); diff --git a/src/router-exe.c b/src/router-exe.c index 019f697..b2d8c57 100644 --- a/src/router-exe.c +++ b/src/router-exe.c @@ -78,7 +78,7 @@ int main(int argc, char **argv) { LeaveCriticalSection(&(router->crit_sec)); if(WaitForSingleObject(worker, 3000) == WAIT_TIMEOUT) { - log_printf("Router thread didn't exit in 3 seconds, terminating"); + log_printf(LOG_WARNING, "Router thread didn't exit in 3 seconds, terminating"); TerminateThread(worker, 0); } diff --git a/src/router.c b/src/router.c index 1ad1b1c..ca59bf5 100644 --- a/src/router.c +++ b/src/router.c @@ -35,7 +35,7 @@ static BOOL rclient_do(struct rclient *rclient, struct router_call *call, struct struct router_vars *router_init(BOOL global) { struct router_vars *router = malloc(sizeof(struct router_vars)); if(!router) { - log_printf("Not enough memory to create router_vars!"); + log_printf(LOG_ERROR, "Not enough memory to create router_vars!"); return NULL; } @@ -51,21 +51,21 @@ struct router_vars *router_init(BOOL global) { if(InitializeCriticalSectionAndSpinCount(&(router->crit_sec), 0x80000000)) { router->crit_sec_init = TRUE; }else{ - log_printf("Error creating critical section: %s", w32_error(GetLastError())); + log_printf(LOG_ERROR, "Error creating critical section: %s", w32_error(GetLastError())); router_destroy(router); return NULL; } if((router->wsa_event = WSACreateEvent()) == WSA_INVALID_EVENT) { - log_printf("Error creating WSA event object: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error creating WSA event object: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; } if((router->udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { - log_printf("Error creating UDP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error creating UDP socket: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; @@ -78,7 +78,7 @@ struct router_vars *router_init(BOOL global) { addr.sin_port = htons(global_conf.udp_port); if(bind(router->udp_sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("Error binding UDP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error binding UDP socket: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; @@ -92,14 +92,14 @@ struct router_vars *router_init(BOOL global) { setsockopt(router->udp_sock, SOL_SOCKET, SO_SNDBUF, (char*)&bufsize, sizeof(int)); if(WSAEventSelect(router->udp_sock, router->wsa_event, FD_READ) == -1) { - log_printf("WSAEventSelect error: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "WSAEventSelect error: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; } if(!(router->recvbuf = malloc(sizeof(struct rpacket_header) + MAX_PKT_SIZE))) { - log_printf("Out of memory! Cannot allocate recv buffer"); + log_printf(LOG_ERROR, "Out of memory! Cannot allocate recv buffer"); router_destroy(router); return NULL; @@ -107,7 +107,7 @@ struct router_vars *router_init(BOOL global) { if(global) { if((router->listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - log_printf("Failed to create TCP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to create TCP socket: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; @@ -117,21 +117,21 @@ struct router_vars *router_init(BOOL global) { addr.sin_port = htons(reg_get_dword("control_port", DEFAULT_CONTROL_PORT)); if(bind(router->listener, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("Failed to bind TCP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to bind TCP socket: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; } if(listen(router->listener, 8) == -1) { - log_printf("Failed to listen for connections: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to listen for connections: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; } if(WSAEventSelect(router->listener, router->wsa_event, FD_ACCEPT) == -1) { - log_printf("WSAEventSelect error: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "WSAEventSelect error: %s", w32_error(WSAGetLastError())); router_destroy(router); return NULL; @@ -201,12 +201,12 @@ DWORD router_main(void *arg) { int newfd = accept(router->listener, NULL, NULL); if(newfd != -1) { if(router->client_count == MAX_ROUTER_CLIENTS) { - log_printf("Too many clients, dropping new connection!"); + log_printf(LOG_WARNING, "Too many clients, dropping new connection!"); goto DROP_NEWFD; } if(WSAEventSelect(newfd, router->wsa_event, FD_READ | FD_CLOSE) == -1) { - log_printf("WSAEventSelect error: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "WSAEventSelect error: %s", w32_error(WSAGetLastError())); goto DROP_NEWFD; } @@ -218,7 +218,7 @@ DWORD router_main(void *arg) { closesocket(newfd); } }else if(WSAGetLastError() != WSAEWOULDBLOCK) { - log_printf("Failed to accept client connection: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Failed to accept client connection: %s", w32_error(WSAGetLastError())); } } @@ -234,7 +234,7 @@ DWORD router_main(void *arg) { /* Treat connection reset as regular close */ len = 0; }else{ - log_printf("Error reading from client socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error reading from client socket: %s", w32_error(WSAGetLastError())); } } @@ -264,7 +264,7 @@ DWORD router_main(void *arg) { continue; } - log_printf("Error reading from UDP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error reading from UDP socket: %s", w32_error(WSAGetLastError())); return 1; } @@ -277,7 +277,7 @@ DWORD router_main(void *arg) { continue; } - if(log_calls) { + if(min_log_level >= LOG_DEBUG) { char src_net[12], src_node[18]; NET_TO_STRING(src_net, packet->src_net); NODE_TO_STRING(src_node, packet->src_node); @@ -286,7 +286,7 @@ DWORD router_main(void *arg) { NET_TO_STRING(dest_net, packet->dest_net); NODE_TO_STRING(dest_node, packet->dest_node); - log_printf("Recieved packet from %s/%s (%s) for %s/%s", src_net, src_node, inet_ntoa(addr.sin_addr), dest_net, dest_node); + log_printf(LOG_DEBUG, "Recieved packet from %s/%s (%s) for %s/%s", src_net, src_node, inet_ntoa(addr.sin_addr), dest_net, dest_node); } memset(rp_header, 0, sizeof(*rp_header)); @@ -308,15 +308,13 @@ DWORD router_main(void *arg) { /* Check source address matches remote_addr if set */ (ra->remote_addr.sa_family == AF_UNSPEC || (memcmp(ra->remote_addr.sa_netnum, packet->src_net, 4) == 0 && memcmp(ra->remote_addr.sa_nodenum, packet->src_node, 6) == 0)) ) { - if(log_calls) { - log_printf("Relaying packet to local port %hu", ntohs(ra->local_port)); - } + log_printf(LOG_DEBUG, "Relaying packet to local port %hu", ntohs(ra->local_port)); addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = ra->local_port; if(sendto(router->udp_sock, (char*)rp_header, sizeof(*rp_header) + len, 0, (struct sockaddr*)&addr, sizeof(addr)) == -1) { - log_printf("Error relaying packet: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Error relaying packet: %s", w32_error(WSAGetLastError())); } } @@ -356,7 +354,7 @@ static int router_bind(struct router_vars *router, SOCKET control, SOCKET sock, } if(!iface) { - log_printf("bind failed: no such address"); + log_printf(LOG_ERROR, "bind failed: no such address"); free_interfaces(ifaces); @@ -377,7 +375,7 @@ static int router_bind(struct router_vars *router, SOCKET control, SOCKET sock, EnterCriticalSection(&(router->crit_sec)); if(router_get(router, control, sock)) { - log_printf("bind failed: socket already bound"); + log_printf(LOG_ERROR, "bind failed: socket already bound"); LeaveCriticalSection(&(router->crit_sec)); @@ -397,7 +395,7 @@ static int router_bind(struct router_vars *router, SOCKET control, SOCKET sock, while(a) { if(ntohs(a->addr.sa_socket) == s) { if(s == 65535) { - log_printf("bind failed: out of sockets?!"); + log_printf(LOG_ERROR, "bind failed: out of sockets?!"); LeaveCriticalSection(&(router->crit_sec)); @@ -422,7 +420,7 @@ static int router_bind(struct router_vars *router, SOCKET control, SOCKET sock, while(a) { if(a->addr.sa_socket == addr->sa_socket && (!(a->flags & IPX_REUSE) || !(flags & IPX_REUSE))) { - log_printf("bind failed: requested socket in use"); + log_printf(LOG_ERROR, "bind failed: requested socket in use"); LeaveCriticalSection(&(router->crit_sec)); @@ -608,7 +606,7 @@ static BOOL router_handle_call(struct router_vars *router, int sock, struct rout } default: { - log_printf("Recieved unknown call, dropping client"); + log_printf(LOG_ERROR, "Recieved unknown call, dropping client"); return FALSE; } } @@ -619,7 +617,7 @@ static BOOL router_handle_call(struct router_vars *router, int sock, struct rout char *sbuf = ((char*)&ret) + sent; if((sr = send(sock, sbuf, sizeof(ret) - sent, 0)) == -1) { - log_printf("Send error: %s, dropping client", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Send error: %s, dropping client", w32_error(WSAGetLastError())); return FALSE; } @@ -658,7 +656,7 @@ BOOL rclient_init(struct rclient *rclient) { if(InitializeCriticalSectionAndSpinCount(&(rclient->cs), 0x80000000)) { rclient->cs_init = TRUE; }else{ - log_printf("Failed to initialise critical section: %s", w32_error(GetLastError())); + log_printf(LOG_ERROR, "Failed to initialise critical section: %s", w32_error(GetLastError())); return FALSE; } @@ -676,7 +674,7 @@ BOOL rclient_start(struct rclient *rclient) { } if((rclient->sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - log_printf("Cannot create TCP socket: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Cannot create TCP socket: %s", w32_error(WSAGetLastError())); return FALSE; } @@ -689,12 +687,12 @@ BOOL rclient_start(struct rclient *rclient) { return TRUE; } - log_printf("Cannot connect to router process: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Cannot connect to router process: %s", w32_error(WSAGetLastError())); closesocket(rclient->sock); rclient->sock = -1; - log_printf("Creating private router thread..."); + log_printf(LOG_INFO, "Creating private router thread..."); if(!(rclient->router = router_init(FALSE))) { return FALSE; @@ -702,7 +700,7 @@ BOOL rclient_start(struct rclient *rclient) { rclient->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&router_main, rclient->router, 0, NULL); if(!rclient->thread) { - log_printf("Failed to create router thread: %s", w32_error(GetLastError())); + log_printf(LOG_ERROR, "Failed to create router thread: %s", w32_error(GetLastError())); router_destroy(rclient->router); rclient->router = NULL; @@ -733,7 +731,7 @@ void rclient_stop(struct rclient *rclient) { LeaveCriticalSection(&(rclient->router->crit_sec)); if(WaitForSingleObject(rclient->thread, 3000) == WAIT_TIMEOUT) { - log_printf("Router thread didn't exit in 3 seconds, terminating"); + log_printf(LOG_WARNING, "Router thread didn't exit in 3 seconds, terminating"); TerminateThread(rclient->thread, 0); } @@ -757,7 +755,7 @@ static BOOL rclient_do(struct rclient *rclient, struct router_call *call, struct for(done = 0; done < sizeof(*call);) { if((r = send(rclient->sock, ((char*)call) + done, sizeof(*call) - done, 0)) == -1) { - log_printf("rclient_do: send error: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "rclient_do: send error: %s", w32_error(WSAGetLastError())); LeaveCriticalSection(&(rclient->cs)); return FALSE; @@ -768,12 +766,12 @@ static BOOL rclient_do(struct rclient *rclient, struct router_call *call, struct for(done = 0; done < sizeof(*ret);) { if((r = recv(rclient->sock, ((char*)ret) + done, sizeof(*ret) - done, 0)) == -1) { - log_printf("rclient_do: recv error: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "rclient_do: recv error: %s", w32_error(WSAGetLastError())); LeaveCriticalSection(&(rclient->cs)); return FALSE; }else if(r == 0) { - log_printf("rclient_do: Lost connection"); + log_printf(LOG_ERROR, "rclient_do: Lost connection"); WSASetLastError(WSAECONNRESET); LeaveCriticalSection(&(rclient->cs)); @@ -814,7 +812,7 @@ BOOL rclient_bind(struct rclient *rclient, SOCKET sock, struct sockaddr_ipx *add return router_bind(rclient->router, 0, sock, addr, nic_bcast, reuse) == 0 ? TRUE: FALSE; } - log_printf("rclient_bind: No router?!"); + log_printf(LOG_ERROR, "rclient_bind: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; @@ -838,7 +836,7 @@ BOOL rclient_unbind(struct rclient *rclient, SOCKET sock) { return TRUE; } - log_printf("rclient_unbind: No router?!"); + log_printf(LOG_ERROR, "rclient_unbind: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; @@ -863,7 +861,7 @@ BOOL rclient_set_port(struct rclient *rclient, SOCKET sock, uint16_t port) { return TRUE; } - log_printf("rclient_set_port: No router?!"); + log_printf(LOG_ERROR, "rclient_set_port: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; @@ -888,7 +886,7 @@ BOOL rclient_set_filter(struct rclient *rclient, SOCKET sock, int ptype) { return TRUE; } - log_printf("rclient_set_filter: No router?!"); + log_printf(LOG_ERROR, "rclient_set_filter: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; @@ -925,7 +923,7 @@ BOOL rclient_set_flags(struct rclient *rclient, SOCKET sock, int flags) { return TRUE; } - log_printf("rclient_set_reuse: No router?!"); + log_printf(LOG_ERROR, "rclient_set_reuse: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; @@ -949,7 +947,7 @@ BOOL rclient_set_remote(struct rclient *rclient, SOCKET sock, const struct socka return router_set_remote(rclient->router, 0, sock, addr); } - log_printf("rclient_bind: No router?!"); + log_printf(LOG_ERROR, "rclient_bind: No router?!"); WSASetLastError(WSAENETDOWN); return FALSE; diff --git a/src/stubdll.c b/src/stubdll.c index 2c88d93..b1144ba 100644 --- a/src/stubdll.c +++ b/src/stubdll.c @@ -27,7 +27,7 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { reg_open(KEY_QUERY_VALUE); - log_calls = reg_get_char("log_calls", 0); + min_log_level = reg_get_dword("min_log_level", LOG_INFO); reg_close(); }else if(why == DLL_PROCESS_DETACH) { diff --git a/src/winsock.c b/src/winsock.c index e20d835..bd27edc 100644 --- a/src/winsock.c +++ b/src/winsock.c @@ -153,7 +153,7 @@ INT WINAPI WSHEnumProtocols(LPINT protocols, LPWSTR ign, LPVOID buf, LPDWORD bsp } SOCKET WSAAPI socket(int af, int type, int protocol) { - log_printf("socket(%d, %d, %d)", af, type, protocol); + log_printf(LOG_DEBUG, "socket(%d, %d, %d)", af, type, protocol); if(af == AF_IPX) { ipx_socket *nsock = malloc(sizeof(ipx_socket)); @@ -164,7 +164,7 @@ SOCKET WSAAPI socket(int af, int type, int protocol) { nsock->fd = r_socket(AF_INET, SOCK_DGRAM, 0); if(nsock->fd == -1) { - log_printf("Creating fake socket failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Creating fake socket failed: %s", w32_error(WSAGetLastError())); free(nsock); return -1; @@ -178,7 +178,7 @@ SOCKET WSAAPI socket(int af, int type, int protocol) { nsock->next = sockets; sockets = nsock; - log_printf("IPX socket created (fd = %d)", nsock->fd); + log_printf(LOG_INFO, "IPX socket created (fd = %d)", nsock->fd); RETURN(nsock->fd); }else{ @@ -198,11 +198,11 @@ int WSAAPI closesocket(SOCKET fd) { } if(ret == SOCKET_ERROR) { - log_printf("closesocket(%d) failed: %s", fd, w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "closesocket(%d) failed: %s", fd, w32_error(WSAGetLastError())); RETURN(SOCKET_ERROR); } - log_printf("IPX socket closed (fd = %d)", fd); + log_printf(LOG_INFO, "IPX socket closed (fd = %d)", fd); if(ptr->flags & IPX_BOUND) { rclient_unbind(&g_rclient, fd); @@ -241,10 +241,10 @@ int WSAAPI bind(SOCKET fd, const struct sockaddr *addr, int addrlen) { NET_TO_STRING(net_s, ipxaddr.sa_netnum); NODE_TO_STRING(node_s, ipxaddr.sa_nodenum); - log_printf("bind(%d, net=%s node=%s socket=%hu)", fd, net_s, node_s, ntohs(ipxaddr.sa_socket)); + log_printf(LOG_INFO, "bind(%d, net=%s node=%s socket=%hu)", fd, net_s, node_s, ntohs(ipxaddr.sa_socket)); if(ptr->flags & IPX_BOUND) { - log_printf("bind failed: socket already bound"); + log_printf(LOG_ERROR, "bind failed: socket already bound"); RETURN_WSA(WSAEINVAL, -1); } @@ -255,7 +255,7 @@ int WSAAPI bind(SOCKET fd, const struct sockaddr *addr, int addrlen) { NET_TO_STRING(net_s, ipxaddr.sa_netnum); NODE_TO_STRING(node_s, ipxaddr.sa_nodenum); - log_printf("bind address: net=%s node=%s socket=%hu", net_s, node_s, ntohs(ipxaddr.sa_socket)); + log_printf(LOG_INFO, "bind address: net=%s node=%s socket=%hu", net_s, node_s, ntohs(ipxaddr.sa_socket)); struct sockaddr_in bind_addr; bind_addr.sin_family = AF_INET; @@ -263,7 +263,7 @@ int WSAAPI bind(SOCKET fd, const struct sockaddr *addr, int addrlen) { bind_addr.sin_port = 0; if(r_bind(fd, (struct sockaddr*)&bind_addr, sizeof(bind_addr)) == -1) { - log_printf("Binding local UDP socket failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "Binding local UDP socket failed: %s", w32_error(WSAGetLastError())); rclient_unbind(&g_rclient, fd); RETURN(-1); @@ -272,7 +272,7 @@ int WSAAPI bind(SOCKET fd, const struct sockaddr *addr, int addrlen) { int al = sizeof(bind_addr); if(r_getsockname(fd, (struct sockaddr*)&bind_addr, &al) == -1) { - log_printf("getsockname failed: %s", w32_error(WSAGetLastError())); + log_printf(LOG_ERROR, "getsockname failed: %s", w32_error(WSAGetLastError())); rclient_unbind(&g_rclient, fd); RETURN(-1); @@ -351,7 +351,7 @@ static int recv_packet(ipx_socket *sockptr, char *buf, int bufsize, int flags, s } if(rval < sizeof(*rp_header) + sizeof(ipx_packet) - 1 || rval != sizeof(*rp_header) + packet->size + sizeof(ipx_packet) - 1) { - log_printf("Invalid packet received on loopback port!"); + log_printf(LOG_ERROR, "Invalid packet received on loopback port!"); free(recvbuf); WSASetLastError(WSAEWOULDBLOCK); @@ -381,7 +381,7 @@ static int recv_packet(ipx_socket *sockptr, char *buf, int bufsize, int flags, s addr->sa_flags |= 0x02; } }else{ - log_printf("IPX_EXTENDED_ADDRESS enabled, but recvfrom called with addrlen %d", addrlen); + log_printf(LOG_ERROR, "IPX_EXTENDED_ADDRESS enabled, but recvfrom called with addrlen %d", addrlen); } } } @@ -559,7 +559,7 @@ int WSAAPI getsockopt(SOCKET fd, int level, int optname, char FAR *optval, int F RETURN(0); } - log_printf("Unknown NSPROTO_IPX socket option passed to getsockopt: %d", optname); + log_printf(LOG_ERROR, "Unknown NSPROTO_IPX socket option passed to getsockopt: %d", optname); RETURN_WSA(WSAENOPROTOOPT, -1); } @@ -644,7 +644,7 @@ int WSAAPI setsockopt(SOCKET fd, int level, int optname, const char FAR *optval, RETURN(0); } - log_printf("Unknown NSPROTO_IPX socket option passed to setsockopt: %d", optname); + log_printf(LOG_ERROR, "Unknown NSPROTO_IPX socket option passed to setsockopt: %d", optname); RETURN_WSA(WSAENOPROTOOPT, -1); } @@ -686,7 +686,7 @@ int WSAAPI sendto(SOCKET fd, const char *buf, int len, int flags, const struct s } if(!(sockptr->flags & IPX_BOUND)) { - log_printf("sendto() on unbound socket, attempting implicit bind"); + log_printf(LOG_WARNING, "sendto() on unbound socket, attempting implicit bind"); struct sockaddr_ipx bind_addr; @@ -717,7 +717,7 @@ int WSAAPI sendto(SOCKET fd, const char *buf, int len, int flags, const struct s if(addrlen >= 15) { packet->ptype = ipxaddr->sa_ptype; }else{ - log_printf("IPX_EXTENDED_ADDRESS enabled, but sendto() called with addrlen %d", addrlen); + log_printf(LOG_ERROR, "IPX_EXTENDED_ADDRESS enabled, but sendto() called with addrlen %d", addrlen); } } @@ -745,12 +745,12 @@ int WSAAPI sendto(SOCKET fd, const char *buf, int len, int flags, const struct s saddr.sin_port = htons(global_conf.udp_port); saddr.sin_addr.s_addr = (host ? host->ipaddr : (global_conf.bcast_all ? INADDR_BROADCAST : sockptr->nic_bcast)); - if(log_calls) { + if(min_log_level >= LOG_DEBUG) { char net_s[12], node_s[18]; NET_TO_STRING(net_s, packet->dest_net); NODE_TO_STRING(node_s, packet->dest_node); - log_printf("Sending packet to %s/%s (%s)", net_s, node_s, inet_ntoa(saddr.sin_addr)); + log_printf(LOG_DEBUG, "Sending packet to %s/%s (%s)", net_s, node_s, inet_ntoa(saddr.sin_addr)); } int sval = r_sendto(send_fd, (char*)packet, psize, 0, (struct sockaddr*)&saddr, sizeof(saddr)); @@ -856,7 +856,7 @@ int PASCAL connect(SOCKET fd, const struct sockaddr *addr, int addrlen) { } if(!(sockptr->flags & IPX_BOUND)) { - log_printf("connect() on unbound socket, attempting implicit bind"); + log_printf(LOG_WARNING, "connect() on unbound socket, attempting implicit bind"); struct sockaddr_ipx bind_addr;