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

Only update sp_data.ns_addr in IPX_Reply when idNameServer changes.

This commit is contained in:
Daniel Collins 2011-08-28 21:39:51 +00:00
parent 2b1fe00e13
commit bca5c8f978

View File

@ -30,6 +30,7 @@ struct sp_data {
struct sockaddr_ipx addr; struct sockaddr_ipx addr;
struct sockaddr_ipx ns_addr; /* sa_family is 0 when undefined */ struct sockaddr_ipx ns_addr; /* sa_family is 0 when undefined */
DPID ns_id;
HANDLE worker_thread; HANDLE worker_thread;
DWORD worker_tid; DWORD worker_tid;
@ -237,18 +238,19 @@ static HRESULT WINAPI IPX_SendEx(LPDPSP_SENDEXDATA data) {
static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) { static HRESULT WINAPI IPX_Reply(LPDPSP_REPLYDATA data) {
CALL("SP_Reply"); CALL("SP_Reply");
/* TODO: Only update ns_addr if idNameServer has changed? */
struct sockaddr_ipx *addr_p;
struct sp_data *sp_data = get_sp_data(data->lpISP); struct sp_data *sp_data = get_sp_data(data->lpISP);
DWORD size;
HRESULT r = IDirectPlaySP_GetSPPlayerData(data->lpISP, data->idNameServer, (void**)&addr_p, &size, DPGET_LOCAL); if(sp_data->ns_id != data->idNameServer) {
if(r != DP_OK) { struct sockaddr_ipx *addr_p;
log_printf("GetSPPlayerData: %d", (int)r); DWORD size;
addr_p = NULL;
}else if(addr_p) { HRESULT r = IDirectPlaySP_GetSPPlayerData(data->lpISP, data->idNameServer, (void**)&addr_p, &size, DPGET_LOCAL);
memcpy(&(sp_data->ns_addr), addr_p, sizeof(struct sockaddr_ipx)); if(r != DP_OK) {
log_printf("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;
}
} }
/* Do the actual sending */ /* Do the actual sending */
@ -324,6 +326,7 @@ static HRESULT WINAPI IPX_Open(LPDPSP_OPENDATA data) {
} }
}else if(data->lpSPMessageHeader) { }else if(data->lpSPMessageHeader) {
memcpy(&(sp_data->ns_addr), data->lpSPMessageHeader, sizeof(struct sockaddr_ipx)); memcpy(&(sp_data->ns_addr), data->lpSPMessageHeader, sizeof(struct sockaddr_ipx));
sp_data->ns_id = 0;
} }
release_sp_data(data->lpISP); release_sp_data(data->lpISP);