Changeset 5464 for source


Ignore:
Timestamp:
Jul 30, 2009, 8:40:28 AM (15 years ago)
Author:
Christoph Mayer
Message:

-periodic broadcast fix

Location:
source/ariba
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/communication/modules/transport/tcp/TCPTransport.cpp

    r5151 r5464  
    203203                                        // converting message
    204204                                        logging_debug( "converting message" );
    205                                         //std::cout << "XXXXXXXXXXXXreceived data on tcp transport: " << data << std::endl;
    206205                                        Message* msg = new Message(data);
    207206
  • source/ariba/overlay/BaseOverlay.cpp

    r5444 r5464  
    241241        bc(NULL), overlayInterface(NULL), nodeId(NodeID::UNSPECIFIED),
    242242        spovnetId(SpoVNetID::UNSPECIFIED), state(BaseOverlayStateInvalid),
    243         sideport(&SideportListener::DEFAULT), started(false) {
     243        sideport(&SideportListener::DEFAULT), started(false), counter(0) {
    244244}
    245245
  • source/ariba/utility/bootstrap/modules/periodicbroadcast/PeriodicBroadcast.h

    r5421 r5464  
    131131                udp::socket socket_v6;
    132132                udp::endpoint remote_endpoint_;
    133                 boost::array<char, 1500> recv_buffer_;
     133                boost::array<char, 1500> recv_buffer_4;
     134                boost::array<char, 1500> recv_buffer_6;
    134135                ServiceList* services;
    135136                boost::mutex* servicesmutex;
     
    203204                void start_receive(){
    204205                        socket_v4.async_receive_from(
    205                                         boost::asio::buffer(recv_buffer_), remote_endpoint_,
    206                                         boost::bind(&udp_server::handle_receive, this,
     206                                        boost::asio::buffer(recv_buffer_4), remote_endpoint_,
     207                                        boost::bind(&udp_server::handle_receive_4, this,
    207208                                                        boost::asio::placeholders::error,
    208209                                                        boost::asio::placeholders::bytes_transferred));
    209210
    210211                        socket_v6.async_receive_from(
    211                                         boost::asio::buffer(recv_buffer_), remote_endpoint_,
    212                                         boost::bind(&udp_server::handle_receive, this,
     212                                        boost::asio::buffer(recv_buffer_6), remote_endpoint_,
     213                                        boost::bind(&udp_server::handle_receive_6, this,
    213214                                                        boost::asio::placeholders::error,
    214215                                                        boost::asio::placeholders::bytes_transferred));
    215216                }
    216217
    217                 void handle_receive(const boost::system::error_code& error,
     218                void handle_receive_4(const boost::system::error_code& error,
    218219                                std::size_t bytes_transferred){
    219220
    220                         if (!error || error == boost::asio::error::message_size){
    221 
    222                                 PeriodicBroadcastMessage msg;
    223                                 Data data( (uint8_t*)recv_buffer_.data(), bytes_transferred*8 );
    224                                 data_deserialize( msg, data );
    225 
    226                                 { // insert new found service
    227                                         boost::mutex::scoped_lock( *servicesmutex );
    228 
    229                                         ServiceList::iterator it = services->find( msg.getName() );
    230                                         if( it != services->end() ){
    231 
    232                                                 it->second.info1 = msg.getInfo1();
    233                                                 it->second.info2 = msg.getInfo2();
    234                                                 it->second.info3 = msg.getInfo3();
    235                                                 it->second.lastseen = time(NULL);
    236 
    237                                         } else {
    238                                                 Service s( msg.getName(), msg.getInfo1(), msg.getInfo2(), msg.getInfo3(), time(NULL));
    239                                                 services->insert( std::make_pair(msg.getName(), s) );
    240                                         }
     221                        if (!error || error == boost::asio::error::message_size)
     222                                handle_info(recv_buffer_4, bytes_transferred);
     223                        else
     224                                logging_warn("failed receiving broadcast data: " << error.message());
     225
     226                        start_receive();
     227                }
     228
     229                void handle_receive_6(const boost::system::error_code& error,
     230                                std::size_t bytes_transferred){
     231
     232                        if (!error || error == boost::asio::error::message_size)
     233                                handle_info(recv_buffer_6, bytes_transferred);
     234                        else
     235                                logging_warn("failed receiving broadcast data: " << error.message());
     236
     237                        start_receive();
     238                }
     239
     240                void handle_info(boost::array<char, 1500>& buffer, std::size_t length){
     241                        PeriodicBroadcastMessage msg;
     242
     243                        Data data( (uint8_t*)buffer.data(), length*8 );
     244                        data_deserialize( msg, data );
     245
     246                        { // insert new found service
     247                                boost::mutex::scoped_lock( *servicesmutex );
     248
     249                                ServiceList::iterator it = services->find( msg.getName() );
     250                                if( it != services->end() ){
     251
     252                                        it->second.info1 = msg.getInfo1();
     253                                        it->second.info2 = msg.getInfo2();
     254                                        it->second.info3 = msg.getInfo3();
     255                                        it->second.lastseen = time(NULL);
     256
     257                                } else {
     258                                        Service s( msg.getName(), msg.getInfo1(), msg.getInfo2(), msg.getInfo3(), time(NULL));
     259                                        services->insert( std::make_pair(msg.getName(), s) );
    241260                                }
    242 
    243                                 start_receive();
    244                         } else {
    245 
    246                                 logging_warn("failed receiving message on ipv4 socket" << error);
    247 
    248261                        }
    249262                }
Note: See TracChangeset for help on using the changeset viewer.