ANNA Suite  2020b
Multipurpose development suite for Telco applications
Classes | Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
anna::diameter::comm::Session Class Referenceabstract

#include <Session.hpp>

Inheritance diagram for anna::diameter::comm::Session:
Inheritance graph
[legend]
Collaboration diagram for anna::diameter::comm::Session:
Collaboration graph
[legend]

Classes

struct  OnDisconnect
 
struct  SortById
 
struct  State
 

Public Member Functions

 Session (const char *className, const char *timerName)
 
State::_v getState () const
 
void setOnDisconnect (const OnDisconnect::_v onDisconnect)
 
OnDisconnect::_v getOnDisconnect () const
 
virtual const std::string & getAddress () const =0
 
virtual int getPort () const =0
 
int getSocketId () const
 
const HopByHopgetNextHopByHop () const
 
const EndToEndgetNextEndToEnd () const
 
void setClassCodeTimeout (const ClassCode::_v v, const anna::Millisecond &millisecond)
 
anna::Millisecond getClassCodeTimeout (const ClassCode::_v v) const
 
bool isBound () const
 
virtual const Responsesend (const Message *message) noexcept(false)=0
 
const Responsesend (const Message &message) noexcept(false)
 
virtual bool unbind (bool forceDisconnect=false) noexcept(false)=0
 
const anna::MillisecondgetLastIncomingActivityTime () const
 
const anna::MillisecondgetLastOutgoingActivityTime () const
 
int getOTARequests () const
 
bool idle () const
 
void notifyOrphansOnExpiration (bool defer=true)
 
virtual std::string asString () const
 
virtual anna::xml::NodeasXML (anna::xml::Node *parent) const
 
- Public Member Functions inherited from anna::timex::Timer
 Timer (const char *name, const Millisecond &timeout)
 
std::string asString () const
 
- Public Member Functions inherited from anna::timex::TimeEvent
virtual ~TimeEvent ()
 
Id getId () const
 
const MillisecondgetTimeout () const
 
const TimeEventObservergetObserver () const
 
void setId (const Id id)
 
void setTimeout (const Millisecond &timeout)
 
void setObserver (TimeEventObserver *observer)
 
bool isActive () const
 

Static Public Attributes

static const anna::Millisecond DefaultTimeout
 
static const int DefaultPort
 

Protected Types

typedef anna::SortedVector< Response, SortById, HopByHopresponse_container
 
typedef response_container::iterator response_iterator
 
typedef response_container::const_iterator const_response_iterator
 

Protected Member Functions

virtual void initialize ()
 
void initializeSequences ()
 
void generateNextSequences ()
 
void response_add (Response *response)
 
void response_erase (Response *response)
 
Responseresponse_find (const HopByHop hopByHop) noexcept(false)
 
response_iterator response_begin ()
 
response_iterator response_end ()
 
const_response_iterator response_begin () const
 
const_response_iterator response_end () const
 
virtual void updateIncomingActivityTime ()
 
virtual void updateOutgoingActivityTime ()
 
virtual void expire (anna::timex::Engine *timeController) noexcept(false)
 
virtual void eventPeerShutdown ()=0
 
virtual void eventRequestRetransmission (Message *request)=0
 
virtual void eventResponse (const Response &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)=0
 
virtual void eventRequest (const anna::DataBlock &request, const anna::diameter::comm::OriginHost *myNode) noexcept(false)=0
 
virtual void eventUnknownResponse (const anna::DataBlock &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)=0
 
virtual void eventDPA (const anna::DataBlock &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)=0
 
virtual void receive (const anna::comm::Message &message) noexcept(false)=0
 
virtual void finalize ()
 
virtual void expireResponse (Response *)
 
void sendDPA (const Engine *commEngine, const anna::DataBlock &dprDataBlock) noexcept(false)
 
void activateActionTimer (const anna::diameter::comm::Timer::Type::_v type)
 
void cancelActionTimer ()
 
void activateTimer ()
 
void cancelTimer ()
 
virtual void timerStopped ()
 
virtual void timerStarted ()
 
virtual void setState (State::_v state)
 
- Protected Member Functions inherited from anna::timex::TimeEvent
 TimeEvent ()
 
 TimeEvent (const Id id, const Millisecond &timeout)
 
virtual void stop () noexcept(false)
 

Static Protected Member Functions

static Responseresponse (response_iterator ii)
 
static const Responseresponse (const_response_iterator ii)
 
static const char * asText (const State::_v)
 
static const char * asText (const OnDisconnect::_v)
 

Protected Attributes

const char * a_className
 
int a_socketId
 
State::_v a_state
 
OnDisconnect::_v a_onDisconnect
 
anna::diameter::comm::Timera_actionTimer
 
HopByHop a_nextHopByHop
 
EndToEnd a_nextEndToEnd
 
response_container a_responses
 
bool a_notifyOrphansOnExpiration
 
anna::timex::Enginea_timeController
 
anna::Millisecond a_lastIncomingActivityTime
 
anna::Millisecond a_lastOutgoingActivityTime
 
anna::Millisecond a_timeouts [ClassCode::Max]
 

Friends

class anna::diameter::comm::Timer
 
class Response
 

Additional Inherited Members

- Public Types inherited from anna::timex::TimeEvent
typedef anna::ptrnumber Id
 

Detailed Description

Modela la conexion realizada contra un servidor diameter.

Member Typedef Documentation

◆ const_response_iterator

◆ response_container

◆ response_iterator

Constructor & Destructor Documentation

◆ Session()

anna::diameter::comm::Session::Session ( const char *  className,
const char *  timerName 
)

Member Function Documentation

◆ activateActionTimer()

void anna::diameter::comm::Session::activateActionTimer ( const anna::diameter::comm::Timer::Type::_v  type)
protected

◆ activateTimer()

void anna::diameter::comm::Session::activateTimer ( )
protected

◆ asString()

virtual std::string anna::diameter::comm::Session::asString ( ) const
virtual

Class string representation

Returns
String with relevant information for this instance.

Reimplemented from anna::timex::TimeEvent.

Reimplemented in anna::diameter::comm::ClientSession, and anna::diameter::comm::ServerSession.

◆ asText() [1/2]

static const char* anna::diameter::comm::Session::asText ( const State::_v  )
staticprotected

◆ asText() [2/2]

static const char* anna::diameter::comm::Session::asText ( const OnDisconnect::_v  )
staticprotected

◆ asXML()

virtual anna::xml::Node* anna::diameter::comm::Session::asXML ( anna::xml::Node parent) const
virtual

Class xml representation

Parameters
parentParent XML node on which hold this instance information.
Returns
XML document with relevant information for this instance.

Reimplemented in anna::diameter::comm::ClientSession, and anna::diameter::comm::ServerSession.

◆ cancelActionTimer()

void anna::diameter::comm::Session::cancelActionTimer ( )
protected

◆ cancelTimer()

void anna::diameter::comm::Session::cancelTimer ( )
protected

◆ eventDPA()

virtual void anna::diameter::comm::Session::eventDPA ( const anna::DataBlock response,
const anna::diameter::comm::OriginHost myNode 
)
protectedpure virtualnoexcept

Handler for diameter session Disconnect-Peer-Answer messages

Parameters
responseAnswer data block object without context match
myNodeOwn origin host

◆ eventPeerShutdown()

virtual void anna::diameter::comm::Session::eventPeerShutdown ( )
protectedpure virtual

Handler about event break connection over the session.

When notified, ANNA.diameter.comm generates an diameter::comm::ClientSession::eventResponse for every request with pending answers.

◆ eventRequest()

virtual void anna::diameter::comm::Session::eventRequest ( const anna::DataBlock request,
const anna::diameter::comm::OriginHost myNode 
)
protectedpure virtualnoexcept

Handler for diameter session requests

Parameters
requestRequest container object for corresponding diameter reception
myNodeOwn origin host

◆ eventRequestRetransmission()

virtual void anna::diameter::comm::Session::eventRequestRetransmission ( Message request)
protectedpure virtual

Handler about a request retransmission over the session.

Parameters
requestMessage retransmitted

◆ eventResponse()

virtual void anna::diameter::comm::Session::eventResponse ( const Response response,
const anna::diameter::comm::OriginHost myNode 
)
protectedpure virtualnoexcept

Handler for diameter session responses

Parameters
responseAnswer data block object for corresponding diameter request
myNodeOwn origin host

◆ eventUnknownResponse()

virtual void anna::diameter::comm::Session::eventUnknownResponse ( const anna::DataBlock response,
const anna::diameter::comm::OriginHost myNode 
)
protectedpure virtualnoexcept

Handler for diameter session responses out of context

Parameters
responseAnswer data block object without context match
myNodeOwn origin host

◆ expire()

virtual void anna::diameter::comm::Session::expire ( anna::timex::Engine timeController)
inlineprotectedvirtualnoexcept

metodo que debemos re-escribir para particularizar el comportamiento de nuestra clase cuando el Engine notifica que se ha sobrepasado la duracion maxima del evento si que se invoque a ninguno de los metodos que lo cancelarian. Una vez invocado a este metodo el evento se considera cancelado y todos sus recursos son liberados automaticamente por Engine.

Parameters
timeControllerControlador de tiempo asociado al evento que esta expirando.

Implements anna::timex::TimeEvent.

315 {;}

◆ expireResponse()

virtual void anna::diameter::comm::Session::expireResponse ( Response )
protectedvirtual

◆ finalize()

virtual void anna::diameter::comm::Session::finalize ( )
protectedvirtual

◆ generateNextSequences()

void anna::diameter::comm::Session::generateNextSequences ( )
inlineprotected
EndToEnd a_nextEndToEnd
Definition: Session.hpp:280
HopByHop a_nextHopByHop
Definition: Session.hpp:279

◆ getAddress()

virtual const std::string& anna::diameter::comm::Session::getAddress ( ) const
pure virtual

Diameter server address, ip or hostname (remote for client-session, local for server-session).

Returns
Diameter server address (remote for client-session, local for server-session).

Implemented in anna::diameter::comm::ClientSession, and anna::diameter::comm::ServerSession.

◆ getClassCodeTimeout()

anna::Millisecond anna::diameter::comm::Session::getClassCodeTimeout ( const ClassCode::_v  v) const
inline

Timeout configured for class code v requests.

Returns
Timeout configured for class code v requests.
179 { return a_timeouts [v]; }
anna::Millisecond a_timeouts[ClassCode::Max]
Definition: Session.hpp:318

◆ getLastIncomingActivityTime()

const anna::Millisecond& anna::diameter::comm::Session::getLastIncomingActivityTime ( ) const
inline

Gets the timestamp for last incoming activity over the session.

Returns
Last incoming activity timestamp.
215 { return a_lastIncomingActivityTime; }
anna::Millisecond a_lastIncomingActivityTime
Definition: Session.hpp:309

◆ getLastOutgoingActivityTime()

const anna::Millisecond& anna::diameter::comm::Session::getLastOutgoingActivityTime ( ) const
inline

Gets the timestamp for last outgoing activity over the session.

Returns
Last outgoing activity timestamp.
222 { return a_lastOutgoingActivityTime; }
anna::Millisecond a_lastOutgoingActivityTime
Definition: Session.hpp:310

◆ getNextEndToEnd()

const EndToEnd& anna::diameter::comm::Session::getNextEndToEnd ( ) const
inline

Returns the next end-to-end which will be used over the diameter session to send a message It is recommended to fix the message with this value (or store along with the message), for application context identification purposes

163 { return a_nextEndToEnd; }
EndToEnd a_nextEndToEnd
Definition: Session.hpp:280

◆ getNextHopByHop()

const HopByHop& anna::diameter::comm::Session::getNextHopByHop ( ) const
inline

Returns the next hop-by-hop which will be used over the diameter session to send a message It is recommended to fix the message with this value (or store along with the message), for application context identification purposes

157 { return a_nextHopByHop; }
HopByHop a_nextHopByHop
Definition: Session.hpp:279

◆ getOnDisconnect()

OnDisconnect::_v anna::diameter::comm::Session::getOnDisconnect ( ) const
inline

Returns behaviour on 'Disconnecting' state, about unbind action (ignore/wait pending answers).

Returns
behaviour on 'Disconnecting' state, about unbind action (ignore/wait pending answers).
130 { return a_onDisconnect; }
OnDisconnect::_v a_onDisconnect
Definition: Session.hpp:275

◆ getOTARequests()

int anna::diameter::comm::Session::getOTARequests ( ) const
inline

Gets the number of requests messages over-the-air.

Returns
OTA messages.
229 { return a_responses.size(); }
response_container a_responses
Definition: Session.hpp:292

◆ getPort()

virtual int anna::diameter::comm::Session::getPort ( ) const
pure virtual

Diameter server listen port (remote for client-session, local for server-session).

Returns
Diameter server listen port (remote for client-session, local for server-session).

Implemented in anna::diameter::comm::ClientSession, and anna::diameter::comm::ServerSession.

◆ getSocketId()

int anna::diameter::comm::Session::getSocketId ( ) const
inline

Socket id.

Returns
Socket id.
150 { return a_socketId; }
int a_socketId
Definition: Session.hpp:273

◆ getState()

State::_v anna::diameter::comm::Session::getState ( ) const
inline

Session state.

Returns
State for this session.
113 { return a_state; }
State::_v a_state
Definition: Session.hpp:274

◆ idle()

bool anna::diameter::comm::Session::idle ( ) const
inline

Returns idle state (no pending answers).

Returns
Idle state.
237 { return (getOTARequests() == 0); }
int getOTARequests() const
Definition: Session.hpp:229

◆ initialize()

virtual void anna::diameter::comm::Session::initialize ( )
protectedvirtual

◆ initializeSequences()

void anna::diameter::comm::Session::initializeSequences ( )
protected

◆ isBound()

bool anna::diameter::comm::Session::isBound ( ) const
inline

Returns true when diameter server is connected (application level) false in other case.

Returns
true when diameter server is connected (application level) false in other case.
186 { return a_state == State::Bound; }
State::_v a_state
Definition: Session.hpp:274

◆ notifyOrphansOnExpiration()

void anna::diameter::comm::Session::notifyOrphansOnExpiration ( bool  defer = true)
inline

In order to avoid message burst during failover procedures (alternate server forwardings done by application), orphan request notification could be deferred to expiration event. This is the default behaviour, however if need to notice quickly the transport failure for such requets, 'false' should be established. Result code of 'OrphanTimeout' will be configured at response instance.

This only applies to client-sessions because is not usual to send request from server sessions and there wont be impact notifying orphan requests at the moment of the transport failure.

Delayed notification for orphan request due to transport failures

251 { a_notifyOrphansOnExpiration = defer; }
bool a_notifyOrphansOnExpiration
Definition: Session.hpp:293

◆ receive()

virtual void anna::diameter::comm::Session::receive ( const anna::comm::Message message)
protectedpure virtualnoexcept

Handlers

◆ response() [1/2]

static Response* anna::diameter::comm::Session::response ( response_iterator  ii)
inlinestaticprotected
301 { return response_container::data(ii); }
static Response * data(iterator ii)
Definition: SortedVector.hpp:132

◆ response() [2/2]

static const Response* anna::diameter::comm::Session::response ( const_response_iterator  ii)
inlinestaticprotected
305 { return response_container::data(ii); }
static Response * data(iterator ii)
Definition: SortedVector.hpp:132

◆ response_add()

void anna::diameter::comm::Session::response_add ( Response response)
protected

◆ response_begin() [1/2]

response_iterator anna::diameter::comm::Session::response_begin ( )
inlineprotected
299 { return a_responses.begin(); }
response_container a_responses
Definition: Session.hpp:292

◆ response_begin() [2/2]

const_response_iterator anna::diameter::comm::Session::response_begin ( ) const
inlineprotected
303 { return a_responses.begin(); }
response_container a_responses
Definition: Session.hpp:292

◆ response_end() [1/2]

response_iterator anna::diameter::comm::Session::response_end ( )
inlineprotected
300 { return a_responses.end(); }
response_container a_responses
Definition: Session.hpp:292

◆ response_end() [2/2]

const_response_iterator anna::diameter::comm::Session::response_end ( ) const
inlineprotected
304 { return a_responses.end(); }
response_container a_responses
Definition: Session.hpp:292

◆ response_erase()

void anna::diameter::comm::Session::response_erase ( Response response)
protected

◆ response_find()

Response* anna::diameter::comm::Session::response_find ( const HopByHop  hopByHop)
protectednoexcept

◆ send() [1/2]

virtual const Response* anna::diameter::comm::Session::send ( const Message message)
pure virtualnoexcept

◆ send() [2/2]

const Response* anna::diameter::comm::Session::send ( const Message message)
inlinenoexcept
201 { return send(&message); }
virtual const Response * send(const Message *message) noexcept(false)=0
Here is the call graph for this function:

◆ sendDPA()

void anna::diameter::comm::Session::sendDPA ( const Engine commEngine,
const anna::DataBlock dprDataBlock 
)
protectednoexcept

◆ setClassCodeTimeout()

void anna::diameter::comm::Session::setClassCodeTimeout ( const ClassCode::_v  v,
const anna::Millisecond millisecond 
)
inline

Set timeout to consider failed a request.

Parameters
vRequests class code.
millisecondMilliseconds wait before considering the requests failed.

Timers are internally managed and automatically activated.

173 { a_timeouts [v] = millisecond; }
anna::Millisecond a_timeouts[ClassCode::Max]
Definition: Session.hpp:318

◆ setOnDisconnect()

void anna::diameter::comm::Session::setOnDisconnect ( const OnDisconnect::_v  onDisconnect)
inline

Sets behaviour on 'Disconnecting' state, about unbind action (ignore/wait pending answers).

Parameters
onDisconnectBehaviour on 'Disconnecting' state, about unbind action (ignore/wait pending answers).
124 { a_onDisconnect = onDisconnect; }
OnDisconnect::_v a_onDisconnect
Definition: Session.hpp:275

◆ setState()

virtual void anna::diameter::comm::Session::setState ( State::_v  state)
protectedvirtual

◆ timerStarted()

virtual void anna::diameter::comm::Session::timerStarted ( )
inlineprotectedvirtual
399 {;}

◆ timerStopped()

virtual void anna::diameter::comm::Session::timerStopped ( )
inlineprotectedvirtual
398 {;}

◆ unbind()

virtual bool anna::diameter::comm::Session::unbind ( bool  forceDisconnect = false)
pure virtualnoexcept

◆ updateIncomingActivityTime()

virtual void anna::diameter::comm::Session::updateIncomingActivityTime ( )
protectedvirtual

◆ updateOutgoingActivityTime()

virtual void anna::diameter::comm::Session::updateOutgoingActivityTime ( )
protectedvirtual

Friends And Related Function Documentation

◆ anna::diameter::comm::Timer

friend class anna::diameter::comm::Timer
friend

◆ Response

friend class Response
friend

Member Data Documentation

◆ a_actionTimer

anna::diameter::comm::Timer* anna::diameter::comm::Session::a_actionTimer
protected

◆ a_className

const char* anna::diameter::comm::Session::a_className
protected

◆ a_lastIncomingActivityTime

anna::Millisecond anna::diameter::comm::Session::a_lastIncomingActivityTime
protected

◆ a_lastOutgoingActivityTime

anna::Millisecond anna::diameter::comm::Session::a_lastOutgoingActivityTime
protected

◆ a_nextEndToEnd

EndToEnd anna::diameter::comm::Session::a_nextEndToEnd
protected

◆ a_nextHopByHop

HopByHop anna::diameter::comm::Session::a_nextHopByHop
protected

◆ a_notifyOrphansOnExpiration

bool anna::diameter::comm::Session::a_notifyOrphansOnExpiration
protected

◆ a_onDisconnect

OnDisconnect::_v anna::diameter::comm::Session::a_onDisconnect
protected

◆ a_responses

response_container anna::diameter::comm::Session::a_responses
protected

◆ a_socketId

int anna::diameter::comm::Session::a_socketId
protected

◆ a_state

State::_v anna::diameter::comm::Session::a_state
protected

◆ a_timeController

anna::timex::Engine* anna::diameter::comm::Session::a_timeController
protected

◆ a_timeouts

anna::Millisecond anna::diameter::comm::Session::a_timeouts[ClassCode::Max]
protected

◆ DefaultPort

const int anna::diameter::comm::Session::DefaultPort
static

Default diameter port

◆ DefaultTimeout

const anna::Millisecond anna::diameter::comm::Session::DefaultTimeout
static

Default timeout for application message requests over the session.


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