src/node/datagram-socket.h
author Raj Bhattacharjea <raj.b@gatech.edu>
Thu, 22 Mar 2007 12:16:10 -0400
changeset 360 7bffd987426c
parent 347 874c95c66c28
child 405 602f755298cf
permissions -rw-r--r--
Fixed major memory bug and docs in RandomVariable
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
347
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * Copyright (c) 2007 INRIA
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 * All rights reserved.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 * GNU General Public License for more details.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
 *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
 */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
#ifndef UDP_SOCKET_H
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
#define UDP_SOCKET_H
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
#include <stdint.h>
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
#include "ns3/callback.h"
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
#include "ipv4-address.h"
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
namespace ns3 {
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
class UdpEndPoint;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    31
class Node;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
class Packet;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
class Udp;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
/**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
 * Before any data is sent, the socket must be bound with
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
 * one of the Bind methods.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
 * If none of these Bind methods are called prior to
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    39
 * one of the ::Send methods, the socket is implicitely
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    40
 * bound to a random port and to all interfaces.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
 */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
class DatagramSocket 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
{
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    44
public:
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    45
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
   * Create an unbound udp socket.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    47
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
  DatagramSocket (Node *node);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
  ~DatagramSocket ();
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
  /** 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
   * Allocate a free port number and
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
   * bind this socket to this port number on all
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
   * interfaces of this system.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
   *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
   * return 0 on success, -1 on failure.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    58
  int Bind (void);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
  /** 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
   * Allocate a free port number and
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    61
   * bind this socket to this port number on the
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
   * specified interface.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
   *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
   * return 0 on success, -1 on failure.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
  int Bind (Ipv4Address address);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    67
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    69
   * Bind this socket to this port number
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    70
   * on all interfaces of this system.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
   *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    72
   * return 0 on success, -1 on failure.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    73
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    74
  int Bind (uint16_t port); 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    75
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    76
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    77
   * Bind this socket to this port number
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    78
   * on the interface specified by address.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    79
   *
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    80
   * return 0 on success, -1 on failure.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    81
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    82
  int Bind (Ipv4Address address, uint16_t port);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    83
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    84
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    85
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    86
   * Set the default destination address and port
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    87
   * number for all packets outgoing from this socket.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    88
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    89
  void SetDefaultDestination (Ipv4Address daddr, uint16_t dport);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    90
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    91
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    92
   * Send dummy data to default destination
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    93
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    94
  void SendDummy (uint32_t size);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    95
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    96
   * Send dummy data to specified destination
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    97
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    98
  void SendDummyTo (uint32_t size, Ipv4Address daddr, uint16_t dport);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    99
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   100
  void Send (uint8_t const*buffer, uint32_t size);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   101
  void SendTo (uint8_t const*buffer, uint32_t size,
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   102
               Ipv4Address daddr, uint16_t dport);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   103
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   104
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   105
   * When a packet is received by this socket, it invokes the "dummy callback" which
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   106
   * forwards to the application the number of bytes received and from who they
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   107
   * were received.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   108
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   109
  void SetDummyRxCallback (Callback<void,DatagramSocket*,uint32_t,Ipv4Address,uint16_t> cb);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   110
  /**
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   111
   * When a packet is received by this socket, it invokes the "normal callback" which
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   112
   * forwards to the application the buffer of bytes received and from who they
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   113
   * were received. The application is responsible for copying that buffer if it wants 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   114
   * to keep track of it.
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   115
   */
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   116
  void SetRxCallback (Callback<void,DatagramSocket*,uint8_t const*,uint32_t,Ipv4Address,uint16_t> cb);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   117
  /** 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   118
   * Return pointer to node
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   119
   */ 
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   120
   Node* GetNode(void) const;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   121
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   122
private:
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   123
  friend class Udp;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   124
  // invoked by Udp class
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   125
  void ForwardUp (Packet &p, Ipv4Address saddr, uint16_t sport);
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   126
  Udp *GetUdp (void) const;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   127
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   128
  UdpEndPoint *m_endPoint;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   129
  Node *m_node;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   130
  Ipv4Address m_defaultAddress;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   131
  uint16_t m_defaultPort;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   132
  Callback<void,DatagramSocket*,uint32_t,Ipv4Address,uint16_t> m_dummyRxCallback;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   133
  Callback<void,DatagramSocket*,uint8_t const*,uint32_t,Ipv4Address,uint16_t> m_rxCallback;
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   134
};
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   135
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   136
}//namespace ns3
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   137
874c95c66c28 Rename UdpSocket to DatagramSocket
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
   138
#endif /* UDP_SOCKET_H */