Ignore:
Timestamp:
Feb 24, 2009, 10:06:43 PM (16 years ago)
Author:
Christoph Mayer
Message:

-autolinks impl. (funktioniert noch nicht komplett, macht aber im moment nichts schlechter)
-einige fixes im ablauf etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/communication/BaseCommunication.cpp

    r2482 r2483  
    8585
    8686        for( ; i != iend; i++){
    87                 logging_debug( "local locator found " + (*i)->toString() );
     87                logging_debug( "local locator found " << (*i)->toString() );
    8888                IPv4Locator* ipv4locator = dynamic_cast<IPv4Locator*>(*i);
    8989
     
    101101                        localDescriptor.locator = ipv4locator;
    102102                        localDescriptor.isUnspec = false;
    103                         logging_info( "binding to addr = " + ipv4locator->toString() );
     103                        logging_info( "binding to addr = " << ipv4locator->toString() );
    104104                        foundLocator = true;
    105105                        break;
     
    180180        LinkID linkid = LinkID::create();
    181181
    182         logging_debug( "creating new local descriptor entry with local link id " + linkid.toString() );
    183         LinkDescriptor linkDescriptor( linkid, local, LinkID::UNSPECIFIED, remote, descriptor );
     182        logging_debug( "creating new local descriptor entry with local link id " << linkid.toString() );
     183        LinkDescriptor linkDescriptor( linkid, local, LinkID::UNSPECIFIED, remote, descriptor, false );
    184184        addLink( linkDescriptor );
    185185
     
    189189        //
    190190
    191         logging_debug( "sending out base messages with request to open link to " + remote->toString() );
     191        logging_debug( "sending out base messages with request to open link to " << remote->toString() );
    192192        AribaBaseMsg baseMsg( remote, AribaBaseMsg::LINK_STATE_OPEN_REQUEST, linkid,
    193193                                                                LinkID::UNSPECIFIED );
     
    206206                logging_error( "don't know the link you want to drop" );
    207207                return;
     208        }
     209
     210        // warn if this link has some queued messages attached
     211        if( descriptor.waitingmsg.size() > 0 ){
     212                logging_warn( "dropping link " << link.toString() <<
     213                        " that has " << descriptor.waitingmsg.size() << " waiting messages" );
    208214        }
    209215
     
    231237seqnum_t BaseCommunication::sendMessage( const LinkID lid, const Message* message) {
    232238
    233         logging_debug( "sending out message to link " + lid.toString() );
     239        logging_debug( "sending out message to link " << lid.toString() );
    234240
    235241        // query local link info
    236242        LinkDescriptor& linkDesc = queryLocalLink(lid);
    237243        if( linkDesc.isUnspecified() ){
    238                 logging_error( "don't know the link with id " + lid.toString() );
    239                 return 0;
     244                logging_error( "don't know the link with id " << lid.toString() );
     245                return -1;
    240246        }
    241247
     
    251257        msg.encapsulate( const_cast<Message*>(message) );
    252258
    253         // send message
    254         transport->sendMessage( &msg );
    255 
    256         return ++currentSeqnum;
     259        if( linkDesc.linkup ){
     260
     261                // send message
     262                transport->sendMessage( &msg );
     263                return ++currentSeqnum;
     264
     265        } else {
     266
     267                // queue message
     268                logging_info( "link " << lid.toString() << " is not up yet, queueing message" );
     269                linkDesc.waitingmsg.push_back( new Message(msg) ); // TODO ooooo
     270
     271                return 0;
     272
     273        } // if( linkDesc.linkup )
    257274}
    258275
     
    300317
    301318        AribaBaseMsg* spovmsg = ((Message*)message)->decapsulate<AribaBaseMsg>();
    302         logging_debug( "receiving base comm message of type " + spovmsg->getTypeString() );
     319        logging_debug( "receiving base comm message of type " << spovmsg->getTypeString() );
    303320
    304321        //
     
    351368                const NetworkLocator* remoteLocator = dynamic_cast<const NetworkLocator*>(message->getSourceAddress());
    352369
    353                 logging_debug( "localLocator=" + localLocator->toString() + " remoteLocator="+remoteLocator->toString());
     370                logging_debug( "localLocator=" << localLocator->toString()
     371                                << " remoteLocator=" << remoteLocator->toString());
    354372
    355373                // ask the registered listeners if this link
     
    372390
    373391                LinkDescriptor linkDescriptor(localLink, localLocator, remoteLink,
    374                                         remoteLocator, EndpointDescriptor(remoteLocator));
     392                                        remoteLocator, EndpointDescriptor(remoteLocator), true);
    375393
    376394                logging_debug( "saving new link descriptor with " <<
     
    378396                                "[local locator " << localLocator->toString() << "] " <<
    379397                                "[remote link " << remoteLink.toString() << "] " <<
    380                                 "[remote locator " << remoteLocator->toString() << "]" );
     398                                "[remote locator " << remoteLocator->toString() << "]" <<
     399                                "[link up true]" );
    381400
    382401                addLink( linkDescriptor );
     
    400419                // the link is now open
    401420                //
    402 
     421               
    403422                BOOST_FOREACH( CommunicationEvents* i, eventListener ){
    404423                        i->onLinkUp( localLink, localLocator, remoteLocator );
     
    420439
    421440                if (linkDesc.isUnspecified()) {
    422                         logging_warn("Failed to find local link "+spovmsg->getRemoteLink().toString());
     441                        logging_warn("Failed to find local link " << spovmsg->getRemoteLink().toString());
    423442                        return false;
    424443                }
    425444
    426445                linkDesc.remoteLink = spovmsg->getLocalLink();
    427                 logging_debug( "the link is now up with local link id " + spovmsg->getRemoteLink().toString() );
     446                linkDesc.linkup = true;
     447       
     448                logging_debug( "the link is now up with local link id " << spovmsg->getRemoteLink().toString() );
    428449
    429450                BOOST_FOREACH( CommunicationEvents* i, eventListener ){
     
    431452                }
    432453
     454                if( linkDesc.waitingmsg.size() > 0 ){
     455                        logging_info( "sending out queued messages on link " << linkDesc.localLink.toString() );
     456
     457                        BOOST_FOREACH( Message* msg, linkDesc.waitingmsg ){
     458                                sendMessage( linkDesc.localLink, msg );
     459                                delete msg;
     460                        }
     461
     462                        linkDesc.waitingmsg.clear();
     463                }
     464
    433465        } // LINK_STATE_OPEN_REPLY
    434466
     
    440472
    441473                const LinkID& localLink = spovmsg->getRemoteLink();
    442                 logging_debug( "received link close request for link " + localLink.toString() );
     474                logging_debug( "received link close request for link " << localLink.toString() );
    443475
    444476                //
     
    450482                LinkDescriptor& linkDesc = queryLocalLink( localLink );
    451483                if (linkDesc.isUnspecified()) {
    452                         logging_warn("Failed to find local link "+localLink.toString());
     484                        logging_warn("Failed to find local link " << localLink.toString());
    453485                        return false;
    454486                }
     
    469501
    470502                const LinkID& localLink = spovmsg->getRemoteLink();
    471                 logging_debug( "received link update for link " + localLink.toString() );
     503                logging_debug( "received link update for link " << localLink.toString() );
    472504
    473505                //
     
    477509                LinkDescriptor& linkDesc = queryLocalLink( localLink );
    478510                if (linkDesc.isUnspecified()) {
    479                         logging_warn("Failed to update local link "+localLink.toString());
     511                        logging_warn("Failed to update local link " << localLink.toString());
    480512                        return false;
    481513                }
     
    517549
    518550        for( ; i != iend; i++){
    519                 if( (*i).localLink == localLink){
    520                         linkSet.erase( i );
    521                         break;
    522                 }
     551                if( (*i).localLink != localLink) continue;
     552               
     553                BOOST_FOREACH( Message* msg, i->waitingmsg ){
     554                        delete msg;
     555                }
     556
     557                i->waitingmsg.clear();
     558                linkSet.erase( i );
     559
     560                break;
    523561        }
    524562}
     
    568606                info.type != NetworkChangeInterface::EventTypeAddressDelete ) return;
    569607
    570         logging_info("base communication is handling network address changes");
     608        logging_info( "base communication is handling network address changes" );
    571609
    572610        //
     
    610648
    611649        for( ; i != iend; i++){
    612                 logging_debug( "local locator found " + (*i)->toString() );
     650                logging_debug( "local locator found " << (*i)->toString() );
    613651                IPv4Locator* ipv4locator = dynamic_cast<IPv4Locator*>(*i);
    614652
Note: See TracChangeset for help on using the changeset viewer.