1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _INC_P2P
7#define _INC_P2P
8#if (_WIN32_WINNT >= 0x0600)
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14typedef enum _PEER_APPLICATION_REGISTRATION_TYPE {
15  PEER_APPLICATION_CURRENT_USER,
16  PEER_APPLICATION_ALL_USERS
17} PEER_APPLICATION_REGISTRATION_TYPE, PEER_APPLICATION_REGISTRATION_FLAGS;
18
19typedef enum _PEER_CHANGE_TYPE {
20  PEER_CHANGE_ADDED,
21  PEER_CHANGE_DELETED,
22  PEER_CHANGE_UPDATED
23} PEER_CHANGE_TYPE;
24
25typedef enum _PEER_COLLAB_EVENT_TYPE {
26  PEER_EVENT_WATCHLIST_CHANGED,
27  PEER_EVENT_ENDPOINT_CHANGED,
28  PEER_EVENT_ENDPOINT_PRESENCE_CHANGED,
29  PEER_EVENT_ENDPOINT_APPLICATION_CHANGED,
30  PEER_EVENT_ENDPOINT_OBJECT_CHANGED,
31  PEER_EVENT_MY_ENDPOINT_CHANGED,
32  PEER_EVENT_MY_PRESENCE_CHANGED,
33  PEER_EVENT_MY_APPLICATION_CHANGED,
34  PEER_EVENT_MY_OBJECT_CHANGED,
35  PEER_EVENT_PEOPLE_NEAR_ME_CHANGED,
36  PEER_EVENT_REQUEST_STATUS_CHANGED
37} PEER_COLLAB_EVENT_TYPE;
38
39typedef enum _PEER_GROUP_AUTHENTICATION_SCHEME {
40  PEER_GROUP_GMC_AUTHENTICATION        = 0x00000001,
41  PEER_GROUP_PASSWORD_AUTHENTICATION   = 0x00000002
42} PEER_GROUP_AUTHENTICATION_SCHEME;
43
44typedef enum _PEER_GROUP_ISSUE_CREDENTIAL_FLAGS {
45  PEER_GROUP_STORE_CREDENTIALS   = 0x0001
46} PEER_GROUP_ISSUE_CREDENTIAL_FLAGS;
47
48typedef enum _PEER_INVITATION_RESPONSE_TYPE {
49  PEER_INVITATION_RESPONSE_DECLINED,
50  PEER_INVITATION_RESPONSE_ACCEPTED,
51  PEER_INVITATION_RESPONSE_EXPIRED,
52  PEER_INVITATION_RESPONSE_ERROR
53} PEER_INVITATION_RESPONSE_TYPE;
54
55typedef enum _PEER_PRESENCE_STATUS {
56  PEER_PRESENCE_OFFLINE,
57  PEER_PRESENCE_OUT_TO_LUNCH,
58  PEER_PRESENCE_AWAY,
59  PEER_PRESENCE_BE_RIGHT_BACK,
60  PEER_PRESENCE_IDLE,
61  PEER_PRESENCE_BUSY,
62  PEER_PRESENCE_ON_THE_PHONE,
63  PEER_PRESENCE_ONLINE
64} PEER_PRESENCE_STATUS;
65
66typedef enum _PEER_PUBLICATION_SCOPE {
67  PEER_PUBLICATION_SCOPE_NONE,
68  PEER_PUBLICATION_SCOPE_NEAR_ME,
69  PEER_PUBLICATION_SCOPE_INTERNET,
70  PEER_PUBLICATION_SCOPE_ALL
71} PEER_PUBLICATION_SCOPE;
72
73typedef enum _PEER_SIGNIN_FLAGS {
74  PEER_SIGNIN_NONE,
75  PEER_SIGNIN_NEAR_ME,
76  PEER_SIGNIN_INTERNET,
77  PEER_SIGNIN_ALL
78} PEER_SIGNIN_FLAGS;
79
80typedef enum _PEER_WATCH_PERMISSION {
81  PEER_WATCH_BLOCKED,
82  PEER_WATCH_ALLOWED
83} PEER_WATCH_PERMISSION;
84
85typedef struct _PEER_CONTACT *PPEER_CONTACT;
86typedef struct _PEER_ENDPOINT *PPEER_ENDPOINT;
87typedef struct _PEER_INVITATION *PPEER_INVITATION;
88typedef struct _PEER_OBJECT *PPEER_OBJECT;
89typedef struct _PEER_PEOPLE_NEAR_ME *PPEER_PEOPLE_NEAR_ME;
90typedef struct _PEER_PRESENCE_INFO *PPEER_PRESENCE_INFO;
91typedef LPVOID HPEERENUM;
92typedef LPVOID HPEEREVENT;
93
94typedef struct peer_address_tag {
95  DWORD        dwSize;
96  SOCKADDR_IN6 sin6;
97} PEER_ADDRESS, *PPEER_ADDRESS;
98
99typedef struct _PEER_APP_LAUNCH_INFO {
100  PPEER_CONTACT    pContact;
101  PPEER_ENDPOINT   pEndpoint;
102  PPEER_INVITATION pInvitation;
103} PEER_APP_LAUNCH_INFO, *PPEER_APP_LAUNCH_INFO;
104typedef const PEER_APP_LAUNCH_INFO *PCPEER_APP_LAUNCH_INFO;
105
106typedef struct peer_data_tag {
107  ULONG cbData;
108  PBYTE pbData;
109} PEER_DATA, *PPEER_DATA;
110
111typedef struct _PEER_APPLICATION {
112  GUID      id;
113  PEER_DATA data;
114  PWSTR     pwzDescription;
115} PEER_APPLICATION, *PPEER_APPLICATION;
116typedef const PEER_APPLICATION *PCPEER_APPLICATION;
117
118typedef struct _PEER_APPLICATION_REGISTRATION_INFO {
119  PEER_APPLICATION application;
120  PWSTR            pwzApplicationToLaunch;
121  PWSTR            pwzApplicationArguments;
122  DWORD            dwPublicationScope;
123} PEER_APPLICATION_REGISTRATION_INFO, *PPEER_APPLICATION_REGISTRATION_INFO;
124typedef const PEER_APPLICATION_REGISTRATION_INFO *PCPEER_APPLICATION_REGISTRATION_INFO;
125
126typedef struct _PEER_EVENT_APPLICATION_CHANGED_DATA {
127  PPEER_CONTACT     pContact;
128  PPEER_ENDPOINT    pEndpoint;
129  PEER_CHANGE_TYPE  changeType;
130  PPEER_APPLICATION pApplication;
131} PEER_EVENT_APPLICATION_CHANGED_DATA, *PPEER_EVENT_APPLICATION_CHANGED_DATA;
132
133typedef struct _PEER_EVENT_ENDPOINT_CHANGED_DATA {
134  PPEER_CONTACT  pContact;
135  PPEER_ENDPOINT pEndpoint;
136} PEER_EVENT_ENDPOINT_CHANGED_DATA, *PPEER_EVENT_ENDPOINT_CHANGED_DATA;
137
138typedef struct _PEER_EVENT_OBJECT_CHANGED_DATA {
139  PPEER_CONTACT    pContact;
140  PPEER_ENDPOINT   pEndpoint;
141  PEER_CHANGE_TYPE changeType;
142  PPEER_OBJECT     pObject;
143} PEER_EVENT_OBJECT_CHANGED_DATA, *PPEER_EVENT_OBJECT_CHANGED_DATA;
144
145typedef struct _PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA {
146  PEER_CHANGE_TYPE     changeType;
147  PPEER_PEOPLE_NEAR_ME pPeopleNearMe;
148} PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA, *PPEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA;
149
150typedef struct _PEER_EVENT_PRESENCE_CHANGED_DATA {
151  PPEER_CONTACT       pContact;
152  PPEER_ENDPOINT      pEndpoint;
153  PEER_CHANGE_TYPE    changeType;
154  PPEER_PRESENCE_INFO pPresenceInfo;
155} PEER_EVENT_PRESENCE_CHANGED_DATA, *PPEER_EVENT_PRESENCE_CHANGED_DATA;
156
157typedef struct _PEER_EVENT_REQUEST_STATUS_CHANGED_DATA {
158  PPEER_ENDPOINT pEndpoint;
159  HRESULT        hrChange;
160} PEER_EVENT_REQUEST_STATUS_CHANGED_DATA, *PPEER_EVENT_REQUEST_STATUS_CHANGED_DATA;
161
162typedef struct _PEER_EVENT_WATCHLIST_CHANGED_DATA {
163  PPEER_CONTACT    pContact;
164  PEER_CHANGE_TYPE changeType;
165} PEER_EVENT_WATCHLIST_CHANGED_DATA, *PPEER_EVENT_WATCHLIST_CHANGED_DATA;
166
167typedef struct _PEER_INVITATION {
168  GUID      applicationId;
169  PEER_DATA applicationData;
170  PWSTR     pwzMessage;
171} PEER_INVITATION, *PPEER_INVITATION;
172typedef const PEER_INVITATION *PCPEER_INVITATION;
173
174typedef union _PEER_COLLAB_EVENT_DATA {
175  PEER_COLLAB_EVENT_TYPE eventType;
176  __C89_NAMELESS union {
177    PEER_EVENT_WATCHLIST_CHANGED_DATA watchlistChangedData;
178    PEER_EVENT_PRESENCE_CHANGED_DATA presenceChangedData;
179    PEER_EVENT_APPLICATION_CHANGED_DATA applicationChangedData;
180    PEER_EVENT_OBJECT_CHANGED_DATA objectChangedData;
181    PEER_EVENT_ENDPOINT_CHANGED_DATA endpointChangedData;
182    PEER_EVENT_PEOPLE_NEAR_ME_CHANGED_DATA peopleNearMeChangedData;
183    PEER_EVENT_REQUEST_STATUS_CHANGED_DATA requestStatusChangedData;
184  } DUMMYUNIONNAME;
185} PEER_COLLAB_EVENT_DATA, *PPEER_COLLAB_EVENT_DATA;
186
187typedef struct _PEER_COLLAB_EVENT_REGISTRATION{
188  PEER_COLLAB_EVENT_TYPE eventType;
189  GUID *                 pInstance;
190} PEER_COLLAB_EVENT_REGISTRATION, *PPEER_COLLAB_EVENT_REGISTRATION;
191typedef const PEER_COLLAB_EVENT_REGISTRATION *PCPEER_COLLAB_EVENT_REGISTRATION;
192
193typedef struct {
194  PEER_INVITATION_RESPONSE_TYPE action;
195  PWSTR                         pwzMessage;
196  HRESULT                       hrExtendedInfo;
197} PEER_INVITATION_RESPONSE, *PPEER_INVITATION_RESPONSE;
198typedef const PEER_INVITATION_RESPONSE *PCPEER_INVITATION_RESPONSE;
199
200typedef struct _PEER_CONTACT {
201  PWSTR                 pwzPeerName;
202  PWSTR                 pwzNickName;
203  PWSTR                 pwzDisplayName;
204  PWSTR                 pwzEmailAddress;
205  WINBOOL              fWatch;
206  PEER_WATCH_PERMISSION WatcherPermissions;
207  PEER_DATA             credentials;
208} PEER_CONTACT, *PPEER_CONTACT;
209typedef const PEER_CONTACT *PCPEER_CONTACT;
210
211typedef struct _PEER_ENDPOINT {
212  PEER_ADDRESS address;
213  PWSTR        pwzEndpointName;
214} PEER_ENDPOINT, *PPEER_ENDPOINT;
215typedef const PEER_ENDPOINT *PCPEER_ENDPOINT;
216
217typedef struct _PEER_OBJECT {
218  GUID      id;
219  PEER_DATA data;
220  DWORD     dwPublicationScope;
221} PEER_OBJECT, *PPEER_OBJECT;
222typedef const PEER_OBJECT *PCPEER_OBJECT;
223
224typedef struct _PEER_PEOPLE_NEAR_ME {
225  PWSTR         pwzNickName;
226  PEER_ENDPOINT endpoint;
227  GUID          id;
228} PEER_PEOPLE_NEAR_ME, *PPEER_PEOPLE_NEAR_ME, *PCPEER_PEOPLE_NEAR_ME, **PPPEER_PEOPLE_NEAR_ME;
229
230typedef struct _PEER_PRESENCE_INFO {
231  PEER_PRESENCE_STATUS status;
232  PWSTR                pwzDescriptiveText;
233} PEER_PRESENCE_INFO, *PPEER_PRESENCE_INFO;
234typedef const PEER_PRESENCE_INFO *PCPEER_PRESENCE_INFO;
235
236HRESULT WINAPI PeerCollabAddContact(
237  PCWSTR pwzContactData,
238  PPEER_CONTACT *ppContact
239);
240
241HRESULT WINAPI PeerCollabAsyncInviteContact(
242  PCPEER_CONTACT pcContact,
243  PPEER_ENDPOINT pcEndpoint,
244  PCPEER_INVITATION pcInvitation,
245  HANDLE hEvent,
246  HANDLE *phInvitation
247);
248
249HRESULT WINAPI PeerCollabAsyncInviteEndpoint(
250  PPEER_ENDPOINT pcEndpoint,
251  PCPEER_INVITATION pcInvitation,
252  HANDLE hEvent,
253  HANDLE *phInvitation
254);
255
256HRESULT WINAPI PeerCollabCancelInvitation(
257  HANDLE hInvitation
258);
259
260HRESULT WINAPI PeerCollabCloseHandle(
261  HANDLE handle
262);
263
264HRESULT WINAPI PeerCollabDeleteContact(
265  PCWSTR pwzPeerName
266);
267
268HRESULT WINAPI PeerCollabDeleteEndpointData(
269  PCPEER_ENDPOINT pcEndpoint
270);
271
272HRESULT WINAPI PeerCollabDeleteObject(
273  const GUID *pObjectId
274);
275
276HRESULT WINAPI PeerCollabEnumApplicationRegistrationInfo(
277  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
278  HPEERENUM *phPeerEnum
279);
280
281HRESULT WINAPI PeerCollabEnumApplications(
282  PCPEER_ENDPOINT pcEndpoint,
283  const GUID *pApplicationId,
284  HPEERENUM *phPeerEnum
285);
286
287HRESULT WINAPI PeerCollabEnumContacts(
288  HPEERENUM *phPeerEnum
289);
290
291HRESULT WINAPI PeerCollabEnumEndpoints(
292  PCPEER_CONTACT pcContact,
293  HPEERENUM *phPeerEnum
294);
295
296HRESULT  WINAPI PeerCollabEnumObjects(
297  PCPEER_ENDPOINT pcEndpoint,
298  const GUID *pObjectId,
299  HPEERENUM *phPeerEnum
300);
301
302HRESULT WINAPI PeerCollabEnumPeopleNearMe(
303  HPEERENUM *phPeerEnum
304);
305
306HRESULT WINAPI PeerCollabExportContact(
307  PWSTR pwzPeerName,
308  PWSTR *ppwzContactData
309);
310
311HRESULT  WINAPI PeerCollabGetAppLaunchInfo(
312  PPEER_APP_LAUNCH_INFO *ppLaunchInfo
313);
314
315HRESULT WINAPI PeerCollabGetApplicationRegistrationInfo(
316  const GUID *pApplicationId,
317  PEER_APPLICATION_REGISTRATION_TYPE registrationType,
318  PPEER_APPLICATION_REGISTRATION_INFO *ppRegInfo
319);
320
321HRESULT WINAPI PeerCollabGetContact(
322  PWSTR pwzPeerName,
323  PCPEER_CONTACT *ppContact
324);
325
326HRESULT WINAPI PeerCollabGetEndpointName(
327  PWSTR *ppwzEndpointName
328);
329
330HRESULT WINAPI PeerCollabGetEventData(
331  HPEEREVENT hPeerEvent,
332  PPEER_COLLAB_EVENT_DATA *ppEventData
333);
334
335HRESULT  WINAPI PeerCollabGetInvitationResponse(
336  HANDLE hInvitation,
337  PPEER_INVITATION_RESPONSE *ppInvitationResponse
338);
339
340HRESULT WINAPI PeerCollabGetPresenceInfo(
341  PCPEER_ENDPOINT pEndpoint,
342  PPEER_PRESENCE_INFO *ppPresenceInfo
343);
344
345HRESULT  WINAPI PeerCollabGetSigninOptions(
346  DWORD *dwSigninOptions
347);
348
349HRESULT WINAPI PeerCollabInviteContact(
350  PCPEER_CONTACT pcContact,
351  PCPEER_ENDPOINT pcEndpoint,
352  const PCPEER_INVITATION pcInvitation,
353  PPEER_INVITATION_RESPONSE *ppResponse
354);
355
356HRESULT  WINAPI PeerCollabInviteEndpoint(
357  PCPEER_ENDPOINT pcEndpoint,
358  PCPEER_INVITATION pcInvitation,
359  PPEER_INVITATION_RESPONSE *ppResponse
360);
361
362HRESULT WINAPI PeerCollabParseContact(
363  PWSTR pwzContactData,
364  PCPEER_CONTACT *ppContact
365);
366
367HRESULT WINAPI PeerCollabQueryContactData(
368  PCPEER_ENDPOINT pcEndpoint,
369  PWSTR *ppwzContactData
370);
371
372HRESULT WINAPI PeerCollabRefreshEndpointData(
373  PCPEER_ENDPOINT pcEndpoint
374);
375
376HRESULT  WINAPI PeerCollabRegisterApplication(
377  PCPEER_APPLICATION_REGISTRATION_INFO pcApplication,
378  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
379);
380
381HRESULT  WINAPI PeerCollabRegisterEvent(
382  HANDLE hEvent,
383  DWORD cEventRegistration,
384  PPEER_COLLAB_EVENT_REGISTRATION pEventRegistrations,
385  HPEEREVENT *phPeerEvent
386);
387
388HRESULT WINAPI PeerCollabSetEndpointName(
389  PCWSTR pwzEndpointName
390);
391
392HRESULT  WINAPI PeerCollabSetObject(
393  PCPEER_OBJECT pcObject
394);
395
396HRESULT WINAPI PeerCollabSetPresenceInfo(
397  PCPEER_PRESENCE_INFO pcPresenceInfo
398);
399
400HRESULT WINAPI PeerCollabShutdown(void);
401
402HRESULT  WINAPI PeerCollabSignin(
403  HWND hwndParent,
404  DWORD dwSigninOptions
405);
406
407HRESULT  WINAPI PeerCollabSignout(
408  DWORD dwSignoutOptions
409);
410
411HRESULT  WINAPI PeerCollabStartup(
412  WORD wVersionRequested
413);
414
415HRESULT WINAPI PeerCollabSubscribeEndpointData(
416  PCPEER_ENDPOINT pcEndpoint
417);
418
419HRESULT  WINAPI PeerCollabUnregisterApplication(
420  const GUID *pApplicationID,
421  PEER_APPLICATION_REGISTRATION_FLAGS registrationType
422);
423
424HRESULT  WINAPI PeerCollabUnregisterEvent(
425  HPEEREVENT hPeerEvent
426);
427
428HRESULT WINAPI PeerCollabUnsubscribeEndpointData(
429  PCPEER_ENDPOINT pcEndpoint
430);
431
432HRESULT  WINAPI PeerCollabUpdateContact(
433  PCPEER_CONTACT pContact
434);
435
436#ifdef __cplusplus
437}
438#endif
439#endif /* (_WIN32_WINNT >= 0x0600) */
440#endif /*_INC_P2P*/
441