mirror of
https://github.com/solemnwarning/ipxwrapper
synced 2024-12-30 16:45:37 +01:00
Updated logging API.
This commit is contained in:
parent
4266b85cc9
commit
e7c6358044
16
src/common.c
16
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);
|
||||
}
|
||||
|
14
src/common.h
14
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 */
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
#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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
84
src/router.c
84
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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user