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

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

Location:
source/ariba/communication
Files:
2 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
  • source/ariba/communication/BaseCommunication.h

    r2482 r2483  
    4646#include <vector>
    4747#include <iostream>
     48#include <deque>
    4849#include <algorithm>
    4950#include <boost/foreach.hpp>
     
    7778using std::map;
    7879using std::vector;
     80using std::deque;
    7981using std::pair;
    8082using std::make_pair;
     
    222224                        remoteLink(),
    223225                        remoteLocator(NULL),
    224                         remoteEndpoint(EndpointDescriptor::UNSPECIFIED){
     226                        remoteEndpoint(EndpointDescriptor::UNSPECIFIED),
     227                        linkup(false) {
    225228                }
    226229
    227230                LinkDescriptor(const LinkID& _localLink, const NetworkLocator*& _localLocator,
    228231                                const LinkID& _remoteLink, const NetworkLocator*& _remoteLocator,
    229                                 const EndpointDescriptor& _remoteEndpoint ) :
     232                                const EndpointDescriptor& _remoteEndpoint, bool _linkup ) :
    230233                        localLink(_localLink),
    231234                        localLocator(_localLocator),
    232235                        remoteLink(_remoteLink),
    233236                        remoteLocator(_remoteLocator),
    234                         remoteEndpoint(_remoteEndpoint){
     237                        remoteEndpoint(_remoteEndpoint),
     238                        linkup(_linkup) {
    235239                }
    236240
     
    240244                        remoteLink(desc.remoteLink),
    241245                        remoteLocator(desc.remoteLocator),
    242                         remoteEndpoint(desc.remoteEndpoint){
     246                        remoteEndpoint(desc.remoteEndpoint),
     247                        linkup(desc.linkup) {
     248
     249                        BOOST_FOREACH( Message* msg, desc.waitingmsg ){
     250                                waitingmsg.push_back( msg );
     251                        }
    243252                }
    244253
     
    252261                const NetworkLocator*   remoteLocator;
    253262                EndpointDescriptor      remoteEndpoint;
     263
     264                bool                    linkup;
     265                deque<Message*>         waitingmsg;
    254266        };
    255267
Note: See TracChangeset for help on using the changeset viewer.