From: Anton Baskanov baskanov@gmail.com
--- dlls/dpwsockx/dpwsockx_dll.h | 7 +++++++ dlls/dpwsockx/dpwsockx_main.c | 24 ++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/dlls/dpwsockx/dpwsockx_dll.h b/dlls/dpwsockx/dpwsockx_dll.h index 01090bf450f..39680a9bead 100644 --- a/dlls/dpwsockx/dpwsockx_dll.h +++ b/dlls/dpwsockx/dpwsockx_dll.h @@ -67,6 +67,11 @@ struct tagDPWS_IN_CONNECTION IDirectPlaySP *sp; };
+typedef struct +{ + SOCKADDR_IN addr; +} DPWS_OUT_CONNECTION; + typedef struct tagDPWS_DATA { LPDIRECTPLAYSP lpISP; @@ -76,6 +81,8 @@ typedef struct tagDPWS_DATA WSAEVENT acceptEvent; struct list inConnections;
+ DPWS_OUT_CONNECTION nameserverConnection; + BOOL started; HANDLE thread; WSAEVENT stopEvent; diff --git a/dlls/dpwsockx/dpwsockx_main.c b/dlls/dpwsockx/dpwsockx_main.c index 35b595abd49..125a5354ba9 100644 --- a/dlls/dpwsockx/dpwsockx_main.c +++ b/dlls/dpwsockx/dpwsockx_main.c @@ -498,10 +498,30 @@ static HRESULT WINAPI DPWSCB_GetCaps( LPDPSP_GETCAPSDATA data )
static HRESULT WINAPI DPWSCB_Open( LPDPSP_OPENDATA data ) { - FIXME( "(%u,%p,%p,%u,0x%08lx,0x%08lx) stub\n", + DPSP_MSG_HEADER *header = (DPSP_MSG_HEADER *) data->lpSPMessageHeader; + DPWS_DATA *dpwsData; + DWORD dpwsDataSize; + HRESULT hr; + + TRACE( "(%u,%p,%p,%u,0x%08lx,0x%08lx)\n", data->bCreate, data->lpSPMessageHeader, data->lpISP, data->bReturnStatus, data->dwOpenFlags, data->dwSessionFlags ); - return DPERR_UNSUPPORTED; + + if ( data->bCreate ) + { + FIXME( "session creation is not yet supported\n" ); + return DPERR_UNSUPPORTED; + } + + hr = IDirectPlaySP_GetSPData( data->lpISP, (void **)&dpwsData, &dpwsDataSize, DPSET_LOCAL ); + if ( FAILED( hr ) ) + return hr; + + dpwsData->nameserverConnection.addr.sin_family = AF_INET; + dpwsData->nameserverConnection.addr.sin_addr = header->SockAddr.sin_addr; + dpwsData->nameserverConnection.addr.sin_port = header->SockAddr.sin_port; + + return DP_OK; }
static HRESULT WINAPI DPWSCB_CloseEx( LPDPSP_CLOSEDATA data )