1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
#include "MessengerContacts.h"
#include "MessengerContact.h"
EXTERN_C const GUID DECLSPEC_SELECTANY IID_IMessengerContacts
= { 0xE7479A0D, 0xBB19, 0x44a5, { 0x96, 0x8F, 0x6F, 0x41, 0xD9, 0x3E, 0xE0, 0xBC } };
class SelfMessengerContact
: public MessengerContact
{
public:
SelfMessengerContact(IMessenger *messenger)
: MessengerContact(messenger, NULL) {}
// IMessengerContact
STDMETHODIMP get_IsSelf(VARIANT_BOOL *pBoolSelf)
{
HRESULT hr;
if (pBoolSelf)
{
*pBoolSelf = VARIANT_TRUE;
hr = S_OK;
}
else
hr = RPC_X_NULL_REF_POINTER;
return hr;
}
STDMETHODIMP get_SigninName(BSTR *pbstrSigninName)
{ return _messenger->get_MySigninName(pbstrSigninName); }
STDMETHODIMP get_Status(MISTATUS *pMstate)
{
HRESULT hr;
if (pMstate)
{
*pMstate = MISTATUS_ONLINE;
hr = S_OK;
}
else
hr = RPC_X_NULL_REF_POINTER;
return hr;
}
protected:
virtual ~SelfMessengerContact() {}
};
MessengerContacts::MessengerContacts(IMessenger *messenger)
: _messenger(messenger),
_self(NULL)
{
_messenger->AddRef();
}
MessengerContacts::~MessengerContacts()
{
_messenger->Release();
if (_self)
_self->Release();
}
STDMETHODIMP MessengerContacts::get__NewEnum(IUnknown **ppUnknown)
STDMETHODIMP_E_NOTIMPL_STUB
STDMETHODIMP MessengerContacts::get_Count(LONG *pcContacts)
{
HRESULT hr;
if (pcContacts)
{
*pcContacts = 1;
hr = S_OK;
}
else
hr = RPC_X_NULL_REF_POINTER;
return hr;
}
STDMETHODIMP MessengerContacts::getSelf(IDispatch **ppMContact)
STDMETHODIMP_RESOLVE_WEAKREFERENCE_OR_NEW(ppMContact,_self,SelfMessengerContact,_messenger)
STDMETHODIMP MessengerContacts::Item(LONG Index, IDispatch **ppMContact)
{
HRESULT hr;
if (ppMContact)
{
if (0 > Index)
{
*ppMContact = NULL;
hr = E_INVALIDARG;
}
else if (0 == Index)
hr = getSelf(ppMContact);
else
{
*ppMContact = NULL;
hr = E_FAIL;
}
}
else
hr = RPC_X_NULL_REF_POINTER;
return hr;
}
STDMETHODIMP MessengerContacts::Remove(IDispatch *pMContact)
STDMETHODIMP_E_NOTIMPL_STUB
|