ANNA Suite  2020b
Multipurpose development suite for Telco applications
Public Member Functions | Protected Member Functions | Friends | List of all members
anna::diameter::comm::Server Class Reference

#include <Server.hpp>

Public Member Functions

 Server (int maxClientSessions=1)
 
virtual ~Server ()
 
void addClientSession (int socketId) noexcept(false)
 
void setClassCodeTimeout (const ClassCode::_v v, const anna::Millisecond &millisecond)
 
bool bind () noexcept(false)
 
void raiseAutoRecovery (bool autoRecovery=true) noexcept(false)
 
bool send (const Message *, int socketId=-1) noexcept(false)
 
bool send (const Message &message, int socketId=-1) noexcept(false)
 
ClientSessiongetLastUsedResource () const
 
bool broadcast (const Message *) noexcept(false)
 
bool broadcast (const Message &message) noexcept(false)
 
void close () noexcept(false)
 
const EntitygetParent () const
 
bool isAvailable () const
 
std::vector< ClientSession * >::iterator begin ()
 
std::vector< ClientSession * >::iterator end ()
 
std::vector< ClientSession * >::const_iterator begin () const
 
std::vector< ClientSession * >::const_iterator end () const
 
int getNumberOfClientSessions () const
 
int getMaxClientSessions () const
 
void setMaxClientSessions (int maxClientSessions)
 
const std::string & getAddress () const
 
int getPort () const
 
std::string socketAsString () const
 
const anna::MillisecondgetLastIncomingActivityTime () const
 
const anna::MillisecondgetLastOutgoingActivityTime () const
 
int getOTARequests () const
 
bool idle () const
 
void hide ()
 
void show ()
 
bool hidden () const
 
bool shown () const
 
std::string asString () const
 
anna::xml::NodeasXML (anna::xml::Node *parent) const
 
void updateProcessingTimeStatisticConcept (const double &value, const anna::diameter::CommandId &cid)
 
void updateReceivedMessageSizeStatisticConcept (const double &value, const anna::diameter::CommandId &cid)
 

Protected Member Functions

virtual void eventPeerShutdown (const ClientSession *)
 
virtual void eventRequestRetransmission (const ClientSession *, Message *request)
 
virtual void eventResponse (const Response &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)
 
virtual void eventRequest (ClientSession *clientSession, const anna::DataBlock &request, const anna::diameter::comm::OriginHost *myNode) noexcept(false)
 
virtual void eventUnknownResponse (ClientSession *clientSession, const anna::DataBlock &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)
 
virtual void eventDPA (ClientSession *clientSession, const anna::DataBlock &response, const anna::diameter::comm::OriginHost *myNode) noexcept(false)
 

Friends

class Engine
 
class ClientSession
 

Detailed Description

Diameter server with 1..N connections.

Constructor & Destructor Documentation

◆ Server()

anna::diameter::comm::Server::Server ( int  maxClientSessions = 1)
inline

Default constructor.

Parameters
maxClientSessionsMaximum number of client-sessions managed by the server. Default is 1 (monoconnection server). The value -1, means no limit to add client-sessions.
103 : a_maxClientSessions(maxClientSessions) { initialize(); }

◆ ~Server()

virtual anna::diameter::comm::Server::~Server ( )
inlinevirtual

Destructor

106 {;}

Member Function Documentation

◆ addClientSession()

void anna::diameter::comm::Server::addClientSession ( int  socketId)
noexcept

Add a server to the entity and create all the client-sessions configured at #setSocketsPerDiameterServer within that server.

Parameters
socketIdDiameter socket identifier within the server.

◆ asString()

std::string anna::diameter::comm::Server::asString ( ) const

Class string representation

Returns
String with relevant information for this instance.

◆ asXML()

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

Class xml representation

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

◆ begin() [1/2]

std::vector<ClientSession*>::iterator anna::diameter::comm::Server::begin ( )
inline
181 { return a_clientSessions.begin(); }

◆ begin() [2/2]

std::vector<ClientSession*>::const_iterator anna::diameter::comm::Server::begin ( ) const
inline
183 { return a_clientSessions.begin(); }

◆ bind()

bool anna::diameter::comm::Server::bind ( )
noexcept

Binds server client-sessions.

Returns
Returns true if all client-session were successfully bound

◆ broadcast() [1/2]

bool anna::diameter::comm::Server::broadcast ( const Message )
noexcept

Sent a message to all the server client-sessions (socketId's) for multiple client client-sessions functionality. It is used, i.e., in Disconnect-Peer-Request procedure over a certain server. Returns true (success) only when broadcast is success over all the server client-sessions. If any client-session fails, then false is returned. Broadcast try to send all over the resources in spite of any fail.

◆ broadcast() [2/2]

bool anna::diameter::comm::Server::broadcast ( const Message message)
inlinenoexcept
159 { return broadcast(&message); }
bool broadcast(const Message *) noexcept(false)
Here is the call graph for this function:

◆ close()

void anna::diameter::comm::Server::close ( )
inlinenoexcept

Close all the server client-sessions. Depending on client-session configuration ('OnDisconnect' behaviour), pending answers will be wait (graceful) or ignored (immediate-abrupt close). Resources are not destroyed.

166 { close(false /* no destroy */); }
void close() noexcept(false)
Definition: Server.hpp:166
Here is the call graph for this function:

◆ end() [1/2]

std::vector<ClientSession*>::iterator anna::diameter::comm::Server::end ( )
inline
182 { return a_clientSessions.end(); }

◆ end() [2/2]

std::vector<ClientSession*>::const_iterator anna::diameter::comm::Server::end ( ) const
inline
184 { return a_clientSessions.end(); }

◆ eventDPA()

virtual void anna::diameter::comm::Server::eventDPA ( ClientSession clientSession,
const anna::DataBlock response,
const anna::diameter::comm::OriginHost myNode 
)
protectedvirtualnoexcept

Handler for diameter server (client-session) Disconnect-Peer-Answer messages

Parameters
clientSessionClientSession from which request has been received
responseAnswer data block object without context match

◆ eventPeerShutdown()

virtual void anna::diameter::comm::Server::eventPeerShutdown ( const ClientSession )
protectedvirtual

Handler about event break connection from diameter server (client-session) over this entity.

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

◆ eventRequest()

virtual void anna::diameter::comm::Server::eventRequest ( ClientSession clientSession,
const anna::DataBlock request,
const anna::diameter::comm::OriginHost myNode 
)
protectedvirtualnoexcept

Handler for diameter server (client-session) requests

Parameters
clientSessionClientSession from which request has been received
requestDiameter request message received

◆ eventRequestRetransmission()

virtual void anna::diameter::comm::Server::eventRequestRetransmission ( const ClientSession ,
Message request 
)
protectedvirtual

Handler about a request retransmission over the session.

Parameters
requestMessage retransmitted

◆ eventResponse()

virtual void anna::diameter::comm::Server::eventResponse ( const Response response,
const anna::diameter::comm::OriginHost myNode 
)
protectedvirtualnoexcept

Handler for diameter server (client-session) responses

Parameters
responseAnswer container object for corresponding diameter request

◆ eventUnknownResponse()

virtual void anna::diameter::comm::Server::eventUnknownResponse ( ClientSession clientSession,
const anna::DataBlock response,
const anna::diameter::comm::OriginHost myNode 
)
protectedvirtualnoexcept

Handler for diameter server (client-session) responses out of context

Parameters
clientSessionClientSession from which request has been received
responseAnswer data block object without context match

◆ getAddress()

const std::string& anna::diameter::comm::Server::getAddress ( ) const
inline

Diameter server address (IP or hostname)

Returns
Diameter server address.
194 { return a_socket.first; }

◆ getLastIncomingActivityTime()

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

Gets the timestamp for last incoming activity over the server.

Returns
Last incoming activity timestamp.
212 { return a_lastIncomingActivityTime; }

◆ getLastOutgoingActivityTime()

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

Gets the timestamp for last outgoing activity over the server.

Returns
Last outgoing activity timestamp.
219 { return a_lastOutgoingActivityTime; }

◆ getLastUsedResource()

ClientSession* anna::diameter::comm::Server::getLastUsedResource ( ) const
inline

Gets the last used resource (client session) during sending. Broadcast doesn't updates this information.

150 { return (a_lastUsedResource); }

◆ getMaxClientSessions()

int anna::diameter::comm::Server::getMaxClientSessions ( ) const
inline
187 { return a_maxClientSessions; }

◆ getNumberOfClientSessions()

int anna::diameter::comm::Server::getNumberOfClientSessions ( ) const
inline
186 { return a_clientSessions.size(); }

◆ getOTARequests()

int anna::diameter::comm::Server::getOTARequests ( ) const

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

Returns
OTA messages.

◆ getParent()

const Entity* anna::diameter::comm::Server::getParent ( ) const
inline

Diameter parent entity.

Returns
Diameter parent entity.
173 { return a_parent; }

◆ getPort()

int anna::diameter::comm::Server::getPort ( ) const
inline

Diameter server port.

Returns
Diameter server port.
200 { return a_socket.second; }

◆ hidden()

bool anna::diameter::comm::Server::hidden ( ) const

Returns true when all its client session resources are hidden for application messages delivery

◆ hide()

void anna::diameter::comm::Server::hide ( )

Deny resources for delivery restriction. Deny all its client sessions

◆ idle()

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

Returns idle state (no pending answers).

Returns
Idle state.
234 { return (getOTARequests() == 0); }

◆ isAvailable()

bool anna::diameter::comm::Server::isAvailable ( ) const
inline

Returns true when any of the server client-sessions is Bound. False when all not-bound.

178 { return a_available; }

◆ raiseAutoRecovery()

void anna::diameter::comm::Server::raiseAutoRecovery ( bool  autoRecovery = true)
noexcept

Propagate auto recovery configuration to client-sessions within server

Parameters
autoRecoveryAuto recovery indicator. True by default.

◆ send() [1/2]

bool anna::diameter::comm::Server::send ( const Message ,
int  socketId = -1 
)
noexcept

◆ send() [2/2]

bool anna::diameter::comm::Server::send ( const Message message,
int  socketId = -1 
)
inlinenoexcept
144 { return send(&message, socketId); }
bool send(const Message *, int socketId=-1) noexcept(false)
Here is the call graph for this function:

◆ setClassCodeTimeout()

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

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.

◆ setMaxClientSessions()

void anna::diameter::comm::Server::setMaxClientSessions ( int  maxClientSessions)
inline
188 { a_maxClientSessions = maxClientSessions; }

◆ show()

void anna::diameter::comm::Server::show ( )

Allow resource for delivery permission. Allow all its client sessions

◆ shown()

bool anna::diameter::comm::Server::shown ( ) const

Returns true when all its client session resources are shown for application messages delivery

◆ socketAsString()

std::string anna::diameter::comm::Server::socketAsString ( ) const

Server presentation as 'ADDRESS:PORT'

◆ updateProcessingTimeStatisticConcept()

void anna::diameter::comm::Server::updateProcessingTimeStatisticConcept ( const double &  value,
const anna::diameter::CommandId cid 
)

◆ updateReceivedMessageSizeStatisticConcept()

void anna::diameter::comm::Server::updateReceivedMessageSizeStatisticConcept ( const double &  value,
const anna::diameter::CommandId cid 
)

Friends And Related Function Documentation

◆ ClientSession

friend class ClientSession
friend

◆ Engine

friend class Engine
friend

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