TcpRequestResponseApp¶
Package: inet.applications.tcpapp
compound module TcpRequestResponseApp
A generic request/response based server application. For each request it receives, it generates a different traffic based on the data the request contains. The client application can be any source that is capable of generating packets with different data. The first byte of the packet data determines the response traffic, which can be configured to produce complex streams of packets with various data and timing distributions.
Inheritance diagram¶
Extends¶
Name |
Type |
Description |
|---|---|---|
compound module |
This is a pre-assembled module type to be used in TcpServerApp. One instance of this module type is launched by TcpServerListener for each incoming connection. It is composed of a traffic source, a traffic sink, a socket I/O and other modules, and most of the module types are parametric. The traffic source and traffic sink modules can be built from queueing model elements. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
numKind |
int |
2 |
Properties¶
Name |
Value |
Description |
|---|---|---|
application |
||
display |
i=block/cogwheel |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
socketIn |
input |
||
socketOut |
output |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
string |
“created %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
“%a-%c” |
See directives in module documentation |
|
string |
“byteCount” |
Determines the chunk of the packet data |
|
string |
“unknown” |
||
int |
|||
int |
-1 |
||
bool |
true |
||
bool |
true |
||
bool |
true |
||
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
|
double |
0s |
Initial duration before which packets are not provided |
|
double |
0s |
Elapsed time between subsequent packets allowed to be pulled by the connected packet collector, 0 means any number of packets can be pulled at the same simulation time |
|
bool |
true |
When a clock is used, relative means that setting the clock will not affect the simulation time of the event |
|
string |
“contains {numTokens} tk\nserved {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
double |
0 |
Initial number of tokens |
|
double |
nan |
Maximum number of tokens |
|
double |
1 |
How many tokens are consumed per processed packet |
|
double |
0 |
How many tokens are consumed per processed bit |
|
source.multiplexer.displayStringTextFormat |
string |
“passed %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
source.multiplexer.forwardServiceRegistration |
bool |
true |
|
source.multiplexer.forwardProtocolRegistration |
bool |
true |
|
source.tokenGenerator.displayStringTextFormat |
string |
“generated {numTokensGenerated} tk\nto {storageModule}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
source.tokenGenerator.storageModule |
string |
“^.” + parent.requestConsumerModule + “.server” |
Module path of the token storage where the tokens are generated via C++ method call |
source.tokenGenerator.subscriptionModule |
string |
“^” |
|
source.tokenGenerator.signals |
string |
“tokensDepleted” |
|
source.tokenGenerator.intSignalValue |
int |
-1 |
|
source.tokenGenerator.doubleSignalValue |
double |
nan |
|
source.tokenGenerator.numTokens |
double |
1 |
Number of tokens generated repeatedly |
string |
“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
int |
-1 |
Maximum number of packets in the queue, no limit by default |
|
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
|
string |
“” |
Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class |
|
string |
“” |
Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class |
|
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
|
string |
“contains {numTokens} tk\nserved {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
double |
1 |
Initial number of tokens |
|
double |
nan |
Maximum number of tokens |
|
double |
1 |
How many tokens are consumed per processed packet |
|
double |
0 |
How many tokens are consumed per processed bit |
|
sink.classifier.displayStringTextFormat |
string |
“classified %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.classifier.reverseOrder |
bool |
false |
|
sink.classifier.classifierClass |
string |
Determines the output queue of packets, the parameter must be the name of a C++ class which implements the IPacketClassifierFunction interface and is registered via Register_Class |
|
sink.tokenGenerator.displayStringTextFormat |
string |
“processed %p pk (%l)\ngenerated %t tk\nto %s” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.tokenGenerator.storageModule |
string |
“^.” + parent.responseProducerModule + “.server[” + string(index) + “]” |
Module path of the token storage where the tokens are generated via C++ method call |
sink.tokenGenerator.numTokensPerPacket |
double |
1 |
Number of tokens per consumed packet |
sink.tokenGenerator.numTokensPerBit |
double |
0 |
Number of tokens per consumed bit |
io.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
io.readSize |
int |
-1B |
Used only with autoRead==false |
io.readDelay |
double |
-1s |
Used only with autoRead==false; delay for issuing a READ command after previous READ was satisfied; -1 means immediately, 0 means zero delay |
Source code¶
//
// A generic request/response based server application. For each
// request it receives, it generates a different traffic based on the data the
// request contains. The client application can be any source that is capable
// of generating packets with different data. The first byte of the packet data
// determines the response traffic, which can be configured to produce complex
// streams of packets with various data and timing distributions.
//
module TcpRequestResponseApp extends TcpServerConnection
{
parameters:
int numKind = default(2);
sink.typename = default("RequestConsumer");
sink.numKind = this.numKind;
sink.responseProducerModule = default("^.source");
sink.classifier.classifierClass = default("inet::queueing::PacketDataClassifier");
source.typename = default("ResponseProducer");
source.numKind = this.numKind;
}
File: src/inet/applications/tcpapp/TcpRequestResponseApp.ned