00001 /* 00002 * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By 00003 * downloading, copying, installing or using the software you agree to 00004 * this license. If you do not agree to this license, do not download, 00005 * install, copy or use the software. 00006 * 00007 * University of Waterloo Open Source License 00008 * 00009 * Copyright (c) 2005 University of Waterloo. All rights reserved. 00010 * 00011 * Redistribution and use in source and binary forms, with or without 00012 * modification, are permitted provided that the following conditions are 00013 * met: 00014 * 00015 * Redistributions of source code must retain the above copyright 00016 * notice, this list of conditions and the following disclaimer. 00017 * 00018 * Redistributions in binary form must reproduce the above copyright 00019 * notice, this list of conditions and the following disclaimer in the 00020 * documentation and/or other materials provided with the distribution. 00021 * 00022 * Neither the name of the University of Waterloo nor the names of its 00023 * contributors may be used to endorse or promote products derived from 00024 * this software without specific prior written permission. 00025 * 00026 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00027 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00028 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00029 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY 00030 * OF WATERLOO OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00031 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00032 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 00033 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00034 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 00035 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 00036 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00037 */ 00038 00039 00040 #include "TcaEndpointID.h" 00041 00042 00044 // class TcaEndpointID 00045 00046 00047 TcaEndpointID::TcaEndpointID(const dtn_endpoint_id_t& eid) 00048 : valid_(false), host_(""), app_("") 00049 { 00050 parse(eid.uri); 00051 } 00052 00053 00054 TcaEndpointID::TcaEndpointID(const std::string& str) 00055 : valid_(false), host_(""), app_("") 00056 { 00057 parse(str); 00058 } 00059 00060 00061 TcaEndpointID::TcaEndpointID(const std::string& host, const std::string& app) 00062 : valid_(true), host_(host), app_(app) 00063 { 00064 // TODO: we should validate host and app 00065 } 00066 00067 00068 TcaEndpointID::TcaEndpointID(const TcaEndpointID& eid) 00069 : valid_(true), host_(eid.host_), app_(eid.app_) 00070 { 00071 // TODO: we should validate host and app 00072 } 00073 00074 00075 void 00076 TcaEndpointID::parse(const std::string& str) 00077 { 00078 // DK: We should use the dtn_parse_eid_string function here to check it 00079 // if (!valid_) return; 00080 if ((str.length() <= 6)) 00081 { 00082 valid_ = false; 00083 return; 00084 } 00085 if (str.substr(0,6) != "tca://") 00086 { 00087 valid_ = false; 00088 return; 00089 } 00090 00091 std::string nub = str.substr(6, str.length()); 00092 00093 int slash = nub.find("/"); // slash between host and app 00094 if (slash < 0) 00095 { 00096 host_ = nub; // if no slashes, assume the whole thing is host 00097 app_ = ""; 00098 return; 00099 } 00100 00101 host_ = nub.substr(0, slash); 00102 app_ = nub.substr(slash + 1, nub.length()); 00103 } 00104 00105 00106 void 00107 TcaEndpointID::set_host(const std::string& host) 00108 { 00109 host_ = host; 00110 } 00111 00112 00113 void 00114 TcaEndpointID::set_app(const std::string& app) 00115 { 00116 app_ = app; 00117 } 00118