00001 #include "headers.h"
00002
00008
00009 string Node::beginTag="<Node>";
00010 string Node::endTag="</Node>";
00011 string Node::TRUSTED_TAG="isTrusted";
00012 string Node::FIREWALL_TAG="isFirewalled";
00013 string Node::NAT_TAG="isNatted";
00014 string Node::SOCKET_ADDRESS_TAG="socketAddress";
00015 string Node::RTT_TAG="rtt";
00016 string Node::VERSION_TAG="version";
00017
00021 Node::Node() {
00022 setIsTrusted(false);
00023 setIsNatted(true);
00024 setIsFirewalled(false);
00025 setVersionNumber(VERSION_NUMBER);
00026 m_rtt = TimeValue(1,0);
00027 m_isConnected = false;
00028 m_cantConnect = false;
00029 }
00030
00031
00032 Node::Node(const Node& src) {
00033 m_socketAddress = src.m_socketAddress;
00034 m_isTrusted = src.m_isTrusted;
00035 m_isFirewalled = src.m_isFirewalled;
00036 m_isNatted = src.m_isNatted;
00037 m_versionNumber = src.m_versionNumber;
00038 m_isConnected = src.m_isConnected;
00039 }
00040
00041
00045 Node::~Node() {
00046 }
00047
00048
00049 SocketAddress*
00050 Node::getSocketAddress() {
00051 return &m_socketAddress;
00052 }
00053
00054
00058 bool
00059 Node::isConnected() {
00060 return m_isConnected;
00061 }
00062
00063
00067 int
00068 Node::getVersionNumber() {
00069 return m_versionNumber;
00070 }
00071
00072
00076 void
00077 Node::setVersionNumber(int value) {
00078 m_versionNumber = value;
00079 }
00080
00081
00085 bool
00086 Node::isNatted() {
00087 return m_isNatted;
00088 }
00089
00090
00094 bool
00095 Node::isTrusted() {
00096 return m_isTrusted;
00097 }
00098
00099
00103 bool
00104 Node::isFirewalled() {
00105 return m_isFirewalled;
00106 }
00107
00108
00112 void
00113 Node::setSocketAddress(SocketAddress* socketAddress) {
00114 m_socketAddress = *socketAddress;
00115 }
00116
00117
00118 void
00119 Node::setIsNatted(bool val) {
00120 m_isNatted = val;
00121 }
00122
00123
00124 void
00125 Node::setIsTrusted(bool val) {
00126 m_isTrusted = val;
00127 }
00128
00129
00130 void
00131 Node::setIsFirewalled(bool val) {
00132 m_isFirewalled = val;
00133 }
00134
00135
00136 bool
00137 Node::cantConnect() {
00138 return m_cantConnect;
00139 }
00140
00141
00142 void
00143 Node::setCantConnect(bool value) {
00144 m_cantConnect = value;
00145 }
00146
00147
00151 void
00152 Node::handleEvent(ObservableInterface* connection, int eventType, void* object) {
00153 if (eventType == ConnectionInterface::CONNECTION_CLOSED) {
00154 m_isConnected = false;
00155 }
00156 else if (eventType == ConnectionInterface::CONNECTION_OPENED) {
00157 m_isConnected = true;
00158 }
00159 }
00160
00161
00165 TimeValue
00166 Node::getRtt() {
00167 return m_rtt;
00168 }
00169
00170
00174 void
00175 Node::setRtt(TimeValue value) {
00176 m_rtt = value;
00177 }
00178
00179
00183 std::istream& operator >>(std::istream& in, Node& node) {
00184 string buf;
00185 getline(in, buf, '\n');
00186
00187 while (!in.eof() && (buf.find(Node::endTag) == string::npos)) {
00188 if (Config::matchTag(buf, Node::SOCKET_ADDRESS_TAG)) {
00189 SocketAddress socketAddress;
00190 socketAddress.read(buf.substr(Node::SOCKET_ADDRESS_TAG.length() + 1));
00191 node.setSocketAddress(&socketAddress);
00192 }
00193 else if (Config::matchTag(buf, Node::NAT_TAG)) {
00194 node.setIsNatted(Config::readBool(buf, Node::NAT_TAG));
00195 }
00196 else if (Config::matchTag(buf, Node::FIREWALL_TAG)) {
00197 node.setIsFirewalled(Config::readBool(buf, Node::FIREWALL_TAG));
00198 }
00199 else if (Config::matchTag(buf, Node::TRUSTED_TAG)) {
00200 node.setIsTrusted(Config::readBool(buf, Node::TRUSTED_TAG));
00201 }
00202 else if (Config::matchTag(buf, Node::RTT_TAG)) {
00203
00204 }
00205 else if (Config::matchTag(buf, Node::VERSION_TAG)) {
00206 node.setVersionNumber(Config::readInt(buf, Node::VERSION_TAG));
00207 }
00208 getline(in, buf, '\n');
00209 }
00210 return in;
00211 }
00212
00213
00214 void
00215 Node::toStream(std::ostream& out) {
00216 out << Node::beginTag << "\n";
00217 out << Node::SOCKET_ADDRESS_TAG << DELIM << m_socketAddress << "\n";
00218 out << Node::NAT_TAG << DELIM << boolToString(m_isNatted) << "\n";
00219 out << Node::FIREWALL_TAG << DELIM << boolToString(m_isFirewalled) << "\n";
00220 out << Node::TRUSTED_TAG << DELIM << boolToString(m_isTrusted) << "\n";
00221 out << Node::RTT_TAG << DELIM << m_rtt << "\n";
00222 out << Node::VERSION_TAG << DELIM << m_versionNumber << "\n";
00223 out << Node::endTag << "\n";
00224 }
00225
00226
00230 bool
00231 Node::equals(Node* node) {
00232 return (this->getSocketAddress()->getIpAddress().equals(node->getSocketAddress()->getIpAddress()));
00233 }
00234
00235
00239 bool
00240 Node::equals(ConnectionInterface* connection) {
00241 return (this->getSocketAddress()->getIpAddress().equals(connection->getSocketAddress()->getIpAddress()));
00242 }
00243