1
0
mirror of https://github.com/solemnwarning/ipxwrapper synced 2024-12-30 16:45:37 +01:00

Updated logging API.

This commit is contained in:
Daniel Collins 2011-11-16 21:32:59 +00:00
parent 4266b85cc9
commit e7c6358044
11 changed files with 137 additions and 125 deletions

View File

@ -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, &regkey);
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);
}

View File

@ -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 */

View File

@ -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) {

View File

@ -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);
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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) {

View File

@ -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;