OverSim
|
Base class for applications. More...
#include <BaseApp.h>
Public Member Functions | |
BaseApp () | |
virtual | ~BaseApp () |
virtual destructor | |
Public Member Functions inherited from BaseRpc | |
BaseRpc () | |
const NodeHandle & | getThisNode () |
Returns the NodeHandle of this node. | |
simtime_t | getUdpTimeout () |
Public Member Functions inherited from RpcListener | |
virtual | ~RpcListener () |
destructor | |
Public Member Functions inherited from BaseTcpSupport | |
virtual void | socketDataArrived (int connId, void *yourPtr, cPacket *msg, bool urgent) |
virtual void | socketEstablished (int connId, void *yourPtr) |
virtual void | socketPeerClosed (int connId, void *yourPtr) |
virtual void | socketFailure (int connId, void *yourPtr, int code) |
virtual void | socketStatusArrived (int connId, void *yourPtr, TCPStatusInfo *status) |
Protected Member Functions | |
int | numInitStages () const |
method to set InitStage | |
void | initialize (int stage) |
initializes base class-attributes | |
virtual void | initializeApp (int stage) |
initializes derived class-attributes | |
void | handleMessage (cMessage *msg) |
checks for message type and calls corresponding method | |
virtual void | receiveChangeNotification (int category, const cPolymorphic *details) |
callback-method for events at the NotificationBoard | |
virtual void | handleTransportAddressChangedNotification () |
This method gets call if the node has a new TransportAddress (IP address) because he changed his access network. | |
virtual void | handleNodeLeaveNotification () |
This method gets call **.gracefulLeaveDelay seconds before it is killed. | |
virtual void | handleNodeGracefulLeaveNotification () |
This method gets call **.gracefulLeaveDelay seconds before it is killed if this node is among the gracefulLeaveProbability nodes. | |
void | finish () |
collects statistical data | |
virtual void | finishApp () |
collects statistical data of derived app | |
void | callRoute (const OverlayKey &key, cPacket *msg, const TransportAddress &hint=TransportAddress::UNSPECIFIED_NODE, RoutingType routingType=DEFAULT_ROUTING) |
Common API function: calls route-method in overlay. | |
void | callRoute (const OverlayKey &key, cPacket *msg, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType=DEFAULT_ROUTING) |
virtual void | deliver (OverlayKey &key, cMessage *msg) |
Common API function: handles delivered messages from overlay. | |
virtual void | forward (OverlayKey *key, cPacket **msg, NodeHandle *nextHopNode) |
Common API function: handles messages from overlay to be forwarded. | |
virtual void | update (const NodeHandle &node, bool joined) |
Common API function: informs application about neighbors and own nodeID. | |
NodeVector * | callLocalLookup (const OverlayKey &key, int num, bool safe) |
Common API function: produces a list of nodes that can be used as next hops towards key. | |
NodeVector * | callNeighborSet (int num) |
Common API function: produces a list of neighbor nodes. | |
bool | isSiblingFor (const NodeHandle &node, const OverlayKey &key, int numSiblings, bool *err) |
Query if a node is among the siblings for a given key. | |
virtual void | handleLowerMessage (cMessage *msg) |
processes self-messages | |
virtual void | handleUpperMessage (cMessage *msg) |
handleUpperMessage gets called of handleMessage(cMessage* msg) if msg arrivedOn from_upperTier (currently msg gets deleted in this function) | |
virtual void | handleUDPMessage (cMessage *msg) |
method to handle messages that come directly from the UDP gate | |
virtual void | handleReadyMessage (CompReadyMessage *msg) |
method to handle ready messages from the overlay | |
virtual void | bindToPort (int port) |
Tells UDP we want to get all packets arriving on the given port. | |
virtual void | sendMessageToUDP (const TransportAddress &destAddr, cPacket *msg, simtime_t delay=SIMTIME_ZERO) |
Sends a packet over UDP. | |
virtual void | handleTraceMessage (cMessage *msg) |
handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in. | |
void | sendMessageToLowerTier (cPacket *msg) |
sends non-commonAPI message to the lower tier | |
bool | internalHandleRpcCall (BaseCallMessage *msg) |
Handles internal rpc requests. | |
void | internalHandleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt) |
Handles rpc responses internal in base classes | |
void | internalSendRouteRpc (BaseRpcMessage *message, const OverlayKey &destKey, const std::vector< TransportAddress > &sourceRoute, RoutingType routingType) |
virtual CompType | getThisCompType () |
Return the component type of this module. | |
void | sendReadyMessage (bool ready=true, const OverlayKey &nodeId=OverlayKey::UNSPECIFIED_KEY) |
Protected Member Functions inherited from BaseRpc | |
virtual void | internalHandleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey) |
Handles rpc timeouts internal in base classes | |
void | initRpcs () |
Initializes Remote-Procedure state. | |
void | finishRpcs () |
Deinitializes Remote-Procedure state. | |
virtual void | internalHandleRpcMessage (BaseRpcMessage *msg) |
Handles incoming rpc messages and delegates them to the corresponding listeners or handlers. | |
uint32_t | sendRouteRpcCall (CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL) |
Routes a Remote-Procedure-Call message to an OverlayKey. | |
uint32_t | sendRouteRpcCall (CompType destComp, const OverlayKey &destKey, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL) |
Routes a Remote-Procedure-Call message to an OverlayKey. | |
uint32_t | sendRouteRpcCall (CompType destComp, const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, RoutingType routingType=DEFAULT_ROUTING, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL) |
Sends a Remote-Procedure-Call message using the overlay's UDP port This replaces ROUTE_DIRECT calls! | |
uint32_t | sendUdpRpcCall (const TransportAddress &dest, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL) |
Sends a Remote-Procedure-Call message to the underlay | |
uint32_t | sendInternalRpcCall (CompType destComp, BaseCallMessage *msg, cPolymorphic *context=NULL, simtime_t timeout=-1, int retries=0, int rpcId=-1, RpcListener *rpcListener=NULL) |
Sends an internal Remote-Procedure-Call between two tiers | |
void | cancelRpcMessage (uint32_t nonce) |
Cancels a Remote-Procedure-Call. | |
void | cancelAllRpcs () |
Cancels all RPCs. | |
void | sendRpcResponse (TransportType transportType, CompType destComp, const TransportAddress &dest, const OverlayKey &destKey, BaseCallMessage *call, BaseResponseMessage *response) |
Send Remote-Procedure response message and deletes call message. | |
void | sendRpcResponse (BaseCallMessage *call, BaseResponseMessage *response) |
Send Remote-Procedure response message to UDP and deletes call message. | |
int | pingNode (const TransportAddress &dest, simtime_t timeout=-1, int retries=0, cPolymorphic *context=NULL, const char *caption="PING", RpcListener *rpcListener=NULL, int rpcId=-1, TransportType transportType=INVALID_TRANSPORT) |
ping a node by its TransportAddress | |
virtual bool | handleRpcCall (BaseCallMessage *msg) |
Processes Remote-Procedure-Call invocation messages. | |
virtual void | pingResponse (PingResponse *pingResponse, cPolymorphic *context, int rpcId, simtime_t rtt) |
virtual void | pingTimeout (PingCall *pingCall, const TransportAddress &dest, cPolymorphic *context, int rpcId) |
bool | internalHandleMessage (cMessage *msg) |
Protected Member Functions inherited from RpcListener | |
virtual void | handleRpcResponse (BaseResponseMessage *msg, cPolymorphic *context, int rpcId, simtime_t rtt) |
This method is called if an RPC response has been received. | |
virtual void | handleRpcResponse (BaseResponseMessage *msg, const RpcState &rpcState, simtime_t rtt) |
This method is called if an RPC response has been received. | |
virtual void | handleRpcTimeout (BaseCallMessage *msg, const TransportAddress &dest, cPolymorphic *context, int rpcId, const OverlayKey &destKey) |
This method is called if an RPC timeout has been reached. | |
virtual void | handleRpcTimeout (const RpcState &rpcState) |
This method is called if an RPC timeout has been reached. | |
Protected Member Functions inherited from BaseTcpSupport | |
void | handleTCPMessage (cMessage *msg) |
Member function to handle incoming TCP messages. | |
void | bindAndListenTcp (int port) |
Member function to bind service to the specified port and listen afterwards. | |
bool | isAlreadyConnected (TransportAddress address) |
Member function to check if the service is already connected. | |
void | establishTcpConnection (TransportAddress address) |
Member function to establish a connection to the specified node. | |
void | sendTcpData (cPacket *msg, TransportAddress address) |
Member function to send TCP data to the specified node. | |
virtual void | handleConnectionEvent (EvCode code, TransportAddress address) |
Member function to handle passive connection events. | |
virtual void | handleDataReceived (TransportAddress address, cPacket *msg, bool urgent) |
Member function to handle incoming data. | |
virtual void | handleIncomingConnection (TransportAddress address) |
Member function to handle newly opened connections. | |
void | closeTcpConnection (TransportAddress address) |
Member function to close an established connection. | |
void | setTcpOut (cGate *gate) |
Member function to set local gate towards the TCP module during init phase. | |
cGate * | getTcpOut () |
Member function to get local gate towards the TCP module. |
Protected Attributes | |
UnderlayConfigurator * | underlayConfigurator |
pointer to UnderlayConfigurator in this node | |
GlobalNodeList * | globalNodeList |
pointer to GlobalNodeList in this node | |
GlobalStatistics * | globalStatistics |
pointer to GlobalStatistics module in this node | |
NotificationBoard * | notificationBoard |
pointer to NotificationBoard in this node | |
bool | debugOutput |
debug output yes/no? | |
int | numOverlaySent |
number of sent packets to overlay | |
int | bytesOverlaySent |
number of sent bytes to overlay | |
int | numOverlayReceived |
number of received packets from overlay | |
int | bytesOverlayReceived |
number of received bytes from overlay | |
int | numUdpSent |
number of sent packets to UDP | |
int | bytesUdpSent |
number of sent bytes to UDP | |
int | numUdpReceived |
number of received packets from UDP | |
int | bytesUdpReceived |
number of received bytes from UDP | |
simtime_t | creationTime |
simTime when the App has been created | |
Protected Attributes inherited from BaseRpc | |
NodeHandle | thisNode |
NodeHandle to this node. | |
BaseOverlay * | overlay |
bool | debugOutput |
debug output ? | |
GlobalStatistics * | globalStatistics |
pointer to GlobalStatistics module in this node | |
CompType | thisCompType |
NeighborCache * | neighborCache |
pointer to the neighbor cache | |
CryptoModule * | cryptoModule |
pointer to CryptoModule | |
int | numPingSent |
int | bytesPingSent |
int | numPingResponseSent |
int | bytesPingResponseSent |
Private Member Functions | |
void | forwardResponse (const OverlayKey &key, cPacket *msg, const NodeHandle &nextHopNode) |
sends msg encapsulated in a KBRforward message to the overlay with destination key | |
void | handleCommonAPIMessage (CommonAPIMessage *commonAPIMsg) |
handles CommonAPIMessages | |
void | internalSendRpcResponse (BaseCallMessage *call, BaseResponseMessage *response) |
Additional Inherited Members | |
Public Types inherited from BaseTcpSupport | |
enum | EvCode { NO_EST_CONNECTION, PEER_CLOSED, PEER_TIMEDOUT, PEER_REFUSED, CONNECTION_RESET, CONNECTION_SUCC_ClOSED } |
Base class for applications.
Base class for applications (Tier 1-3) that use overlay functionality. provides common API for structured overlays (KBR), RPC and UDP
BaseApp provides the following API calls for derived classes:
Method name | Call direction | available on Tier | implemented as |
---|---|---|---|
Modified CommonAPI for structured P2P overlays: | |||
callRoute() | CALL | 1 | OMNeT++ messages |
deliver() | CALLBACK | 1 | OMNeT++ messages |
forward() | CALLBACK | 1 | OMNeT++ messages |
update() | CALLBACK | 1 | OMNeT++ messages |
callLocalLookup() | CALL | 1-3 | direct C++-method calls |
callNeighborSet() | CALL | 1-3 | direct C++-method calls |
isSiblingFor() | CALL | 1-3 | direct C++-method calls |
Remote Procedure Call API (RPC): | |||
sendUdpRpcCall() | CALL | 1-3* | OMNeT++ messages |
sendRouteRpcCall() | CALL | 1-3* | OMNeT++ messages |
sendInternalRpcCall() | CALL | 1-3* | OMNeT++ messages |
UDP API: | |||
handleUDPMessage() | CALLBACK | 1-3 | OMNeT++ messages |
sendMessageToUDP() | CALL | 1-3 | OMNeT++ messages |
bindToPort() | CALL | 1-3 | OMNeT++ messages |
Callback functions have to be implemented in derived classes!
BaseApp::BaseApp | ( | ) |
Definition at line 41 of file BaseApp.cc.
|
virtual |
|
protectedvirtual |
Tells UDP we want to get all packets arriving on the given port.
Definition at line 511 of file BaseApp.cc.
Referenced by MyApplication::initializeApp(), and KBRTestApp::initializeApp().
|
inlineprotected |
Common API function: produces a list of nodes that can be used as next hops towards key.
key | the destination key |
num | maximal number of nodes in answer |
safe | fraction of faulty nodes is not higher than in the overlay? |
|
inlineprotected |
Common API function: produces a list of neighbor nodes.
num | maximal number of nodes in answer |
|
inlineprotected |
Common API function: calls route-method in overlay.
encapsulates msg into KBRroute message and sends it to the overlay module
key | destination key |
msg | message to route |
hint | next hop (usually unused) |
routingType | specifies the routing mode (ITERATIVE_ROUTING, ...) |
Definition at line 181 of file BaseApp.h.
Referenced by RealWorldTestApp::deliver(), MyApplication::handleTimerEvent(), KBRTestApp::handleTimerEvent(), and RealWorldTestApp::handleUpperMessage().
|
protected |
Definition at line 241 of file BaseApp.cc.
|
protectedvirtual |
Common API function: handles delivered messages from overlay.
method to handle decapsulated KBRdeliver messages from overlay module, should be overwritten in derived application
key | destination key |
msg | delivered message |
Reimplemented in Scribe, I3, and RealWorldTestApp.
Definition at line 283 of file BaseApp.cc.
|
protected |
collects statistical data
Reimplemented in I3.
Definition at line 468 of file BaseApp.cc.
|
protectedvirtual |
collects statistical data of derived app
Reimplemented in NeighborCache, Scribe, SimMud, CBRDHT, GIASearchApp, SimpleGameClient, RealWorldTestApp, and ALMTest.
Definition at line 506 of file BaseApp.cc.
|
protectedvirtual |
Common API function: handles messages from overlay to be forwarded.
method to handle decapsulated KBRdeliver messages from overlay module, should be overwritten in derived application if needed
key | destination key |
msg | message to forward |
nextHopNode | next hop |
Reimplemented in Scribe, and I3.
Definition at line 290 of file BaseApp.cc.
Referenced by I3::forward().
|
private |
sends msg encapsulated in a KBRforward message to the overlay with destination key
key | the destination OverlayKey |
msg | the message to forward |
nextHopNode | the considered next hop node on the route to the destination |
Definition at line 295 of file BaseApp.cc.
|
protectedvirtual |
Return the component type of this module.
This method is overloaded by BaseOverlay/BaseApp and returns the appropriate component type of this module.
Implements BaseRpc.
Reimplemented in NeighborCache, and BootstrapList.
Definition at line 186 of file BaseApp.cc.
Referenced by ALMTest::handleReadyMessage(), and SimpleGameClient::handleReadyMessage().
|
private |
handles CommonAPIMessages
This method gets called from BaseApp::handleMessage if message arrived from_lowerTier. It determines type of msg (KBR_DELIVER, KBR_FORWARD, KBR_UPDATE) and calls corresponding methods. All other messages are deleted.
commonAPIMsg | CommonAPIMessage |
Definition at line 332 of file BaseApp.cc.
|
protectedvirtual |
processes self-messages
method to handle self-messages should be overwritten in derived application if needed
msg | self-message method to handle non-commonAPI messages from the overlay |
msg | message to handle |
Reimplemented in SimMud, GIASearchApp, SimpleGameClient, and ALMTest.
Definition at line 430 of file BaseApp.cc.
|
protected |
checks for message type and calls corresponding method
checks for message type (from overlay or selfmessage) and calls corresponding method like deliver(), forward(), and timer()
msg | the handled message |
Reimplemented in XmlRpcInterface.
Definition at line 137 of file BaseApp.cc.
|
protectedvirtual |
This method gets call **.gracefulLeaveDelay seconds before it is killed if this node is among the gracefulLeaveProbability nodes.
Definition at line 236 of file BaseApp.cc.
|
protectedvirtual |
This method gets call **.gracefulLeaveDelay seconds before it is killed.
Definition at line 231 of file BaseApp.cc.
|
protectedvirtual |
method to handle ready messages from the overlay
msg | message to handle |
Reimplemented in NeighborCache, XmlRpcInterface, Scribe, SimMud, SimpleGameClient, P2pns, and ALMTest.
Definition at line 440 of file BaseApp.cc.
|
protectedvirtual |
handleTraceMessage gets called of handleMessage(cMessage* msg) if a message arrives at trace_in.
The command included in this message should be parsed and handled.
msg | the command message to handle |
Definition at line 445 of file BaseApp.cc.
|
protectedvirtual |
This method gets call if the node has a new TransportAddress (IP address) because he changed his access network.
Reimplemented in ALMTest.
Definition at line 226 of file BaseApp.cc.
|
protectedvirtual |
method to handle messages that come directly from the UDP gate
msg | message to handle |
Reimplemented in I3, and ALMTest.
Definition at line 435 of file BaseApp.cc.
|
protectedvirtual |
handleUpperMessage gets called of handleMessage(cMessage* msg) if msg arrivedOn from_upperTier (currently msg gets deleted in this function)
msg | the message to handle |
Reimplemented in Scribe, CBRDHT, SimMud, ALMTest, and RealWorldTestApp.
Definition at line 425 of file BaseApp.cc.
|
protected |
initializes base class-attributes
stage | the init stage |
Definition at line 58 of file BaseApp.cc.
|
protectedvirtual |
initializes derived class-attributes
stage | the init stage |
Reimplemented in NeighborCache, XmlRpcInterface, Scribe, CBRDHT, I3, SimMud, GIASearchApp, SimpleGameClient, RealWorldTestApp, and ALMTest.
Definition at line 131 of file BaseApp.cc.
|
protectedvirtual |
Handles internal rpc requests.
This method is used to implement basic functionality in the BaseRpc.
msg | The call message |
Reimplemented from BaseRpc.
Definition at line 559 of file BaseApp.cc.
|
protectedvirtual |
Handles rpc responses internal in base classes
This method is used to implement basic functionality in the BaseRpc.
msg | The call message |
context | Pointer to an optional state object. The object has to be handled/deleted by the internalHandleRpcResponse() code |
rpcId | The ID of the call |
rtt | the time between sending the call and receiving the response |
Reimplemented from BaseRpc.
Definition at line 565 of file BaseApp.cc.
|
protectedvirtual |
Implements BaseRpc.
Definition at line 573 of file BaseApp.cc.
|
private |
Definition at line 581 of file BaseApp.cc.
|
inlineprotected |
Query if a node is among the siblings for a given key.
Query if a node is among the siblings for a given key. This means, that the nodeId of this node among the close numSiblings nodes to the key and that by a local findNode() call all other siblings to this key can be retrieved.
node | the NodeHandle |
key | destination key |
numSiblings | The nodes knows all numSiblings nodes close to this key |
err | return false if the range could not be determined |
|
protected |
method to set InitStage
Reimplemented in I3.
Definition at line 53 of file BaseApp.cc.
Referenced by ALMTest::initializeApp().
|
protectedvirtual |
callback-method for events at the NotificationBoard
category | ... |
details | ... |
Definition at line 214 of file BaseApp.cc.
|
protected |
sends non-commonAPI message to the lower tier
msg | message to send |
Definition at line 452 of file BaseApp.cc.
Referenced by SimpleGameClient::handleRealworldPacket(), SimpleGameClient::handleTimerEvent(), GIASearchApp::handleTimerEvent(), and SimpleGameClient::updatePosition().
|
protectedvirtual |
Sends a packet over UDP.
Reimplemented from BaseRpc.
Definition at line 526 of file BaseApp.cc.
Referenced by MyApplication::deliver().
|
protected |
Definition at line 458 of file BaseApp.cc.
Referenced by NeighborCache::prepareOverlay().
|
protectedvirtual |
Common API function: informs application about neighbors and own nodeID.
node | new or lost neighbor |
joined | new or lost? |
Reimplemented in Scribe, and CBRDHT.
Definition at line 317 of file BaseApp.cc.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
simTime when the App has been created
Definition at line 362 of file BaseApp.h.
Referenced by KBRTestApp::finishApp(), and NeighborCache::finishApp().
|
protected |
debug output yes/no?
Definition at line 350 of file BaseApp.h.
Referenced by GIASearchApp::handleLowerMessage(), GIASearchApp::handleTimerEvent(), and SimpleGameClient::initializeApp().
|
protected |
pointer to GlobalNodeList in this node
Definition at line 340 of file BaseApp.h.
Referenced by KBRTestApp::createDestKey(), GIASearchApp::handleTimerEvent(), KBRTestApp::handleTimerEvent(), and Landmark::initializeApp().
|
protected |
pointer to GlobalStatistics module in this node
Definition at line 343 of file BaseApp.h.
Referenced by KBRTestApp::evaluateData(), Landmark::finishApp(), MyApplication::finishApp(), SimpleGameClient::finishApp(), GIASearchApp::finishApp(), KBRTestApp::finishApp(), KBRTestApp::handleLookupResponse(), KBRTestApp::handleRpcResponse(), KBRTestApp::handleRpcTimeout(), and KBRTestApp::handleTimerEvent().
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
pointer to UnderlayConfigurator in this node
Definition at line 337 of file BaseApp.h.
Referenced by MyApplication::handleTimerEvent(), GIASearchApp::handleTimerEvent(), KBRTestApp::handleTimerEvent(), NeighborCache::prepareOverlay(), and GlobalViewBuilder::spreadGlobalView().