mirror of
https://github.com/resiprocate/resiprocate.git
synced 2026-01-12 00:05:02 +08:00
git-svn-id: https://svn.resiprocate.org/rep/resiprocate/main@10824 ddefafc4-47db-0310-ae44-fa13212b10f2
139 lines
5.0 KiB
C++
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.
|
|
*
|
|
* ====================================================================
|
|
*/
|