INET Framework for OMNeT++/OMNEST
inet::TcpAppBase Class Referenceabstract

Base class for clients app for TCP-based request-reply protocols or apps. More...

#include <TcpAppBase.h>

Inheritance diagram for inet::TcpAppBase:
inet::ApplicationBase inet::TcpSocket::ICallback inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle inet::TcpBasicClientApp inet::TcpSessionApp inet::TelnetApp

Protected Member Functions

virtual void initialize (int stage) override
 
virtual int numInitStages () const override
 
virtual void handleMessageWhenUp (cMessage *msg) override
 
virtual void finish () override
 
virtual void refreshDisplay () const override
 
virtual void connect ()
 
virtual void close ()
 
virtual void sendPacket (Packet *pkt)
 
virtual void handleTimer (cMessage *msg)=0
 
virtual void socketDataArrived (TcpSocket *socket, Packet *msg, bool urgent) override
 Notifies about data arrival, packet ownership is transferred to the callee. More...
 
virtual void socketAvailable (TcpSocket *socket, TcpAvailableInfo *availableInfo) override
 
virtual void socketEstablished (TcpSocket *socket) override
 
virtual void socketPeerClosed (TcpSocket *socket) override
 
virtual void socketClosed (TcpSocket *socket) override
 
virtual void socketFailure (TcpSocket *socket, int code) override
 
virtual void socketStatusArrived (TcpSocket *socket, TcpStatusInfo *status) override
 
virtual void socketDeleted (TcpSocket *socket) override
 
- Protected Member Functions inherited from inet::ApplicationBase
virtual bool isInitializeStage (int stage) const override
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
- Protected Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
virtual bool handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual void handleStartOperation (LifecycleOperation *operation)=0
 
virtual void handleStopOperation (LifecycleOperation *operation)=0
 
virtual void handleCrashOperation (LifecycleOperation *operation)=0
 
virtual State getInitialOperationalState () const
 Returns initial operational state: OPERATING or NOT_OPERATING. More...
 
virtual void handleActiveOperationTimeout (cMessage *message)
 
virtual bool isUp () const
 utility functions More...
 
virtual bool isDown () const
 
virtual void setOperationalState (State newState)
 
virtual void scheduleOperationTimeout (simtime_t timeout)
 
virtual void setupActiveOperation (LifecycleOperation *operation, IDoneCallback *doneCallback, State)
 
virtual void delayActiveOperationFinish (simtime_t timeout)
 
virtual void startActiveOperationExtraTime (simtime_t delay=SIMTIME_ZERO)
 
virtual void startActiveOperationExtraTimeOrFinish (simtime_t extraTime)
 
virtual void finishActiveOperation ()
 

Protected Attributes

TcpSocket socket
 
int numSessions
 
int numBroken
 
int packetsSent
 
int packetsRcvd
 
int bytesSent
 
int bytesRcvd
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Static Protected Attributes

static simsignal_t connectSignal = registerSignal("connect")
 

Additional Inherited Members

- Public Member Functions inherited from inet::ApplicationBase
 ApplicationBase ()
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 
- Public Member Functions inherited from inet::TcpSocket::ICallback
virtual ~ICallback ()
 
- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Detailed Description

Base class for clients app for TCP-based request-reply protocols or apps.

Handles a single session (and TCP connection) at a time.

It needs the following NED parameters: localAddress, localPort, connectAddress, connectPort.

Member Function Documentation

◆ close()

void inet::TcpAppBase::close ( )
protectedvirtual

◆ connect()

void inet::TcpAppBase::connect ( )
protectedvirtual
51 {
52  // we need a new connId if this is not the first connection
54 
55  const char *localAddress = par("localAddress");
56  int localPort = par("localPort");
57  socket.bind(*localAddress ? L3AddressResolver().resolve(localAddress) : L3Address(), localPort);
58 
59  int timeToLive = par("timeToLive");
60  if (timeToLive != -1)
61  socket.setTimeToLive(timeToLive);
62 
63  int dscp = par("dscp");
64  if (dscp != -1)
65  socket.setDscp(dscp);
66 
67  int tos = par("tos");
68  if (tos != -1)
69  socket.setTos(tos);
70 
71  // connect
72  const char *connectAddress = par("connectAddress");
73  int connectPort = par("connectPort");
74 
75  L3Address destination;
76  L3AddressResolver().tryResolve(connectAddress, destination);
77  if (destination.isUnspecified()) {
78  EV_ERROR << "Connecting to " << connectAddress << " port=" << connectPort << ": cannot resolve destination address\n";
79  }
80  else {
81  EV_INFO << "Connecting to " << connectAddress << "(" << destination << ") port=" << connectPort << endl;
82 
83  socket.connect(destination, connectPort);
84 
85  numSessions++;
86  emit(connectSignal, 1L);
87  }
88 }

Referenced by inet::TelnetApp::handleTimer(), inet::TcpBasicClientApp::handleTimer(), and inet::TcpSessionApp::handleTimer().

◆ finish()

void inet::TcpAppBase::finish ( )
overrideprotectedvirtual

Reimplemented in inet::TcpSessionApp.

152 {
153  std::string modulePath = getFullPath();
154 
155  EV_INFO << modulePath << ": opened " << numSessions << " sessions\n";
156  EV_INFO << modulePath << ": sent " << bytesSent << " bytes in " << packetsSent << " packets\n";
157  EV_INFO << modulePath << ": received " << bytesRcvd << " bytes in " << packetsRcvd << " packets\n";
158 }

◆ handleMessageWhenUp()

void inet::TcpAppBase::handleMessageWhenUp ( cMessage *  msg)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

43 {
44  if (msg->isSelfMessage())
45  handleTimer(msg);
46  else
48 }

◆ handleTimer()

virtual void inet::TcpAppBase::handleTimer ( cMessage *  msg)
protectedpure virtual

◆ initialize()

void inet::TcpAppBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::OperationalMixin< cSimpleModule >.

Reimplemented in inet::TcpSessionApp, inet::TcpBasicClientApp, and inet::TelnetApp.

18 {
20 
21  if (stage == INITSTAGE_LOCAL) {
23 
24  WATCH(numSessions);
25  WATCH(numBroken);
26  WATCH(packetsSent);
27  WATCH(packetsRcvd);
28  WATCH(bytesSent);
29  WATCH(bytesRcvd);
30  }
31  else if (stage == INITSTAGE_APPLICATION_LAYER) {
32  // parameters
33  const char *localAddress = par("localAddress");
34  int localPort = par("localPort");
35  socket.bind(*localAddress ? L3AddressResolver().resolve(localAddress) : L3Address(), localPort);
36 
37  socket.setCallback(this);
38  socket.setOutputGate(gate("socketOut"));
39  }
40 }

Referenced by inet::TelnetApp::initialize(), inet::TcpBasicClientApp::initialize(), and inet::TcpSessionApp::initialize().

◆ numInitStages()

virtual int inet::TcpAppBase::numInitStages ( ) const
inlineoverrideprotectedvirtual

◆ refreshDisplay()

void inet::TcpAppBase::refreshDisplay ( ) const
overrideprotectedvirtual

Reimplemented in inet::TcpSessionApp.

108 {
110  getDisplayString().setTagArg("t", 0, TcpSocket::stateName(socket.getState()));
111 }

Referenced by inet::TcpSessionApp::refreshDisplay().

◆ sendPacket()

void inet::TcpAppBase::sendPacket ( Packet pkt)
protectedvirtual
98 {
99  int numBytes = msg->getByteLength();
100  emit(packetSentSignal, msg);
101  socket.send(msg);
102 
103  packetsSent++;
104  bytesSent += numBytes;
105 }

Referenced by inet::TcpSessionApp::sendData(), inet::TelnetApp::sendGenericAppMsg(), and inet::TcpBasicClientApp::sendRequest().

◆ socketAvailable()

virtual void inet::TcpAppBase::socketAvailable ( TcpSocket socket,
TcpAvailableInfo availableInfo 
)
inlineoverrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

54 { socket->accept(availableInfo->getNewSocketId()); }

◆ socketClosed()

void inet::TcpAppBase::socketClosed ( TcpSocket socket)
overrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

Reimplemented in inet::TcpSessionApp, inet::TcpBasicClientApp, and inet::TelnetApp.

139 {
140  // *redefine* to start another session etc.
141  EV_INFO << "connection closed\n";
142 }

Referenced by inet::TelnetApp::socketClosed(), inet::TcpBasicClientApp::socketClosed(), and inet::TcpSessionApp::socketClosed().

◆ socketDataArrived()

void inet::TcpAppBase::socketDataArrived ( TcpSocket socket,
Packet packet,
bool  urgent 
)
overrideprotectedvirtual

Notifies about data arrival, packet ownership is transferred to the callee.

Implements inet::TcpSocket::ICallback.

Reimplemented in inet::TcpSessionApp, inet::TcpBasicClientApp, and inet::TelnetApp.

120 {
121  // *redefine* to perform or schedule next sending
122  packetsRcvd++;
123  bytesRcvd += msg->getByteLength();
124  emit(packetReceivedSignal, msg);
125  delete msg;
126 }

Referenced by inet::TelnetApp::socketDataArrived(), inet::TcpBasicClientApp::socketDataArrived(), and inet::TcpSessionApp::socketDataArrived().

◆ socketDeleted()

virtual void inet::TcpAppBase::socketDeleted ( TcpSocket socket)
inlineoverrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

60 {}

◆ socketEstablished()

void inet::TcpAppBase::socketEstablished ( TcpSocket socket)
overrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

Reimplemented in inet::TcpSessionApp, inet::TcpBasicClientApp, and inet::TelnetApp.

114 {
115  // *redefine* to perform or schedule first sending
116  EV_INFO << "connected\n";
117 }

Referenced by inet::TelnetApp::socketEstablished(), inet::TcpBasicClientApp::socketEstablished(), and inet::TcpSessionApp::socketEstablished().

◆ socketFailure()

void inet::TcpAppBase::socketFailure ( TcpSocket socket,
int  code 
)
overrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

Reimplemented in inet::TcpSessionApp, inet::TcpBasicClientApp, and inet::TelnetApp.

145 {
146  // subclasses may override this function, and add code try to reconnect after a delay.
147  EV_WARN << "connection broken\n";
148  numBroken++;
149 }

Referenced by inet::TelnetApp::socketFailure(), inet::TcpBasicClientApp::socketFailure(), and inet::TcpSessionApp::socketFailure().

◆ socketPeerClosed()

void inet::TcpAppBase::socketPeerClosed ( TcpSocket socket)
overrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

129 {
130  ASSERT(socket_ == &socket);
131  // close the connection (if not already closed)
133  EV_INFO << "remote TCP closed, closing here as well\n";
134  close();
135  }
136 }

◆ socketStatusArrived()

virtual void inet::TcpAppBase::socketStatusArrived ( TcpSocket socket,
TcpStatusInfo status 
)
inlineoverrideprotectedvirtual

Implements inet::TcpSocket::ICallback.

59 {}

Member Data Documentation

◆ bytesRcvd

int inet::TcpAppBase::bytesRcvd
protected

◆ bytesSent

◆ connectSignal

simsignal_t inet::TcpAppBase::connectSignal = registerSignal("connect")
staticprotected

Referenced by close(), and connect().

◆ numBroken

int inet::TcpAppBase::numBroken
protected

Referenced by initialize(), and socketFailure().

◆ numSessions

int inet::TcpAppBase::numSessions
protected

Referenced by connect(), finish(), and initialize().

◆ packetsRcvd

int inet::TcpAppBase::packetsRcvd
protected

◆ packetsSent

int inet::TcpAppBase::packetsSent
protected

Referenced by finish(), initialize(), and sendPacket().

◆ socket


The documentation for this class was generated from the following files:
inet::TcpSocket::send
virtual void send(Packet *msg) override
Sends data packet.
Definition: TcpSocket.cc:147
inet::TcpAppBase::connectSignal
static simsignal_t connectSignal
Definition: TcpAppBase.h:36
inet::TcpAppBase::packetsSent
int packetsSent
Definition: TcpAppBase.h:30
inet::TcpSocket::setCallback
void setCallback(ICallback *cb)
Sets a callback object, to be used with processMessage().
Definition: TcpSocket.cc:276
inet::TcpSocket::stateName
static const char * stateName(TcpSocket::State state)
Returns name of socket state code returned by getState().
Definition: TcpSocket.cc:372
inet::TcpAppBase::handleTimer
virtual void handleTimer(cMessage *msg)=0
inet::OperationalMixin< cSimpleModule >::initialize
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
inet::TcpSocket::connect
void connect(L3Address remoteAddr, int remotePort)
Active OPEN to the given remote socket.
Definition: TcpSocket.cc:122
inet::TcpSocket::accept
void accept(int socketId)
Accepts a new incoming connection reported as available.
Definition: TcpSocket.cc:114
inet::packetSentSignal
simsignal_t packetSentSignal
Definition: Simsignals.cc:96
inet::TcpSocket::setTos
void setTos(short tos)
Sets the Ipv4 Type of Service / Ipv6 Traffic Class fields of packets sent from the TCP socket.
Definition: TcpSocket.cc:225
inet::TcpSocket::getState
TcpSocket::State getState() const
Returns the socket state, one of NOT_BOUND, CLOSED, LISTENING, CONNECTING, CONNECTED,...
Definition: TcpSocket.h:218
inet::packetReceivedSignal
simsignal_t packetReceivedSignal
Definition: Simsignals.cc:97
inet::TcpAppBase::bytesSent
int bytesSent
Definition: TcpAppBase.h:32
inet::TcpAppBase::socket
TcpSocket socket
Definition: TcpAppBase.h:25
inet::TcpAppBase::numBroken
int numBroken
Definition: TcpAppBase.h:29
inet::TcpAppBase::numSessions
int numSessions
Definition: TcpAppBase.h:28
inet::TcpSocket::setDscp
void setDscp(short dscp)
Sets the Ipv4 / Ipv6 dscp fields of packets sent from the TCP socket.
Definition: TcpSocket.cc:216
inet::TcpSocket::processMessage
void processMessage(cMessage *msg) override
Examines the message (which should have arrived from TCP), updates socket state, and if there is a ca...
Definition: TcpSocket.cc:281
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::INITSTAGE_APPLICATION_LAYER
INET_API InitStage INITSTAGE_APPLICATION_LAYER
Initialization of applications.
inet::TcpSocket::PEER_CLOSED
@ PEER_CLOSED
Definition: TcpSocket.h:153
inet::TcpAppBase::bytesRcvd
int bytesRcvd
Definition: TcpAppBase.h:33
inet::TcpSocket::bind
void bind(int localPort)
Bind the socket to a local port number.
Definition: TcpSocket.cc:69
inet::TcpSocket::setTimeToLive
void setTimeToLive(int ttl)
Set the TTL (Ipv6: Hop Limit) field on sent packets.
Definition: TcpSocket.cc:207
inet::TcpSocket::setOutputGate
void setOutputGate(cGate *toTcp)
Sets the gate on which to send to TCP.
Definition: TcpSocket.h:242
inet::TcpSocket::close
void close() override
Closes the local end of the connection.
Definition: TcpSocket.cc:161
inet::OperationalMixin< cSimpleModule >::refreshDisplay
virtual void refreshDisplay() const override
Definition: OperationalMixinImpl.h:200
inet::TcpAppBase::close
virtual void close()
Definition: TcpAppBase.cc:90
inet::TcpSocket::renewSocket
void renewSocket()
Required to re-connect with a "used" TcpSocket object.
Definition: TcpSocket.cc:249
inet::TcpAppBase::packetsRcvd
int packetsRcvd
Definition: TcpAppBase.h:31