static ULONG WINAPI IDirectPlay8PeerImpl_AddRef(IDirectPlay8Peer *iface) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); ULONG RefCount = InterlockedIncrement(&This->ref); return RefCount; }
static ULONG WINAPI IDirectPlay8PeerImpl_Release(IDirectPlay8Peer *iface) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); ULONG RefCount = InterlockedDecrement(&This->ref); if(!RefCount) HeapFree(GetProcessHeap(), 0, This); return RefCount; }
static HRESULT WINAPI IDirectPlay8PeerImpl_Initialize(IDirectPlay8Peer *iface, void * const pvUserContext, const PFNDPNMESSAGEHANDLER pfn, const DWORD dwFlags) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); TRACE("(%p)->(%p,%p,%x): stub\n", iface, pvUserContext, pfn, dwFlags); if(!pfn) return DPNERR_INVALIDPARAM; This->usercontext = pvUserContext; This->msghandler = pfn; This->flags = dwFlags; return DPN_OK; }
/* IUnknown interface follows */ static HRESULT WINAPI IDirectPlay8PeerImpl_QueryInterface(IDirectPlay8Peer *iface, REFIID riid, void **ppobj) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectPlay8Peer)) { IUnknown_AddRef(iface); *ppobj = This; return DPN_OK; } WARN("(%p)->(%s,%p): not found\n", This, debugstr_guid(riid), ppobj); return E_NOINTERFACE; }
static ULONG WINAPI IDirectPlay8PeerImpl_Release(IDirectPlay8Peer *iface) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); ULONG RefCount = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, RefCount); if(!RefCount) { heap_free(This->username); heap_free(This->data); heap_free(This); } return RefCount; }
static HRESULT WINAPI IDirectPlay8PeerImpl_GetSPCaps(IDirectPlay8Peer *iface, const GUID * const pguidSP, DPN_SP_CAPS * const pdpspCaps, const DWORD dwFlags) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); TRACE("(%p)->(%p,%p,%x)\n", This, pguidSP, pdpspCaps, dwFlags); if(!This->msghandler) return DPNERR_UNINITIALIZED; if(pdpspCaps->dwSize != sizeof(DPN_SP_CAPS)) { return DPNERR_INVALIDPARAM; } *pdpspCaps = This->spcaps; return DPN_OK; }
static HRESULT WINAPI IDirectPlay8PeerImpl_SetPeerInfo(IDirectPlay8Peer *iface, const DPN_PLAYER_INFO * const pdpnPlayerInfo, void * const pvAsyncContext, DPNHANDLE * const phAsyncHandle, const DWORD dwFlags) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); FIXME("(%p)->(%p,%p,%p,%x) Semi-stub.\n", This, pdpnPlayerInfo, pvAsyncContext, phAsyncHandle, dwFlags); if(!pdpnPlayerInfo) return E_POINTER; if(phAsyncHandle) FIXME("Async handle currently not supported.\n"); if (pdpnPlayerInfo->dwInfoFlags & DPNINFO_NAME) { heap_free(This->username); This->username = NULL; if(pdpnPlayerInfo->pwszName) { This->username = heap_strdupW(pdpnPlayerInfo->pwszName); if (!This->username) return E_OUTOFMEMORY; } } if (pdpnPlayerInfo->dwInfoFlags & DPNINFO_DATA) { heap_free(This->data); This->datasize = pdpnPlayerInfo->dwDataSize; This->data = heap_alloc(pdpnPlayerInfo->dwDataSize); if (!This->data) return E_OUTOFMEMORY; memcpy(This->data, pdpnPlayerInfo->pvData, pdpnPlayerInfo->dwDataSize); } return S_OK; }
static HRESULT WINAPI IDirectPlay8PeerImpl_EnumHosts(IDirectPlay8Peer *iface, PDPN_APPLICATION_DESC const pApplicationDesc, IDirectPlay8Address * const pAddrHost, IDirectPlay8Address * const pDeviceInfo, void * const pUserEnumData, const DWORD dwUserEnumDataSize, const DWORD dwEnumCount, const DWORD dwRetryInterval, const DWORD dwTimeOut, void * const pvUserContext, DPNHANDLE * const pAsyncHandle, const DWORD dwFlags) { IDirectPlay8PeerImpl* This = impl_from_IDirectPlay8Peer(iface); FIXME("(%p)->(%p,%p,%p,%p,%x,%x,%x,%x,%p,%p,%x): stub\n", This, pApplicationDesc, pAddrHost, pDeviceInfo, pUserEnumData, dwUserEnumDataSize, dwEnumCount, dwRetryInterval, dwTimeOut, pvUserContext, pAsyncHandle, dwFlags); if(!This->msghandler) return DPNERR_UNINITIALIZED; if((dwFlags & DPNENUMHOSTS_SYNC) && pAsyncHandle) return DPNERR_INVALIDPARAM; if(dwUserEnumDataSize > This->spcaps.dwMaxEnumPayloadSize) return DPNERR_ENUMQUERYTOOLARGE; return (dwFlags & DPNENUMHOSTS_SYNC) ? DPN_OK : DPNSUCCESS_PENDING; }