src/node/inet-socket-address.cc
author tjkopena@cs.drexel.edu
Fri, 29 Aug 2008 13:22:09 -0400
changeset 3570 44b0bc6817c6
parent 2834 1aab57845b07
permissions -rw-r--r--
Stats module and example merged in.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1297
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     2
/*
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     3
 * Copyright (c) 2005 INRIA
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     4
 *
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     7
 * published by the Free Software Foundation;
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     8
 *
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    12
 * GNU General Public License for more details.
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    13
 *
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    14
 * You should have received a copy of the GNU General Public License
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    15
 * along with this program; if not, write to the Free Software
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    17
 *
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    19
 */
e30ce531faf3 Added GPL and emacs modeline to inet-socket-address.h/cc
Raj Bhattacharjea <raj.b@gatech.edu>
parents: 1270
diff changeset
    20
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    21
#include "inet-socket-address.h"
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "ns3/assert.h"
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
namespace ns3 {
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    26
InetSocketAddress::InetSocketAddress (Ipv4Address ipv4, uint16_t port)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
  : m_ipv4 (ipv4),
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
    m_port (port)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
{}
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    30
InetSocketAddress::InetSocketAddress (Ipv4Address ipv4)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
  : m_ipv4 (ipv4),
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
    m_port (0)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
{}
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    34
InetSocketAddress::InetSocketAddress (const char *ipv4, uint16_t port)
1165
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    35
  : m_ipv4 (Ipv4Address (ipv4)),
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    36
    m_port (port)
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    37
{}
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    38
InetSocketAddress::InetSocketAddress (const char * ipv4)
1165
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    39
  : m_ipv4 (Ipv4Address (ipv4)),
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    40
    m_port (0)
618104cbd20d add extra conveniance constructors and use them
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1164
diff changeset
    41
{}
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    42
InetSocketAddress::InetSocketAddress (uint16_t port)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  : m_ipv4 (Ipv4Address::GetAny ()),
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
    m_port (port)
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
{}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
uint16_t 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    47
InetSocketAddress::GetPort (void) const
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
  return m_port;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
Ipv4Address 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    52
InetSocketAddress::GetIpv4 (void) const
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
  return m_ipv4;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
void 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    58
InetSocketAddress::SetPort (uint16_t port)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
  m_port = port;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
void 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    63
InetSocketAddress::SetIpv4 (Ipv4Address address)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
  m_ipv4 = address;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
1172
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    68
bool 
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    69
InetSocketAddress::IsMatchingType (const Address &address)
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    70
{
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    71
  return address.CheckCompatible (GetType (), 6);
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    72
}
2e5b994330c7 add InetSocketAddress::IsMatchingType and use it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1171
diff changeset
    73
1204
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    74
InetSocketAddress::operator Address () const
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    75
{
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    76
  return ConvertTo ();
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    77
}
d40723d53e3d InetSocketAddress: replace explicit conversion to implicit conversion
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    78
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
Address 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    80
InetSocketAddress::ConvertTo (void) const
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  uint8_t buf[6];
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
  m_ipv4.Serialize (buf);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  buf[4] = m_port & 0xff;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  buf[5] = (m_port >> 8) & 0xff;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
  return Address (GetType (), buf, 6);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
}
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    88
InetSocketAddress 
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    89
InetSocketAddress::ConvertFrom (const Address &address)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
{
1159
eef87ec51ad7 improve type checking
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1158
diff changeset
    91
  NS_ASSERT (address.CheckCompatible (GetType (), 6));
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
  uint8_t buf[6];
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
  address.CopyTo (buf);
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
  Ipv4Address ipv4 = Ipv4Address::Deserialize (buf);
1268
0cd947bd1419 small bug in InetSocketAddress deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1172
diff changeset
    95
  uint16_t port = buf[4] | (buf[5] << 8);
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    96
  return InetSocketAddress (ipv4, port);
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
uint8_t 
1171
335886fe4ddd InetAddress -> InetSocketAddress
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1165
diff changeset
    99
InetSocketAddress::GetType (void)
1158
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
{
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  static uint8_t type = Address::Register ();
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
  return type;
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
}
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
12d68dff3353 new address types
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
} // namespace ns3