00001 #include "headers.h"
00002
00015
00016
00020 ImHerePacket::ImHerePacket() : NpPacket() {
00021
00022 m_controlType = NpPacket::ImHere;
00023
00024
00025 m_id = 0;
00026
00027
00028 m_versionNumber = VERSION_NUMBER;
00029
00030
00031 m_isNatted = GlobalObjects::instance()->getConfig()->getSelf()->getNode()->isNatted();
00032 m_isFirewalled = GlobalObjects::instance()->getConfig()->getSelf()->getNode()->isFirewalled();
00033 m_isTrusted = GlobalObjects::instance()->getConfig()->getSelf()->getNode()->isTrusted();
00034
00035
00036 m_ip = GlobalObjects::instance()->getConfig()->getSelf()->getNode()->getSocketAddress()->getIpAddress();
00037
00038 m_port = 0;
00039
00040
00041 m_headerLength = IH_HEADER_LENGTH;
00042
00043 m_length = 0;
00044 }
00045
00046
00050 ImHerePacket::ImHerePacket(unsigned char* rawData) : NpPacket(rawData) {
00051
00052 m_controlType = NpPacket::ImHere;
00053
00054
00055 memcpy(&m_id, &rawData[IdOffset], S_UINT);
00056 m_id = ntohl(m_id);
00057
00058
00059 m_versionNumber = (rawData[VersionNumberOffset] & 0xF0) >> 4;
00060
00061
00062 m_isNatted = ((rawData[CapabilityOffset] & NatBit) != 0);
00063 m_isFirewalled = ((rawData[CapabilityOffset] & FirewallBit) != 0);
00064 m_isTrusted = ((rawData[CapabilityOffset] & TrustedBit) != 0);
00065
00066
00067 if ((rawData[CapabilityOffset] & IpVersionBit) == 0) {
00068 m_ip.setVersion(IpAddress::IPv4);
00069
00070
00071 unsigned long tmpIp;
00072 memcpy(&tmpIp, &rawData[IpOffset], S_UINT);
00073 m_ip.setIpAddress(ntohl(tmpIp));
00074 }
00075 else {
00076 m_ip.setVersion(IpAddress::IPv6);
00077 debug(DEBUG_ERR, "ERROR: Functionality not defined!!!!!!!!!!");
00078 }
00079
00080
00081 memcpy(&m_port, &rawData[PortOffset], S_USHORT);
00082 m_port = ntohs(m_port);
00083
00084
00085 m_headerLength = IH_HEADER_LENGTH;
00086 }
00087
00088
00092 unsigned char*
00093 ImHerePacket::getRawData() {
00094 unsigned int tmpUint;
00095 unsigned short tmpUshort;
00096
00097
00098 unsigned char* buf = NpPacket::getRawData();
00099
00100
00101 tmpUint = htonl(m_id);
00102 memcpy(&buf[IdOffset], &tmpUint, S_UINT);
00103
00104
00105 buf[VersionNumberOffset] = (m_versionNumber << 4);
00106
00107
00108 buf[CapabilityOffset] = buf[CapabilityOffset] | (m_isNatted ? NatBit : 0);
00109 buf[CapabilityOffset] = buf[CapabilityOffset] | (m_isFirewalled ? FirewallBit : 0);
00110 buf[CapabilityOffset] = buf[CapabilityOffset] | (m_isTrusted ? TrustedBit : 0);
00111 buf[CapabilityOffset] = buf[CapabilityOffset] | ((m_ip.getVersion() == IpAddress::IPv4) ? 0 : 0x01);
00112
00113
00114 tmpUshort = htons(m_port);
00115 memcpy(&buf[PortOffset], &tmpUshort, S_USHORT);
00116
00117
00118 if (m_ip.getVersion() == IpAddress::IPv4) {
00119 tmpUint = htonl(m_ip.getUnsignedLongForm());
00120 memcpy(&buf[IpOffset], &tmpUint, S_UINT);
00121 }
00122 else {
00123 debug(DEBUG_ERR, "FUNCTIONALITY NOT DEFINED!!!");
00124 }
00125
00126 return buf;
00127 }
00128
00129
00133 unsigned int
00134 ImHerePacket::getId() {
00135 return m_id;
00136 }
00137
00138
00142 void
00143 ImHerePacket::setId(unsigned int id) {
00144 m_id = id;
00145 }
00146
00147
00151 unsigned short
00152 ImHerePacket::getVersionNumber() {
00153 return m_versionNumber;
00154 }
00155
00156
00157 void
00158 ImHerePacket::setVersionNumber(unsigned short versionNumber) {
00159 m_versionNumber = versionNumber;
00160 }
00161
00162
00163 bool
00164 ImHerePacket::isNatted() {
00165 return m_isNatted;
00166 }
00167
00168
00169 void
00170 ImHerePacket::setIsNatted(bool value) {
00171 m_isNatted = value;
00172 }
00173
00174
00175 bool
00176 ImHerePacket::isFirewalled() {
00177 return m_isFirewalled;
00178 }
00179
00180
00181 void
00182 ImHerePacket::setIsFirewalled(bool value) {
00183 m_isFirewalled = value;
00184 }
00185
00186
00187 bool
00188 ImHerePacket::isTrusted() {
00189 return m_isTrusted;
00190 }
00191
00192
00193 void
00194 ImHerePacket::setIsTrusted(bool value) {
00195 m_isTrusted = value;
00196 }
00197
00198
00199 IpAddress
00200 ImHerePacket::getIp() {
00201 return m_ip;
00202 }
00203
00204
00205 void
00206 ImHerePacket::setIp(IpAddress ip) {
00207 m_ip = ip;
00208 }
00209
00210
00211 unsigned short
00212 ImHerePacket::getPort() {
00213 return m_port;
00214 }
00215
00216
00217 void
00218 ImHerePacket::setPort(unsigned short port) {
00219 m_port = port;
00220 }
00221
00222
00223 void
00224 ImHerePacket::toStream(std::ostream& out) {
00225 IpAddress ip;
00226
00227 NpPacket::toStream(out);
00228 out << "Discovery ID = " << getId() << " (0x" << hex << getId() << ")" << dec << "\n";
00229 out << "Version Number = " << getVersionNumber() << "\n";
00230 out << "isNATed ?= " << isNatted() << "\n";
00231 out << "isFirewalled ?= " << isFirewalled() << "\n";
00232 out << "isTrusted ?= " << isTrusted() << "\n";
00233
00234 ip = getIp();
00235 out << "IP = " << ip << "\n";
00236 out << "port = " << getPort() << " (0x" << hex << getPort() << dec << ");" << "\n";
00237 }
00238
00239