|
|
| 33 |
|
33 |
|
| 34 |
#include <algorithm> |
34 |
#include <algorithm> |
| 35 |
|
35 |
|
| 36 |
#include <sys/socket.h> |
|
|
| 37 |
#include <netinet/in.h> |
| 38 |
#include <arpa/inet.h> |
| 39 |
#include <netinet/ip.h> |
| 40 |
#include <netinet/tcp.h> |
| 41 |
|
| 42 |
#include "sim_interface.h" |
36 |
#include "sim_interface.h" |
| 43 |
#include "sim_errno.h" |
37 |
#include "sim_errno.h" |
| 44 |
|
38 |
|
| 45 |
NS_LOG_COMPONENT_DEFINE ("NscTcpSocketImpl"); |
39 |
NS_LOG_COMPONENT_DEFINE ("NscTcpSocketImpl"); |
|
|
40 |
|
| 41 |
#define nsc_bytswap_16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) |
| 46 |
|
42 |
|
| 47 |
using namespace std; |
43 |
using namespace std; |
| 48 |
|
44 |
|
|
|
| 307 |
m_remoteAddress = transport.GetIpv4 (); |
303 |
m_remoteAddress = transport.GetIpv4 (); |
| 308 |
m_remotePort = transport.GetPort (); |
304 |
m_remotePort = transport.GetPort (); |
| 309 |
|
305 |
|
| 310 |
struct in_addr remoteAddr; |
306 |
uint8_t addr[4]; |
| 311 |
uint32_t addr32; |
|
|
| 312 |
|
307 |
|
| 313 |
m_remoteAddress.Serialize((uint8_t*)&addr32); |
308 |
m_remoteAddress.Serialize (addr); |
| 314 |
remoteAddr.s_addr = addr32; |
309 |
Ipv4Address ipAddr = Ipv4Address::Deserialize (addr); |
|
|
310 |
std::ostringstream addrss; |
| 311 |
ipAddr.Print (addrss); |
| 312 |
std::string addrStr = addrss.str(); |
| 315 |
|
313 |
|
| 316 |
m_nscTcpSocket->connect(inet_ntoa(remoteAddr), m_remotePort); |
314 |
m_nscTcpSocket->connect (addrStr.c_str (), m_remotePort); |
| 317 |
m_state = SYN_SENT; |
315 |
m_state = SYN_SENT; |
| 318 |
return 0; |
316 |
return 0; |
| 319 |
} |
317 |
} |
|
|
| 497 |
size_t buflen = sizeof(buf); |
495 |
size_t buflen = sizeof(buf); |
| 498 |
|
496 |
|
| 499 |
if (0 == m_nscTcpSocket->getpeername((void *) buf, &buflen, &port)) { |
497 |
if (0 == m_nscTcpSocket->getpeername((void *) buf, &buflen, &port)) { |
| 500 |
m_remotePort = ntohs(port); |
498 |
m_remotePort = nsc_bytswap_16 (port); |
| 501 |
m_remoteAddress = m_remoteAddress.Deserialize(buf); |
499 |
m_remoteAddress = m_remoteAddress.Deserialize(buf); |
| 502 |
m_peerAddress = InetSocketAddress(m_remoteAddress, m_remotePort); |
500 |
m_peerAddress = InetSocketAddress(m_remoteAddress, m_remotePort); |
| 503 |
} |
501 |
} |
|
|
| 532 |
size_t buflen = sizeof(buf); |
530 |
size_t buflen = sizeof(buf); |
| 533 |
if (0 == m_nscTcpSocket->getsockname((void *) &buf, &buflen, &port)) { |
531 |
if (0 == m_nscTcpSocket->getsockname((void *) &buf, &buflen, &port)) { |
| 534 |
m_localAddress = m_localAddress.Deserialize(buf); |
532 |
m_localAddress = m_localAddress.Deserialize(buf); |
| 535 |
m_localPort = ntohs(port); |
533 |
m_localPort = nsc_bytswap_16 (port); |
| 536 |
} |
534 |
} |
| 537 |
|
535 |
|
| 538 |
NS_LOG_LOGIC ("NscTcpSocketImpl " << this << " connected to " |
536 |
NS_LOG_LOGIC ("NscTcpSocketImpl " << this << " connected to " |