INET Framework for OMNeT++/OMNEST
inet::TcpEchoAppThread Class Reference

#include <TcpEchoApp.h>

Inheritance diagram for inet::TcpEchoAppThread:
inet::TcpServerThreadBase inet::TcpSocket::ICallback

Public Member Functions

virtual void established () override
 Called when connection is established. More...
 
virtual void dataArrived (Packet *msg, bool urgent) override
 
virtual void timerExpired (cMessage *timer) override
 
virtual void init (TcpServerHostApp *hostmodule, TcpSocket *socket) override
 
- Public Member Functions inherited from inet::TcpServerThreadBase
 TcpServerThreadBase ()
 
virtual ~TcpServerThreadBase ()
 
virtual TcpSocketgetSocket ()
 
virtual TcpServerHostAppgetHostModule ()
 
virtual void peerClosed ()
 
virtual void failure (int code)
 
virtual void statusArrived (TcpStatusInfo *status)
 
- Public Member Functions inherited from inet::TcpSocket::ICallback
virtual ~ICallback ()
 

Protected Attributes

TcpEchoAppechoAppModule = nullptr
 
- Protected Attributes inherited from inet::TcpServerThreadBase
TcpServerHostApphostmod
 
TcpSocketsock
 

Additional Inherited Members

- Protected Member Functions inherited from inet::TcpServerThreadBase
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
 
virtual void refreshDisplay () const override
 

Member Function Documentation

◆ dataArrived()

void inet::TcpEchoAppThread::dataArrived ( Packet msg,
bool  urgent 
)
overridevirtual

Implements inet::TcpServerThreadBase.

81 {
82  echoAppModule->emit(packetReceivedSignal, rcvdPkt);
83  int64_t rcvdBytes = rcvdPkt->getByteLength();
84  echoAppModule->bytesRcvd += rcvdBytes;
85 
87  Packet *outPkt = new Packet(rcvdPkt->getName(), TCP_C_SEND);
88  // reverse direction, modify length, and send it back
89  int socketId = rcvdPkt->getTag<SocketInd>()->getSocketId();
90  outPkt->addTag<SocketReq>()->setSocketId(socketId);
91 
92  long outByteLen = rcvdBytes * echoAppModule->echoFactor;
93 
94  if (outByteLen < 1)
95  outByteLen = 1;
96 
97  int64_t len = 0;
98  for (; len + rcvdBytes <= outByteLen; len += rcvdBytes) {
99  outPkt->insertAtBack(rcvdPkt->peekDataAt(B(0), B(rcvdBytes)));
100  }
101  if (len < outByteLen)
102  outPkt->insertAtBack(rcvdPkt->peekDataAt(B(0), B(outByteLen - len)));
103 
104  ASSERT(outPkt->getByteLength() == outByteLen);
105 
106  if (echoAppModule->delay == 0)
107  echoAppModule->sendDown(outPkt);
108  else
109  scheduleAfter(echoAppModule->delay, outPkt); // send after a delay
110  }
111  delete rcvdPkt;
112 }

◆ established()

void inet::TcpEchoAppThread::established ( )
overridevirtual

Called when connection is established.

Implements inet::TcpServerThreadBase.

77 {
78 }

◆ init()

virtual void inet::TcpEchoAppThread::init ( TcpServerHostApp hostmodule,
TcpSocket socket 
)
inlineoverridevirtual

Reimplemented from inet::TcpServerThreadBase.

66 { TcpServerThreadBase::init(hostmodule, socket); echoAppModule = check_and_cast<TcpEchoApp *>(hostmod); }

◆ timerExpired()

void inet::TcpEchoAppThread::timerExpired ( cMessage *  timer)
overridevirtual

Implements inet::TcpServerThreadBase.

118 {
119  Packet *pkt = check_and_cast<Packet *>(timer);
120  pkt->setContextPointer(nullptr);
121  echoAppModule->sendDown(pkt);
122 }

Member Data Documentation

◆ echoAppModule

TcpEchoApp* inet::TcpEchoAppThread::echoAppModule = nullptr
protected

Referenced by dataArrived(), and timerExpired().


The documentation for this class was generated from the following files:
inet::TcpServerThreadBase::sock
TcpSocket * sock
Definition: TcpServerHostApp.h:70
inet::TcpEchoApp::sendDown
virtual void sendDown(Packet *packet)
Definition: TcpEchoApp.cc:46
inet::TcpServerThreadBase::init
virtual void init(TcpServerHostApp *hostmodule, TcpSocket *socket)
Definition: TcpServerHostApp.h:90
inet::TCP_C_SEND
@ TCP_C_SEND
Definition: TcpCommand_m.h:85
inet::TcpSocket::getState
TcpSocket::State getState() const
Returns the socket state, one of NOT_BOUND, CLOSED, LISTENING, CONNECTING, CONNECTED,...
Definition: TcpSocket.h:218
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
inet::packetReceivedSignal
simsignal_t packetReceivedSignal
Definition: Simsignals.cc:97
inet::TcpSocket::CONNECTED
@ CONNECTED
Definition: TcpSocket.h:153
inet::TcpEchoAppThread::echoAppModule
TcpEchoApp * echoAppModule
Definition: TcpEchoApp.h:48
inet::TcpEchoApp::delay
simtime_t delay
Definition: TcpEchoApp.h:24
inet::TcpEchoApp::bytesRcvd
long bytesRcvd
Definition: TcpEchoApp.h:27
inet::TcpServerThreadBase::hostmod
TcpServerHostApp * hostmod
Definition: TcpServerHostApp.h:69
inet::TcpEchoApp::echoFactor
double echoFactor
Definition: TcpEchoApp.h:25