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:
parent
2b1fe00e13
commit
bca5c8f978
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user