152 lines
3.7 KiB
C++
152 lines
3.7 KiB
C++
|
//##--------------------------------------------------------------
|
||
|
//
|
||
|
// File: portscoll.cpp
|
||
|
//
|
||
|
// Synopsis: Implementation of CPortsCollection class responsible
|
||
|
// for holding a collection of ports in a multi_map
|
||
|
//
|
||
|
// History: 10/22/98 MKarki Created
|
||
|
//
|
||
|
// Copyright (C) 1997-98 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
//----------------------------------------------------------------
|
||
|
#include "radcommon.h"
|
||
|
#include "portscoll.h"
|
||
|
|
||
|
//++--------------------------------------------------------------
|
||
|
//
|
||
|
// Function: Insert
|
||
|
//
|
||
|
// Synopsis: This is CPortsCollection class public method which
|
||
|
// is called to insert a port,address pair into the
|
||
|
// collection
|
||
|
//
|
||
|
// Arguments: [in] DWORD - port
|
||
|
// [in] DWORD - IP Address
|
||
|
//
|
||
|
// Returns: HRESULT
|
||
|
//
|
||
|
// History: MKarki Created 10/22/97
|
||
|
//
|
||
|
//----------------------------------------------------------------
|
||
|
HRESULT CPortsCollection::Insert (
|
||
|
/*[in]*/ WORD wPort,
|
||
|
/*[in]*/ DWORD dwIPAddress
|
||
|
)
|
||
|
{
|
||
|
bool bInsert = true;
|
||
|
|
||
|
//
|
||
|
// check for this port already in map
|
||
|
//
|
||
|
pair <PORTITR, PORTITR>
|
||
|
itrPair = m_mapPorts.equal_range (wPort);
|
||
|
if (itrPair.first != itrPair.second)
|
||
|
{
|
||
|
//
|
||
|
// we already have values with this key in the collection
|
||
|
//
|
||
|
PORTITR itr = itrPair.first;
|
||
|
do
|
||
|
{
|
||
|
if (INADDR_ANY == dwIPAddress)
|
||
|
{
|
||
|
itr = m_mapPorts.erase (itr);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (INADDR_ANY == (*itr).second)
|
||
|
{
|
||
|
bInsert = false;
|
||
|
}
|
||
|
++itr;
|
||
|
}
|
||
|
}
|
||
|
while (itr != itrPair.second);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// insert this port,address pair if required
|
||
|
//
|
||
|
if (bInsert)
|
||
|
{
|
||
|
m_mapPorts.insert (
|
||
|
PORTSCOLLECTION::value_type (wPort, dwIPAddress)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return (S_OK);
|
||
|
|
||
|
} // end of CPortsCollection::Insert method
|
||
|
|
||
|
|
||
|
//++--------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetNext
|
||
|
//
|
||
|
// Synopsis: This is CPortsCollection class public method which
|
||
|
// is called to get the next element from the map
|
||
|
//
|
||
|
// Arguments: [out] PWORD - port
|
||
|
// [out] PDWORD - IP Address
|
||
|
//
|
||
|
// Returns: HRESULT
|
||
|
//
|
||
|
// History: MKarki Created 10/22/97
|
||
|
//
|
||
|
//----------------------------------------------------------------
|
||
|
HRESULT CPortsCollection::GetNext (
|
||
|
/*[out]*/ PWORD pwPort,
|
||
|
/*[out]*/ PDWORD pdwIPAddress
|
||
|
)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
_ASSERT (pwPort && pdwIPAddress);
|
||
|
|
||
|
if (false == m_bDoneGet)
|
||
|
{
|
||
|
m_itr = m_mapPorts.begin();
|
||
|
m_bDoneGet = true;
|
||
|
}
|
||
|
|
||
|
|
||
|
if (m_itr != m_mapPorts.end ())
|
||
|
{
|
||
|
*pwPort = (*m_itr).first;
|
||
|
*pdwIPAddress =(*m_itr).second;
|
||
|
++m_itr;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
hr = E_FAIL;
|
||
|
}
|
||
|
|
||
|
return (hr);
|
||
|
|
||
|
} // end of CPortsCollection::GetNext method
|
||
|
|
||
|
//++--------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ~CPortsCollection
|
||
|
//
|
||
|
// Synopsis: This is CPortsCollection class public destruction
|
||
|
//
|
||
|
// Arguments: none
|
||
|
//
|
||
|
// Returns: none
|
||
|
//
|
||
|
// History: MKarki Created 10/22/97
|
||
|
//
|
||
|
//----------------------------------------------------------------
|
||
|
CPortsCollection::~CPortsCollection ()
|
||
|
{
|
||
|
PORTITR itr = m_mapPorts.begin ();
|
||
|
while (itr != m_mapPorts.end ())
|
||
|
{
|
||
|
itr = m_mapPorts.erase (itr);
|
||
|
}
|
||
|
|
||
|
} // end of CPortsCollection::~CPortsCollection method
|