/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_P2P
#define _INC_P2P
#if (_WIN32_WINNT >= 0x0600)

#ifdef __cplusplus
extern "C" {
#endif

typedef enum _PEER_APPLICATION_REGISTRATION_TYPE {
  PEER_APPLICATION_CURRENT_USER,
  PEER_APPLICATION_ALL_USERS 
} PEER_APPLICATION_REGISTRATION_TYPE, PEER_APPLICATION_REGISTRATION_FLAGS;

typedef enum _PEER_CHANGE_TYPE {
  PEER_CHANGE_ADDED,
  PEER_CHANGE_DELETED,
  PEER_CHANGE_UPDATED 
} PEER_CHANGE_TYPE;

typedef enum _PEER_COLLAB_EVENT_TYPE {
  PEER_EVENT_WATCHLIST_CHANGED,
  PEER_EVENT_ENDPOINT_CHANGED,
  PEER_EVENT_ENDPOINT_PRESENCE_CHANGED,
  PEER_EVENT_ENDPOINT_APPLICATION_CHANGED,
  PEER_EVENT_ENDPOINT_OBJECT_CHANGED,
  PEER_EVENT_MY_ENDPOINT_CHANGED,
  PEER_EVENT_MY_PRESENCE_CHANGED,
  PEER_EVENT_MY_APPLICATION_CHANGED,
  PEER_EVENT_MY_OBJECT_CHANGED,
  PEER_EVENT_PEOPLE_NEAR_ME_CHANGED,
  PEER_EVENT_REQUEST_STATUS_CHANGED 
} PEER_COLLAB_EVENT_TYPE;

typedef enum _PEER_GROUP_AUTHENTICATION_SCHEME {
  PEER_GROUP_GMC_AUTHENTICATION        = 0x00000001,
  PEER_GROUP_PASSWORD_AUTHENTICATION   = 0x00000002 
} PEER_GROUP_AUTHENTICATION_SCHEME;

typedef enum _PEER_GROUP_ISSUE_CREDENTIAL_FLAGS {
  PEER_GROUP_STORE_CREDENTIALS   = 0x0001 
} PEER_GROUP_ISSUE_CREDENTIAL_FLAGS;

typedef enum _PEER_INVITATION_RESPONSE_TYPE {
  PEER_INVITATION_RESPONSE_DECLINED,
  PEER_INVITATION_RESPONSE_ACCEPTED,
  PEER_INVITATION_RESPONSE_EXPIRED,
  PEER_INVITATION_RESPONSE_ERROR 
} PEER_INVITATION_RESPONSE_TYPE;

typedef enum _PEER_PRESENCE_STATUS {
  PEER_PRESENCE_OFFLINE,
  PEER_PRESENCE_OUT_TO_LUNCH,
  PEER_PRESENCE_AWAY,
  PEER_PRESENCE_BE_RIGHT_BACK,
  PEER_PRESENCE_IDLE,
  PEER_PRESENCE_BUSY,
  PEER_PRESENCE_ON_THE_PHONE,
  PEER_PRESENCE_ONLINE 
} PEER_PRESENCE_STATUS;

typedef enum _PEER_PUBLICATION_SCOPE {
  PEER_PUBLICATION_SCOPE_NONE,
  PEER_PUBLICATION_SCOPE_NEAR_ME,
  PEER_PUBLICATION_SCOPE_INTERNET,
  PEER_PUBLICATION_SCOPE_ALL 
} PEER_PUBLICATION_SCOPE;

typedef enum _PEER_SIGNIN_FLAGS {
  PEER_SIGNIN_NONE,
  PEER_SIGNIN_NEAR_ME,
  PEER_SIGNIN_INTERNET,
  PEER_SIGNIN_ALL 
} PEER_SIGNIN_FLAGS;

typedef enum _PEER_WATCH_PERMISSION {
  PEER_WATCH_BLOCKED,
  PEER_WATCH_ALLOWED 
} PEER_WATCH_PERMISSION;

typedef struct _PEER_CONTACT *PPEER_CONTACT;
typedef struct _PEER_ENDPOINT *PPEER_ENDPOINT;
typedef struct _PEER_INVITATION *PPEER_INVITATION;
typedef struct _PEER_OBJECT *PPEER_OBJECT;
typedef struct _PEER_PEOPLE_NEAR_ME *PPEER_PEOPLE_NEAR_ME;
typedef struct _PEER_PRESENCE_INFO *PPEER_PRESENCE_INFO;
typedef LPVOID HPEERENUM;
typedef LPVOID HPEEREVENT;

typedef struct peer_address_tag {
  DWORD        dwSize;
  SOCKADDR_IN6 sin6;
} PEER_ADDRESS, *PPEER_ADDRESS;

typedef struct _PEER_APP_LAUNCH_INFO {
  PPEER_CONTACT    pContact;
  PPEER_ENDPOINT   pEndpoint;
  PPEER_INVITATION pInvitation;
} PEER_APP_LAUNCH_INFO, *PPEER_APP_LAUNCH_INFO;
typedef const PEER_APP_LAUNCH_INFO *PCPEER_APP_LAUNCH_INFO;

typedef struct peer_data_tag {
  ULONG cbData;
  PBYTE pbData;
} PEER_DATA, *PPEER_DATA;

typedef struct _PEER_APPLICATION {
  GUID      id;
  PEER_DATA data;
  PWSTR     pwzDescription;
} PEER_APPLICATION, *PPEER_APPLICATION;
typedef const PEER_APPLICATION *PCPEER_APPLICATION;

typedef struct _PEER_APPLICATION_REGISTRATION_INFO {
  PEER_APPLICATION application;
  PWSTR            pwzApplicationToLaunch;
  PWSTR            pwzApplicationArguments;
  DWORD            dwPublicationScope;
} PEER_APPLICATION_REGISTRATION_INFO, *PPEER_APPLICATION_REGISTRATION_INFO;
typedef const PEER_APPLICATION_REGISTRATION_INFO *PCPEER_APPLICATION_REGISTRATION_INFO;

typedef struct _PEER_EVENT_APPLICATION_CHANGED_DATA {
  PPEER_CONTACT     pContact;
  PPEER_ENDPOINT    pEndpoint;
  PEER_CHANGE_TYPE  changeType;
  PPEER_APPLICATION pApplication;
} PEER_EVENT_APPLICATION_CHANGED_DATA, *PPEER_EVENT_APPLICATION_CHANGED_DATA;

typedef struct _PEER_EVENT_ENDPOINT_CHANGED_DATA {
  PPEER_CONTACT  pContact;
  PPEER_ENDPOINT pEndpoint;
} PEER_EVENT_ENDPOINT_CHANGED_DATA, *PPEER_EVENT_ENDPOINT_CHANGED_DATA;

typedef struct _PEER_EVENT_OBJECT_CHANGED_DATA {
  PPEER_CONTACT    pContact;
  PPEER_ENDPOINT   pEndpoint;
  PEER_CHANGE_TYPE changeType;
  PPEER_OBJECT     pObject;
} PEER_EVENT_OBJECT_CHANGED_DATA, *PPEER_EVENT_OBJECT_CHANGED_DATA;

typedef struct _PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA {
  PEER_CHANGE_TYPE     changeType;
  PPEER_PEOPLE_NEAR_ME pPeopleNearMe;
} PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA, *PPEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA;

typedef struct _PEER_EVENT_PRESENCE_CHANGED_DATA {
  PPEER_CONTACT       pContact;
  PPEER_ENDPOINT      pEndpoint;
  PEER_CHANGE_TYPE    changeType;
  PPEER_PRESENCE_INFO pPresenceInfo;
} PEER_EVENT_PRESENCE_CHANGED_DATA, *PPEER_EVENT_PRESENCE_CHANGED_DATA;

typedef struct _PEER_EVENT_REQUEST_STATUS_CHANGED_DATA {
  PPEER_ENDPOINT pEndpoint;
  HRESULT        hrChange;
} PEER_EVENT_REQUEST_STATUS_CHANGED_DATA, *PPEER_EVENT_REQUEST_STATUS_CHANGED_DATA;

typedef struct _PEER_EVENT_WATCHLIST_CHANGED_DATA {
  PPEER_CONTACT    pContact;
  PEER_CHANGE_TYPE changeType;
} PEER_EVENT_WATCHLIST_CHANGED_DATA, *PPEER_EVENT_WATCHLIST_CHANGED_DATA;

typedef struct _PEER_INVITATION {
  GUID      applicationId;
  PEER_DATA applicationData;
  PWSTR     pwzMessage;
} PEER_INVITATION, *PPEER_INVITATION;
typedef const PEER_INVITATION *PCPEER_INVITATION;

typedef union _PEER_COLLAB_EVENT_DATA {
  PEER_COLLAB_EVENT_TYPE eventType;
  __C89_NAMELESS union {
    PEER_EVENT_WATCHLIST_CHANGED_DATA watchlistChangedData;
    PEER_EVENT_PRESENCE_CHANGED_DATA presenceChangedData;
    PEER_EVENT_APPLICATION_CHANGED_DATA applicationChangedData;
    PEER_EVENT_OBJECT_CHANGED_DATA objectChangedData;
    PEER_EVENT_ENDPOINT_CHANGED_DATA endpointChangedData;
    PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA peopleNearMeChangedData;
    PEER_EVENT_REQUEST_STATUS_CHANGED_DATA requestStatusChangedData;
  } DUMMYUNIONNAME;
} PEER_COLLAB_EVENT_DATA, *PPEER_COLLAB_EVENT_DATA;

typedef struct _PEER_COLLAB_EVENT_REGISTRATION{
  PEER_COLLAB_EVENT_TYPE eventType;
  GUID *                 pInstance;
} PEER_COLLAB_EVENT_REGISTRATION, *PPEER_COLLAB_EVENT_REGISTRATION;
typedef const PEER_COLLAB_EVENT_REGISTRATION *PCPEER_COLLAB_EVENT_REGISTRATION;

typedef struct {
  PEER_INVITATION_RESPONSE_TYPE action;
  PWSTR                         pwzMessage;
  HRESULT                       hrExtendedInfo;
} PEER_INVITATION_RESPONSE, *PPEER_INVITATION_RESPONSE;
typedef const PEER_INVITATION_RESPONSE *PCPEER_INVITATION_RESPONSE;

typedef struct _PEER_CONTACT {
  PWSTR                 pwzPeerName;
  PWSTR                 pwzNickName;
  PWSTR                 pwzDisplayName;
  PWSTR                 pwzEmailAddress;
  WINBOOL              fWatch;
  PEER_WATCH_PERMISSION WatcherPermissions;
  PEER_DATA             credentials;
} PEER_CONTACT, *PPEER_CONTACT;
typedef const PEER_CONTACT *PCPEER_CONTACT;

typedef struct _PEER_ENDPOINT {
  PEER_ADDRESS address;
  PWSTR        pwzEndpointName;
} PEER_ENDPOINT, *PPEER_ENDPOINT;
typedef const PEER_ENDPOINT *PCPEER_ENDPOINT;

typedef struct _PEER_OBJECT {
  GUID      id;
  PEER_DATA data;
  DWORD     dwPublicationScope;
} PEER_OBJECT, *PPEER_OBJECT;
typedef const PEER_OBJECT *PCPEER_OBJECT;

typedef struct _PEER_PEOPLE_NEAR_ME {
  PWSTR         pwzNickName;
  PEER_ENDPOINT endpoint;
  GUID          id;
} PEER_PEOPLE_NEAR_ME, *PPEER_PEOPLE_NEAR_ME, *PCPEER_PEOPLE_NEAR_ME, **PPPEER_PEOPLE_NEAR_ME;

typedef struct _PEER_PRESENCE_INFO {
  PEER_PRESENCE_STATUS status;
  PWSTR                pwzDescriptiveText;
} PEER_PRESENCE_INFO, *PPEER_PRESENCE_INFO;
typedef const PEER_PRESENCE_INFO *PCPEER_PRESENCE_INFO;

HRESULT WINAPI PeerCollabAddContact(
  PCWSTR pwzContactData,
  PPEER_CONTACT *ppContact
);

HRESULT WINAPI PeerCollabAsyncInviteContact(
  PCPEER_CONTACT pcContact,
  PPEER_ENDPOINT pcEndpoint,
  PCPEER_INVITATION pcInvitation,
  HANDLE hEvent,
  HANDLE *phInvitation
);

HRESULT WINAPI PeerCollabAsyncInviteEndpoint(
  PPEER_ENDPOINT pcEndpoint,
  PCPEER_INVITATION pcInvitation,
  HANDLE hEvent,
  HANDLE *phInvitation
);

HRESULT WINAPI PeerCollabCancelInvitation(
  HANDLE hInvitation
);

HRESULT WINAPI PeerCollabCloseHandle(
  HANDLE handle
);

HRESULT WINAPI PeerCollabDeleteContact(
  PCWSTR pwzPeerName
);

HRESULT WINAPI PeerCollabDeleteEndpointData(
  PCPEER_ENDPOINT pcEndpoint
);

HRESULT WINAPI PeerCollabDeleteObject(
  const GUID *pObjectId
);

HRESULT WINAPI PeerCollabEnumApplicationRegistrationInfo(
  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
  HPEERENUM *phPeerEnum
);

HRESULT WINAPI PeerCollabEnumApplications(
  PCPEER_ENDPOINT pcEndpoint,
  const GUID *pApplicationId,
  HPEERENUM *phPeerEnum
);

HRESULT WINAPI PeerCollabEnumContacts(
  HPEERENUM *phPeerEnum
);

HRESULT WINAPI PeerCollabEnumEndpoints(
  PCPEER_CONTACT pcContact,
  HPEERENUM *phPeerEnum
);

HRESULT  WINAPI PeerCollabEnumObjects(
  PCPEER_ENDPOINT pcEndpoint,
  const GUID *pObjectId,
  HPEERENUM *phPeerEnum
);

HRESULT WINAPI PeerCollabEnumPeopleNearMe(
  HPEERENUM *phPeerEnum
);

HRESULT WINAPI PeerCollabExportContact(
  PWSTR pwzPeerName,
  PWSTR *ppwzContactData
);

HRESULT  WINAPI PeerCollabGetAppLaunchInfo(
  PPEER_APP_LAUNCH_INFO *ppLaunchInfo
);

HRESULT WINAPI PeerCollabGetApplicationRegistrationInfo(
  const GUID *pApplicationId,
  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
  PPEER_APPLICATION_REGISTRATION_INFO *ppRegInfo
);

HRESULT WINAPI PeerCollabGetContact(
  PWSTR pwzPeerName,
  PCPEER_CONTACT *ppContact
);

HRESULT WINAPI PeerCollabGetEndpointName(
  PWSTR *ppwzEndpointName
);

HRESULT WINAPI PeerCollabGetEventData(
  HPEEREVENT hPeerEvent,
  PPEER_COLLAB_EVENT_DATA *ppEventData
);

HRESULT  WINAPI PeerCollabGetInvitationResponse(
  HANDLE hInvitation,
  PPEER_INVITATION_RESPONSE *ppInvitationResponse
);

HRESULT WINAPI PeerCollabGetPresenceInfo(
  PCPEER_ENDPOINT pEndpoint,
  PPEER_PRESENCE_INFO *ppPresenceInfo
);

HRESULT  WINAPI PeerCollabGetSigninOptions(
  DWORD *dwSigninOptions
);

HRESULT WINAPI PeerCollabInviteContact(
  PCPEER_CONTACT pcContact,
  PCPEER_ENDPOINT pcEndpoint,
  const PCPEER_INVITATION pcInvitation,
  PPEER_INVITATION_RESPONSE *ppResponse
);

HRESULT  WINAPI PeerCollabInviteEndpoint(
  PCPEER_ENDPOINT pcEndpoint,
  PCPEER_INVITATION pcInvitation,
  PPEER_INVITATION_RESPONSE *ppResponse
);

HRESULT WINAPI PeerCollabParseContact(
  PWSTR pwzContactData,
  PCPEER_CONTACT *ppContact
);

HRESULT WINAPI PeerCollabQueryContactData(
  PCPEER_ENDPOINT pcEndpoint,
  PWSTR *ppwzContactData
);

HRESULT WINAPI PeerCollabRefreshEndpointData(
  PCPEER_ENDPOINT pcEndpoint
);

HRESULT  WINAPI PeerCollabRegisterApplication(
  PCPEER_APPLICATION_REGISTRATION_INFO pcApplication,
  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
);

HRESULT  WINAPI PeerCollabRegisterEvent(
  HANDLE hEvent,
  DWORD cEventRegistration,
  PPEER_COLLAB_EVENT_REGISTRATION pEventRegistrations,
  HPEEREVENT *phPeerEvent
);

HRESULT WINAPI PeerCollabSetEndpointName(
  PCWSTR pwzEndpointName
);

HRESULT  WINAPI PeerCollabSetObject(
  PCPEER_OBJECT pcObject
);

HRESULT WINAPI PeerCollabSetPresenceInfo(
  PCPEER_PRESENCE_INFO pcPresenceInfo
);

HRESULT WINAPI PeerCollabShutdown(void);

HRESULT  WINAPI PeerCollabSignin(
  HWND hwndParent,
  DWORD dwSigninOptions
);

HRESULT  WINAPI PeerCollabSignout(
  DWORD dwSignoutOptions
);

HRESULT  WINAPI PeerCollabStartup(
  WORD wVersionRequested
);

HRESULT WINAPI PeerCollabSubscribeEndpointData(
  PCPEER_ENDPOINT pcEndpoint
);

HRESULT  WINAPI PeerCollabUnregisterApplication(
  const GUID *pApplicationID,
  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
);

HRESULT  WINAPI PeerCollabUnregisterEvent(
  HPEEREVENT hPeerEvent
);

HRESULT WINAPI PeerCollabUnsubscribeEndpointData(
  PCPEER_ENDPOINT pcEndpoint
);

HRESULT  WINAPI PeerCollabUpdateContact(
  PCPEER_CONTACT pContact
);

#ifdef __cplusplus
}
#endif
#endif /* (_WIN32_WINNT >= 0x0600) */
#endif /*_INC_P2P*/
