00001 #include "headers.h"
00002
00007
00008
00012 SocketAddress::SocketAddress() {
00013 m_sockAddrStructLen = sizeof(struct sockaddr_in);
00014 setIpAddress(IpAddress((unsigned long)0));
00015 setPort((unsigned short)0);
00016 }
00017
00018
00022 SocketAddress::SocketAddress(IpAddress ipAddr, unsigned short port) {
00023 m_sockAddrStructLen = sizeof(struct sockaddr_in);
00024 setIpAddress(ipAddr);
00025 setPort(port);
00026 }
00027
00028
00032 SocketAddress::SocketAddress(struct sockaddr_in* value) {
00033 m_sockAddrStructLen = sizeof(struct sockaddr_in);
00034 setSocketAddress(value);
00035 }
00036
00037
00041 SocketAddress::SocketAddress(const SocketAddress& value) {
00042 m_ipAddr = value.m_ipAddr;
00043 m_port = value.m_port;
00044 memcpy(&m_sockAddrStruct, &value.m_sockAddrStruct, sizeof(struct sockaddr_in));
00045 m_sockAddrStructLen = value.m_sockAddrStructLen;
00046 #ifdef DEBUG_ON
00047 toCStr();
00048 #endif
00049 }
00050
00051
00052 SocketAddress::~SocketAddress() {
00053 }
00054
00055
00062 void
00063 SocketAddress::initSockAddr(struct sockaddr_in* sockAddr, unsigned int ipAddr, int port) {
00064 memset(sockAddr, '\0', sizeof(struct sockaddr_in));
00065 sockAddr->sin_family = AF_INET;
00066 sockAddr->sin_addr.s_addr = ipAddr;
00067 sockAddr->sin_port = htons(port);
00068 }
00069
00070
00071 void
00072 SocketAddress::setIpAddress(const IpAddress& value) {
00073 m_ipAddr = value;
00074 initSockAddr(&m_sockAddrStruct, m_ipAddr.getUnsignedLongForm(), m_port);
00075 #ifdef DEBUG_ON
00076 toCStr();
00077 #endif
00078 }
00079
00080
00081 void
00082 SocketAddress::setSocketAddress(struct sockaddr_in* value) {
00083 memcpy(&m_sockAddrStruct, value, sizeof(struct sockaddr_in));
00084 m_sockAddrStructLen = sizeof(struct sockaddr_in);
00085 m_ipAddr.setIpAddress(m_sockAddrStruct.sin_addr);
00086 m_port = m_sockAddrStruct.sin_port;
00087 #ifdef DEBUG_ON
00088 toCStr();
00089 #endif
00090 }
00091
00092
00093 void
00094 SocketAddress::setPort(unsigned short value) {
00095 m_port = value;
00096 initSockAddr(&m_sockAddrStruct, m_ipAddr.getUnsignedLongForm(), m_port);
00097 #ifdef DEBUG_ON
00098 toCStr();
00099 #endif
00100 }
00101
00102
00103 void
00104 SocketAddress::setPort(const char* value) {
00105 setPort(atoi(value));
00106 }
00107
00108
00109 void
00110 SocketAddress::setPort(string value) {
00111 setPort(value.c_str());
00112 }
00113
00114
00120 struct sockaddr_in*
00121 SocketAddress::getSockAddrStruct() {
00122 return &m_sockAddrStruct;
00123 }
00124
00125
00126 OS_SPEC_SOCKLEN*
00127 SocketAddress::getSockAddrStructLen() {
00128 return &m_sockAddrStructLen;
00129 }
00130
00131
00132 unsigned short
00133 SocketAddress::getPort() {
00134 return m_port;
00135 }
00136
00137
00138 IpAddress
00139 SocketAddress::getIpAddress() {
00140 return m_ipAddr;
00141 }
00142
00143
00147 void
00148 SocketAddress::toStream(std::ostream& out) {
00149 out << m_ipAddr << ":" << m_port;
00150 }
00151
00152
00157 const char*
00158 SocketAddress::toCStr() {
00159 OS_SPEC_SNPRINTF(m_cstr, MAX_IP_ADDR_STR + 6, "%s:%d", m_ipAddr.toCStr(), m_port);
00160 return m_cstr;
00161 }
00162
00163
00167 bool
00168 SocketAddress::isZero() {
00169 return (m_ipAddr.isZero() || (m_port == 0));
00170 }
00171
00172
00181 bool
00182 SocketAddress::read(std::istream& in) {
00183 char tmpStr[MAX_IP_ADDR_STR];
00184 in.getline(tmpStr, MAX_IP_ADDR_STR, ':');
00185 IpAddress tmpIp(&tmpStr[0]);
00186 setIpAddress(tmpIp);
00187
00188 unsigned short port;
00189 in >> port;
00190 setPort(port);
00191
00192 #ifdef DEBUG_ON
00193 toCStr();
00194 #endif
00195 return (!in.fail() && !in.eof());
00196 }
00197
00198
00202 bool
00203 SocketAddress::read(const char* buf) {
00204 stringstream s(buf);
00205 return this->read(s);
00206 }
00207
00208
00212 bool
00213 SocketAddress::read(string buf) {
00214 stringstream s(buf);
00215 return this->read(s);
00216 }
00217