From 9b97b16b7c348b94f05acb080c07942de71ad832 Mon Sep 17 00:00:00 2001 From: Ismael Barros Date: Fri, 15 Aug 2008 05:39:07 +0200 Subject: [PATCH] dpwsockx: Implementation of EnumSessions callback --- dlls/dpwsockx/dpwsockx_main.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/dlls/dpwsockx/dpwsockx_main.c b/dlls/dpwsockx/dpwsockx_main.c index 30d71d27e6b..a854a0aa5c3 100644 --- a/dlls/dpwsockx/dpwsockx_main.c +++ b/dlls/dpwsockx/dpwsockx_main.c @@ -414,10 +414,46 @@ static HRESULT send_tcp_message( LPVOID message, static HRESULT WINAPI DPWSCB_EnumSessions( LPDPSP_ENUMSESSIONSDATA data ) { - FIXME( "(%p,%d,%p,%u) stub\n", + LPDPWS_DATA dpwsData; + DWORD dwDataSize; + SOCKADDR_IN destAddr; + + TRACE( "(%p,%d,%p,%u)\n", data->lpMessage, data->dwMessageSize, data->lpISP, data->bReturnStatus ); - return DPERR_UNSUPPORTED; + + IDirectPlaySP_GetSPData( data->lpISP, (LPVOID*) &dpwsData, &dwDataSize, + DPGET_LOCAL ); + + /* Start listener to get replies if it's not started yet. + * This needs to be done before we build the local address, + * otherwise we won't know in which port we're listening. */ + if ( !dpwsData->tcp_listener.is_running ) + { + HRESULT hr = start_listener( dpwsData, TRUE ); + if ( FAILED(hr) ) + { + return hr; + } + } + + /* Destination address */ + /* TODO: Instead of getting always the broadcast address, + * we should throw a popup message asking for an address, + * and only broadcast if no address is provided. */ + memset( &destAddr, 0, sizeof(SOCKADDR_IN) ); + destAddr.sin_family = AF_INET; + destAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST); + destAddr.sin_port = htons(DPWS_DPLAYSRV_PORT); + + /* Add header to message body */ + ((LPDPSP_MSG_HEADER) data->lpMessage)->size + = data->dwMessageSize | DPSP_MSG_TOKEN_REMOTE; + ((LPDPSP_MSG_HEADER) data->lpMessage)->SockAddr + = dpwsData->tcp_listener.addr; + + return send_udp_message( data->lpMessage, data->dwMessageSize, + (LPSOCKADDR) &destAddr ); } static HRESULT WINAPI DPWSCB_Reply( LPDPSP_REPLYDATA data ) -- 2.11.4.GIT