SendToKeyListener Class Reference

Inheritance diagram for SendToKeyListener:

LookupListener

List of all members.

Public Member Functions

 SendToKeyListener (BaseOverlay *overlay, BaseOverlayMessage *msg)
 ~SendToKeyListener ()
virtual void lookupFinished (AbstractLookup *lookup)

Private Attributes

BaseOverlayoverlay
BaseOverlayMessage * msg
GlobalStatisticsglobalStatistics


Constructor & Destructor Documentation

SendToKeyListener::SendToKeyListener ( BaseOverlay overlay,
BaseOverlayMessage *  msg 
) [inline]

01097                                                                        {
01098         this->overlay = overlay;
01099         this->msg = msg;
01100         globalStatistics = overlay->globalStatistics;
01101         pendingLookups++;
01102     }

SendToKeyListener::~SendToKeyListener (  )  [inline]

01104                          {
01105         pendingLookups--;
01106         overlay = NULL;
01107         if (msg != NULL) {
01108             delete msg;
01109             msg = NULL;
01110         }
01111     }


Member Function Documentation

virtual void SendToKeyListener::lookupFinished ( AbstractLookup lookup  )  [inline, virtual]

Implements LookupListener.

01113                                                         {
01114         if (dynamic_cast<BaseRouteMessage*>(msg)) {
01115             BaseRouteMessage* routeMsg = static_cast<BaseRouteMessage*>(msg);
01116             if (lookup->isValid()) {
01117                 if (lookup->getResult().size()==0) {
01118                     EV << "[SendToKeyListener::lookupFinished()]\n"
01119                           "    [ERROR] SendToKeyListener: Valid result, "
01120                           "but empty array." << endl;
01121                 } else {
01122                     routeMsg->setHopCount(routeMsg->getHopCount()
01123                                           + lookup->getAccumulatedHops());
01124 
01125                     for (uint i=0; i<lookup->getResult().size(); i++) {
01126                         overlay->sendRouteMessage(lookup->getResult()[i],
01127                                                   static_cast<BaseRouteMessage*>
01128                                                    (routeMsg->dup()),
01129                                                   overlay->routeMsgAcks);
01130                     }
01131                 }
01132             } else {
01133                 EV << "[SendToKeyListener::lookupFinished()]\n"
01134                    << "    Lookup failed - dropping message"
01135                    << endl;
01136                 RECORD_STATS(overlay->numDropped++;
01137                              overlay->bytesDropped += routeMsg->byteLength());
01138             }
01139         } else if (dynamic_cast<LookupCall*>(msg)) {
01140             LookupCall* call = static_cast<LookupCall*>(msg);
01141             LookupResponse* response = new LookupResponse();
01142 
01143             if (lookup->isValid()) {
01144 
01145                 response->setIsValid(true);
01146                 response->setKey(call->getKey());
01147                 response->setSiblingsArraySize(lookup->getResult().size());
01148                 for (uint i=0; i<lookup->getResult().size(); i++) {
01149                     response->setSiblings(i, lookup->getResult()[i]);
01150                 }
01151                 if (lookup->getResult().size() == 0) {
01152                     EV << "[SendToKeyListener::lookupFinished() @ "
01153                        << overlay->thisNode.ip
01154                        << " (" << overlay->thisNode.key.toString(16) << ")]\n"
01155                        << "    LookupCall "
01156                        << call->getNonce()
01157                        << " failed! (size=0)" << endl;
01158                 }
01159             } else {
01160                 response->setIsValid(false);
01161                 EV << "[SendToKeyListener::lookupFinished() @ "
01162                    << overlay->thisNode.ip
01163                    << " (" << overlay->thisNode.key.toString(16) << ")]\n"
01164                    << "    LookupCall "
01165                    << call->getNonce()
01166                    << " failed!" << endl;
01167             }
01168             overlay->sendRpcResponse(call, response);
01169             msg = NULL;
01170         } else {
01171             throw new cRuntimeError("SendToKeyListener::lookupFinished(): "
01172                                     "Unkown message type!");
01173         }
01174         delete this;
01175     }


Member Data Documentation

BaseOverlayMessage* SendToKeyListener::msg [private]


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

Generated on Fri Sep 19 13:05:08 2008 for ITM OverSim by  doxygen 1.5.5