2025-11-28 00:35:46 +09:00

141 lines
3.7 KiB
C

/********************************************************************++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 1985-2007 Microsoft Corporation. All Rights Reserved.
Abstract:
This C file includes sample code for enumerating people near me
with the Microsoft Peer-to-Peer Collaboration APIs.
--********************************************************************/
#pragma warning(disable:4201) // nameless struct/union
#include <p2p.h>
#include <stdio.h>
#include <strsafe.h>
#include <string.h>
#include <rpc.h>
#include "PNM.h"
#include "shared.h"
//-----------------------------------------------------------------------------
// Function: EnumeratePeopleNearMe
// Purpose: Simple wrapper function that calls PeerCollabEnumPeopleNearMe
// and displays the results.
// Parameters: (none)
//
void EnumeratePeopleNearMe()
{
PEER_PEOPLE_NEAR_ME** ppPeopleNearMe = NULL;
HRESULT hr = S_OK;
HPEERENUM hEnum = NULL;
ULONG count = 0;
//Open an enumeration of all PNM endpoints
//
hr = PeerCollabEnumPeopleNearMe(&hEnum);
if (FAILED(hr))
{
wprintf(L"PeerCollabEnumPeopleNearMe failed.\nHRESULT=0x%x\n", hr);
PrintError(hr);
}
hr = PeerGetItemCount(hEnum, &count);
if (FAILED(hr))
{
wprintf(L"Error retrieving item count. HRESULT=0x%x\n", hr);
PrintError(hr);
goto exit;
}
if (count == 0)
{
wprintf(L"No PNM endpoints found. PNM is not started by default. On another Vista machine on your IPv6 subnet start PNM via this sample app or the PNM control panel icon.\n");
hr = E_FAIL;
goto exit;
}
//Obtain all endpoints in the enumeration
//
hr = PeerGetNextItem(hEnum, &count, (PVOID **) &ppPeopleNearMe);
//Display a list of all the endpoints
//
if (SUCCEEDED(hr))
{
PrintPeopleNearMeInfo(ppPeopleNearMe, count);
}
else
{
wprintf(L"Error retrieving endpoints, HRESULT=0x%x", hr);
PrintError(hr);
}
exit:
SAFE_PEER_FREE_DATA(ppPeopleNearMe);
//Close the enumeratration
//
SAFE_PEER_END_ENUMERATION(hEnum);
}
//-----------------------------------------------------------------------------
// Function: AddEndpointAsContact
// Purpose: Add an endpoints data to the contact store
// Parameters:
// None
//
void AddEndpointAsContact()
{
HRESULT hr = S_OK;
PEER_ENDPOINT *pEndpoint = NULL;
PWSTR pwzContactData = NULL;
//Note: The pEndpoint structures
//returned by this function has been allocated by the,
//sample application directly using malloc, not via the p2p library.
//We must free it by calling free. Do not called PeerFreeData
hr = SelectPNMEndpoint(&pEndpoint);
if (FAILED(hr))
{
goto exit;
}
hr = PeerCollabQueryContactData(pEndpoint, &pwzContactData);
IF_FAILED_PRINT_ERROR_AND_EXIT(hr, L"PeerCollabQueryContactData failed.");
hr = PeerCollabAddContact(pwzContactData, NULL);
if (SUCCEEDED(hr))
{
wprintf(L"Successfully added endpoint as contact.\n");
}
else
{
wprintf(L"PeerCollabAddContact failed.\nHRESULT=0x%x\n", hr);
PrintError(hr);
}
exit:
SAFE_PEER_FREE_DATA(pwzContactData);
//Releases memory used by the P2P library to cache information regarding this endpoint
if (pEndpoint)
{
DeleteEndpointData(pEndpoint);
}
SAFE_FREE(pEndpoint);
}