Ignore:
Timestamp:
Jul 24, 2009, 3:23:11 PM (15 years ago)
Author:
mies
Message:

+ added new transport modules and adapted ariba to them
+ exchange endpoint descriptors an link establishment
+ clean up of base communication
+ link establishment with in the presence of multiple endpoints
+ local discovery for ipv6, ipv4 and bluetooth mac addresses

File:
1 edited

Legend:

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

    r4986 r5284  
    4848const EndpointDescriptor EndpointDescriptor::UNSPECIFIED;
    4949
    50 EndpointDescriptor::EndpointDescriptor() : locator( NULL ), isUnspec( true ){
    51 }
    52 
    53 EndpointDescriptor::EndpointDescriptor(const EndpointDescriptor& rh){
    54         locator = (rh.locator != NULL) ? new IPv4Locator(*rh.locator) : NULL;
    55         isUnspec = rh.isUnspec;
    56 }
    57 
    58 EndpointDescriptor::EndpointDescriptor(const Locator* _locator){
    59         if( _locator == NULL ) return;
    60 
    61         locator = new IPv4Locator(*dynamic_cast<IPv4Locator*>((Locator*)_locator));
    62         isUnspec = false;
    63 }
    64 
    65 EndpointDescriptor::EndpointDescriptor(const string str) {
    66         using namespace boost::xpressive;
    67         using namespace ariba::utility::string_format;
    68         using namespace ariba::utility::Helper;
    69         using namespace std;
    70 
    71         locator = NULL;
    72         isUnspec = true;
    73 
    74         smatch match;
    75         if (regex_search(str, match, robjects)) {
    76                 regex_nav nav = match;
    77                 for (int i=0; i<nav.size(); i++) {
    78                         string type = nav[i][robject_id].str();
    79                         if (type=="ip") {
    80                                 string ip = nav[i][robject_data].str();
    81                                 ip = ip.substr(1,ip.size()-2);
    82                                 this->locator = new IPv4Locator();
    83                                 this->locator->setIP(ip);
    84                                 this->isUnspec = false;
    85                         } else
    86                         if (type=="tcp") {
    87                                 string port = nav[i][robject_data][rfields][1].str();
    88                                 port = port.substr(1,port.size()-2);
    89                                 this->locator->setPort(stoi(port));
    90                         }
    91                 }
    92         }
    93 }
    94 
     50/// destructor.
    9551EndpointDescriptor::~EndpointDescriptor() {
    96 }
    97 
    98 bool EndpointDescriptor::isUnspecified() const {
    99         return isUnspec;
    100 }
    101 
    102 string EndpointDescriptor::toString() const {
    103         if( locator == NULL ) return "<undefined locator>";
    104         std::ostringstream o;
    105         o << "ip{" << locator->getIP() << "}";
    106         o << ",";
    107         o << "tcp(ip,{" << locator->getPort() << "})";
    108         return o.str();
    109 }
    110 
    111 EndpointDescriptor* EndpointDescriptor::fromString( string str ) {
    112         return new EndpointDescriptor( str );
    113 }
    114 
    115 bool EndpointDescriptor::operator!=( const EndpointDescriptor& rh ) const {
    116         return !operator==(rh);
    117 }
    118 
    119 bool EndpointDescriptor::operator==(const EndpointDescriptor& rh) const {
    120 
    121         if( isUnspecified() && rh.isUnspecified() ) {
    122 
    123                 // both unspec bit set
    124                 return true;
    125 
    126         } else if( (!isUnspecified()) && (!rh.isUnspecified()) ) {
    127 
    128                 //
    129                 // both are valid, check locators
    130                 //
    131 
    132                 if( locator == NULL && rh.locator == NULL ){
    133 
    134                         // both locators are invalid, ok true
    135                         return true;
    136 
    137                 } else if( locator == NULL ^ rh.locator == NULL ) {
    138 
    139                         // one locator is invalid, the other not, false
    140                         return false;
    141 
    142                 } else {
    143 
    144                         // both locators are valid, compare
    145                         assert( locator != NULL && rh.locator != NULL );
    146                         return ( locator->operator==(*rh.locator) );
    147 
    148                 }
    149 
    150         } else {
    151 
    152                 // one is unspec, the other not
    153                 assert( isUnspecified() ^ rh.isUnspecified() );
    154                 return false;
    155 
    156         }
    15752
    15853}
    15954
     55
    16056}} // namespace ariba, communication
Note: See TracChangeset for help on using the changeset viewer.