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