reSIProcate/stack  9694
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes
resip::TupleMarkManager Class Reference

#include <TupleMarkManager.hxx>

Collaboration diagram for resip::TupleMarkManager:
Collaboration graph
[legend]

List of all members.

Classes

class  ListEntry

Public Types

enum  MarkType { OK, GREY, BLACK }

Public Member Functions

 TupleMarkManager ()
virtual ~TupleMarkManager ()
MarkType getMarkType (const Tuple &tuple)
void mark (const Tuple &tuple, UInt64 expiry, MarkType mark)
void registerMarkListener (MarkListener *)
void unregisterMarkListener (MarkListener *)

Private Types

typedef std::map< ListEntry,
MarkType
TupleList
typedef std::set< MarkListener * > Listeners

Private Member Functions

void notifyListeners (const resip::Tuple &tuple, UInt64 &expiry, MarkType &mark)

Private Attributes

TupleList mList
resip::Mutex mListMutex
Listeners mListeners

Detailed Description

Definition at line 14 of file TupleMarkManager.hxx.


Member Typedef Documentation

typedef std::set<MarkListener*> resip::TupleMarkManager::Listeners [private]

Definition at line 57 of file TupleMarkManager.hxx.

Definition at line 52 of file TupleMarkManager.hxx.


Member Enumeration Documentation

Enumerator:
OK 
GREY 
BLACK 

Definition at line 20 of file TupleMarkManager.hxx.

      {
         OK,
         GREY,
         BLACK
      }

Constructor & Destructor Documentation

resip::TupleMarkManager::TupleMarkManager ( ) [inline]

Definition at line 17 of file TupleMarkManager.hxx.

{}
virtual resip::TupleMarkManager::~TupleMarkManager ( ) [inline, virtual]

Definition at line 18 of file TupleMarkManager.hxx.

{}

Member Function Documentation

TupleMarkManager::MarkType resip::TupleMarkManager::getMarkType ( const Tuple tuple)

Definition at line 11 of file TupleMarkManager.cxx.

References resip::Timer::getTimeMs(), mark(), mList, mListMutex, notifyListeners(), and OK.

Referenced by resip::DnsResult::lookupInternal(), and resip::DnsResult::onDnsResult().

{
   ListEntry entry(tuple,0);
   resip::Lock g(mListMutex);
   TupleList::iterator i=mList.find(entry);
   
   if(i!=mList.end())
   {
      UInt64 now=Timer::getTimeMs();
      if(i->first.mExpiry > now)
      {
         return i->second;
      }
      else
      {
         mList.erase(i);
         // ?bwc? Should we do this?
         UInt64 expiry = 0;
         MarkType mark = OK;
         notifyListeners(tuple,expiry,mark);
      }
   }
   
   return OK;
}

Here is the call graph for this function:

void resip::TupleMarkManager::mark ( const Tuple tuple,
UInt64  expiry,
MarkType  mark 
)

Definition at line 37 of file TupleMarkManager.cxx.

References mList, mListMutex, and notifyListeners().

Referenced by resip::DnsResult::blacklistLast(), getMarkType(), and resip::DnsResult::greylistLast().

{
   // .amr. Notify listeners first so they can change the entry if they want
   notifyListeners(tuple,expiry,mark);
   ListEntry entry(tuple,expiry);
   resip::Lock g(mListMutex);
   mList[entry]=mark;
}

Here is the call graph for this function:

void resip::TupleMarkManager::notifyListeners ( const resip::Tuple tuple,
UInt64 expiry,
MarkType mark 
) [private]

Definition at line 57 of file TupleMarkManager.cxx.

References mListeners.

Referenced by getMarkType(), and mark().

{
   for(Listeners::iterator i = mListeners.begin(); i!=mListeners.end(); ++i)
   {
      (*i)->onMark(tuple,expiry,mark);
   }
}
void resip::TupleMarkManager::registerMarkListener ( MarkListener listener)

Definition at line 46 of file TupleMarkManager.cxx.

References mListeners.

Referenced by main(), and resip::TransportSelector::registerMarkListener().

{
   mListeners.insert(listener);
}
void resip::TupleMarkManager::unregisterMarkListener ( MarkListener listener)

Definition at line 51 of file TupleMarkManager.cxx.

References mListeners.

Referenced by main(), and resip::TransportSelector::unregisterMarkListener().

{
   mListeners.erase(listener);
}

Member Data Documentation

Definition at line 54 of file TupleMarkManager.hxx.

Referenced by getMarkType(), and mark().

Definition at line 55 of file TupleMarkManager.hxx.

Referenced by getMarkType(), and mark().


The documentation for this class was generated from the following files: