#ifdef __cplusplus

extern "C" {

#endif


BOOL
RegisterWithSsdp(
    const IN_ADDR     *IpAddress,
    SOCKET  *listenSocket,
    HANDLE  *SsdpHandle,
    DWORD    dwPort
    );

#if 0
BOOL
RegisterWithSsdp(
    const SOCKADDR_IN    *IpAddress,
    SOCKET  *listenSocket,
    HANDLE  *SsdpHandle,
    DWORD    dwPort
    );
#endif

VOID
UnregisterWithSsdp(
    HANDLE    SsdpHandle
    );



HANDLE
CreateSsdpDiscoveryObject(
    LPSTR    Service,
    HWND     hWnd,
    UINT     Msg
    );

VOID
CloseSsdpDiscoveryObject(
    HANDLE    Context
    );

LONG
GetSsdpDevices(
    HANDLE    Context,
    POBEX_DEVICE_LIST    DeviceList,
    ULONG               *ListLength
    );

LONG
RefreshSsdp(
    VOID
    );


VOID
UnRegisterForAdhocNetworksNotification(
    HANDLE     RegistrationHandle
    );


typedef BOOL (*NEW_ADDRESS_CALLBACK)(
    HANDLE         Context,
    SOCKET         ListenSocket,
    HANDLE        *NewAddressContext
    );

typedef VOID (*ADDRESS_GONE_CALLBACK)(
    HANDLE         RegistraitionContext,
    HANDLE         AddressContext
    );




HANDLE
RegisterForAdhocNetworksNotification(
    HANDLE                 RegistrationContext,
    NEW_ADDRESS_CALLBACK   NewAddressCallback,
    ADDRESS_GONE_CALLBACK  AddressGoneCallback
    );



#ifdef __cplusplus
}
#endif