Files
resiprocate/repro/AclStore.hxx

139 lines
5.0 KiB
C++

#if !defined(REPRO_ACLSTORE_HXX)
#define REPRO_ACLSTORE_HXX
#include <list>
#include "rutil/Data.hxx"
#include "rutil/RWMutex.hxx"
#include "resip/stack/SipMessage.hxx"
#include "resip/stack/Tuple.hxx"
#include "repro/AbstractDb.hxx"
namespace repro
{
class AclStore
{
public:
class TlsPeerNameRecord
{
public:
resip::Data key;
resip::Data mTlsPeerName;
};
class AddressRecord
{
public:
AddressRecord(const resip::Data& printableAddress, const int port, const resip::TransportType type) : mAddressTuple(printableAddress, port, type) {};
resip::Data key;
resip::Tuple mAddressTuple;
short mMask;
};
typedef resip::Data Key;
typedef std::vector<TlsPeerNameRecord> TlsPeerNameList;
typedef std::vector<AddressRecord> AddressList;
AclStore(AbstractDb& db);
~AclStore();
bool addAcl(const resip::Data& tlsPeerName,
const resip::Data& address,
const short& mask,
const short& port,
const short& family,
const short& transport);
bool addAcl(const resip::Data& tlsPeerNameOrAddress,
const short& port,
const short& transport);
void eraseAcl(const resip::Data& tlsPeerName,
const resip::Data& address,
const short& mask,
const short& port,
const short& family,
const short& transport);
void eraseAcl(const resip::Data& key);
resip::Data getTlsPeerName( const resip::Data& key );
resip::Tuple getAddressTuple( const resip::Data& key );
short getAddressMask( const resip::Data& key );
Key getFirstTlsPeerNameKey(); // return empty if no more
Key getNextTlsPeerNameKey(Key& key); // return empty if no more
Key getFirstAddressKey(); // return empty if no more
Key getNextAddressKey(Key& key); // return empty if no more
bool isTlsPeerNameTrusted(const std::list<resip::Data>& tlsPeerNames);
bool isAddressTrusted(const resip::Tuple& address);
bool isRequestTrusted(const resip::SipMessage& request);
private:
AbstractDb& mDb;
Key buildKey(const resip::Data& tlsPeerName,
const resip::Data& address,
const short& mask,
const short& port,
const short& family,
const short& transport) const;
bool findTlsPeerNameKey(const Key& key); // move cursor to key
bool findAddressKey(const Key& key); // move cursor to key
resip::RWMutex mMutex;
TlsPeerNameList mTlsPeerNameList;
TlsPeerNameList::iterator mTlsPeerNameCursor;
AddressList mAddressList;
AddressList::iterator mAddressCursor;
};
}
#endif
/* ====================================================================
* The Vovida Software License, Version 1.0
*
* Copyright (c) 2000 Vovida Networks, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The names "VOCAL", "Vovida Open Communication Application Library",
* and "Vovida Open Communication Application Library (VOCAL)" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact vocal@vovida.org.
*
* 4. Products derived from this software may not be called "VOCAL", nor
* may "VOCAL" appear in their name, without prior written
* permission of Vovida Networks, Inc.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
* NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
* NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
* IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* ====================================================================
*/