Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000.
//
// File: E V T D I A G . C P P
//
// Contents: Eventing manager diagnostic functions
//
// Notes:
//
// Author: danielwe 2000/10/2
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include <upnpatl.h>
#include "hostp.h"
#include "evtapi.h"
#include "evtdiag.h"
#include "ncstring.h"
extern CRITICAL_SECTION g_csListEventSource; extern UPNP_EVENT_SOURCE * g_pesList;
STDMETHODIMP CUPnPEventingManagerDiag::GetEventSourceInfo( DWORD *pces, UDH_EVTSRC_INFO **prgesInfo) { HRESULT hr = S_OK; UPNP_EVENT_SOURCE * pesCur; UDH_EVTSRC_INFO * rguei = NULL; DWORD ces = 0; DWORD ies;
Assert(pces); Assert(prgesInfo);
*pces = 0; *prgesInfo = NULL;
EnterCriticalSection(&g_csListEventSource);
if (g_pesList) { for (pesCur = g_pesList; pesCur; pesCur = pesCur->pesNext) { ces++; }
rguei = (UDH_EVTSRC_INFO *)CoTaskMemAlloc(sizeof(UDH_EVTSRC_INFO) * ces); if (rguei) { ZeroMemory(rguei, sizeof(UDH_EVTSRC_INFO) * ces);
for (ies = 0, pesCur = g_pesList; pesCur; pesCur = pesCur->pesNext, ies++) { UPNP_SUBSCRIBER * psubCur;
for (psubCur = pesCur->psubList; psubCur; psubCur = psubCur->psubNext) { rguei[ies].cSubs++; }
rguei[ies].szEsid = COMSzFromWsz(pesCur->szEsid);
rguei[ies].rgSubs = (UDH_SUBSCRIBER_INFO *)CoTaskMemAlloc(sizeof(UDH_SUBSCRIBER_INFO) * rguei[ies].cSubs); if (rguei[ies].rgSubs) { DWORD isub;
ZeroMemory(rguei[ies].rgSubs, sizeof(UDH_SUBSCRIBER_INFO) * rguei[ies].cSubs); for (isub = 0, psubCur = pesCur->psubList; psubCur; isub++, psubCur = psubCur->psubNext) { rguei[ies].rgSubs[isub].csecTimeout = psubCur->csecTimeout; rguei[ies].rgSubs[isub].ftTimeout = psubCur->ftTimeout; rguei[ies].rgSubs[isub].iSeq = psubCur->iSeq; rguei[ies].rgSubs[isub].szDestUrl = COMSzFromWsz(psubCur->rgszUrl[0]); rguei[ies].rgSubs[isub].szSid = COMSzFromWsz(psubCur->szSid); } } else { hr = E_OUTOFMEMORY; } } } else { hr = E_OUTOFMEMORY; } }
if (SUCCEEDED(hr)) { *prgesInfo = rguei; *pces = ces; }
LeaveCriticalSection(&g_csListEventSource);
return hr; }
|