~ubuntu-branches/ubuntu/karmic/amarok/karmic

« back to all changes in this revision

Viewing changes to src/services/lastfm/lastfm/ws/WmiSink_win.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2009-09-03 23:49:07 UTC
  • mfrom: (1.77.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090903234907-rk4lt6hnxwckvuon
Tags: 2:2.1.80-0ubuntu1
New upstream beta release

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************
2
 
 *   Copyright 2005-2008 Last.fm Ltd.                                      *
3
 
 *                                                                         *
4
 
 *   This program is free software; you can redistribute it and/or modify  *
5
 
 *   it under the terms of the GNU General Public License as published by  *
6
 
 *   the Free Software Foundation; either version 2 of the License, or     *
7
 
 *   (at your option) any later version.                                   *
8
 
 *                                                                         *
9
 
 *   This program is distributed in the hope that it will be useful,       *
10
 
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11
 
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12
 
 *   GNU General Public License for more details.                          *
13
 
 *                                                                         *
14
 
 *   You should have received a copy of the GNU General Public License     *
15
 
 *   along with this program; if not, write to the                         *
16
 
 *   Free Software Foundation, Inc.,                                       *
17
 
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
18
 
 ***************************************************************************/
19
 
 
20
 
#include "WmiSink_win.h"
21
 
#include "NdisEvents_win.h"
22
 
 
23
 
 
24
 
WmiSink::WmiSink(NdisEvents *callback) 
25
 
        : m_cRef(1)
26
 
        , m_callback(callback)
27
 
{}
28
 
 
29
 
WmiSink::~WmiSink() 
30
 
{}
31
 
 
32
 
void
33
 
WmiSink::disconnect()
34
 
{
35
 
        m_callback = 0;
36
 
}
37
 
 
38
 
STDMETHODIMP
39
 
WmiSink::QueryInterface(REFIID riid, LPVOID * ppv)
40
 
{
41
 
    *ppv = 0;
42
 
 
43
 
    if (IID_IUnknown==riid || IID_IWbemObjectSink == riid)
44
 
    {
45
 
        *ppv = (IWbemObjectSink *) this;
46
 
        AddRef();
47
 
        return NOERROR;
48
 
    }
49
 
 
50
 
    return E_NOINTERFACE;
51
 
}
52
 
 
53
 
 
54
 
ULONG
55
 
WmiSink::AddRef()
56
 
{
57
 
    return ++m_cRef;
58
 
}
59
 
 
60
 
ULONG
61
 
WmiSink::Release()
62
 
{
63
 
    if (0 != --m_cRef)
64
 
        return m_cRef;
65
 
 
66
 
    delete this;
67
 
    return 0;
68
 
}
69
 
 
70
 
// This method receives notification objects.
71
 
HRESULT 
72
 
WmiSink::Indicate(long lObjectCount, IWbemClassObject** ppObjArray)
73
 
{
74
 
        // For each object in the array, extract the object and display the
75
 
        // information in the object.
76
 
        for (long i=0; i<lObjectCount; i++)
77
 
        {
78
 
                CComVariant vt, vtClass;
79
 
                ppObjArray[i]->Get(L"InstanceName", 0, &vt, NULL, NULL);
80
 
                ppObjArray[i]->Get(L"__Class", 0, &vtClass, NULL, NULL);
81
 
 
82
 
                if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusMediaDisconnect"))
83
 
                {
84
 
                        if (m_callback) m_callback->onConnectionDown(vt.bstrVal);
85
 
                }
86
 
                else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusMediaConnect"))
87
 
                {
88
 
                        if (m_callback) m_callback->onConnectionUp(vt.bstrVal);
89
 
                }
90
 
                // notifications we aren't interested in right now:
91
 
                //
92
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_NotifyAdapterRemoval"))
93
 
                //{
94
 
                //    bstrLog = (_bstr_t) vt.bstrVal;
95
 
                //    VariantClear (&vt);
96
 
                //    ppObjArray[i]->Get (L"DeviceName", 0, &vt, NULL, NULL);
97
 
                //    bstrLog += (_bstr_t) _T(": ") + (_bstr_t) vt.bstrVal + (_bstr_t) _T(" has been removed");
98
 
                //    displayDlg.LogEvent (bstrLog);
99
 
                //}
100
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_NotifyAdapterArrival"))
101
 
                //{
102
 
                //    bstrLog = (_bstr_t) vt.bstrVal;
103
 
                //    VariantClear (&vt);
104
 
                //    ppObjArray[i]->Get(L"DeviceName", 0, &vt, NULL, NULL);
105
 
                //    bstrLog += (_bstr_t) _T(": ") + (_bstr_t) vt.bstrVal + (_bstr_t) _T(" has been added");
106
 
                //    displayDlg.LogEvent (bstrLog);
107
 
                //}
108
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusResetStart"))
109
 
                //{
110
 
                //    bstrLog = (_bstr_t) vt.bstrVal + (_bstr_t) _T(" has begun a reset");
111
 
                //    displayDlg.LogEvent (bstrLog);
112
 
                //}
113
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusResetEnd"))
114
 
                //{
115
 
                //    bstrLog = (_bstr_t) vt.bstrVal + (_bstr_t) _T(" has finished a reset");
116
 
                //    displayDlg.LogEvent (bstrLog);
117
 
                //}
118
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_NotifyVcArrival"))
119
 
                //{
120
 
                //    bstrLog = (_bstr_t) _T("VC arrival: ") + (_bstr_t) vt.bstrVal;
121
 
                //    displayDlg.LogEvent (bstrLog);
122
 
                //}
123
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_NotifyVcRemoval"))
124
 
                //{
125
 
                //    bstrLog = (_bstr_t) _T("VC removal: ") + (_bstr_t) vt.bstrVal;
126
 
                //    displayDlg.LogEvent (bstrLog);
127
 
                //}
128
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusMediaSpecificIndication"))
129
 
                //{
130
 
                //    ATLTRACE (_T("Media specific indication: %s\n"), (TCHAR *) (_bstr_t) vt.bstrVal);
131
 
                //    VariantClear (&vt);
132
 
                //    ppObjArray[i]->Get (L"NdisStatusMediaSpecificIndication", 0, &vt, NULL, NULL);
133
 
                //    LONG lLowerBound, lUpperBound, j;
134
 
                //    UCHAR ch;
135
 
                //    SafeArrayGetLBound (V_ARRAY (&vt), 1, &lLowerBound);
136
 
                //    SafeArrayGetUBound (V_ARRAY (&vt), 1, &lUpperBound);
137
 
                //    ATLTRACE (" ");
138
 
                //    for (j = lLowerBound; j<= lUpperBound; j++ )
139
 
                //    {
140
 
                //        SafeArrayGetElement (V_ARRAY (&vt), &j, &ch);
141
 
                //        ATLTRACE (_T("%4i"), ch);
142
 
 
143
 
                //        if (((j - lLowerBound) % 8 == 7) && (j <= lUpperBound))
144
 
                //            ATLTRACE (_T("\n"));         
145
 
                //    }                          
146
 
                //}
147
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusProtocolBind"))
148
 
                //{
149
 
                //    bstrLog = (_bstr_t) vt.bstrVal;
150
 
                //    VariantClear (&vt);
151
 
                //    ppObjArray[i]->Get (L"Transport", 0, &vt, NULL, NULL);
152
 
                //    bstrLog += (_bstr_t) _T(" is now bound to ") + (_bstr_t) vt.bstrVal;
153
 
                //    displayDlg.LogEvent (bstrLog);
154
 
                //}
155
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusProtocolBind"))
156
 
                //{
157
 
                //    bstrLog = (_bstr_t) vt.bstrVal;
158
 
                //    VariantClear (&vt);
159
 
                //    ppObjArray[i]->Get(L"Transport", 0, &vt, NULL, NULL);
160
 
                //    bstrLog += (_bstr_t) _T(" was unbound from ") + (_bstr_t) vt.bstrVal;
161
 
                //    displayDlg.LogEvent (bstrLog);
162
 
                //}
163
 
                //else if (!wcscmp (vtClass.bstrVal, L"MSNdis_StatusLinkSpeedChange"))
164
 
                //{
165
 
                //    IWbemClassObject* pWMIObj=NULL;
166
 
                //    bstrLog = (_bstr_t) _T("Link speed change ") + (_bstr_t) vt.bstrVal;
167
 
                //    VariantClear (&vt);
168
 
                //    ppObjArray[i]->Get (L"NdisStatusLinkSpeedChange", 0, &vt, NULL, NULL);
169
 
                //    if SUCCEEDED (vt.punkVal->QueryInterface (IID_IWbemClassObject, (void**)&pWMIObj))
170
 
                //    {
171
 
                //        TCHAR szNum[50];
172
 
                //        pWMIObj->Get (L"Inbound", 0, &vt2, NULL, NULL);
173
 
                //        _stprintf (szNum, _T(" Inbound = %u "), vt2.lVal);
174
 
                //        bstrLog += (_bstr_t) szNum;
175
 
                //        VariantClear (&vt2);
176
 
                //        pWMIObj->Get (L"Outbound", 0, &vt2, NULL, NULL);
177
 
                //        _stprintf (szNum, _T(" Outbound = %u "), vt2.lVal);
178
 
                //        bstrLog += (_bstr_t) szNum;
179
 
                //        VariantClear (&vt2);
180
 
                //        pWMIObj->Release ();
181
 
                //        pWMIObj = NULL;
182
 
                //    }
183
 
                //    displayDlg.LogEvent (bstrLog);
184
 
                //}
185
 
 
186
 
                VariantClear (&vtClass);
187
 
                VariantClear (&vt);
188
 
        }
189
 
        return WBEM_NO_ERROR;
190
 
}
191
 
 
192
 
 
193
 
// Misc. status codes sent by sink.
194
 
HRESULT 
195
 
WmiSink::SetStatus(long lFlags, HRESULT hResult, BSTR strParam, IWbemClassObject __RPC_FAR *pObjParam)
196
 
{
197
 
        lFlags;
198
 
        hResult;
199
 
        strParam;
200
 
        pObjParam;
201
 
    return WBEM_NO_ERROR;
202
 
}