src/node/tcp-socket.h
author Tom Henderson <tomh@tomh.org>
Fri, 30 May 2008 10:36:02 -0700
changeset 3183 fc3b2e03e61e
parent 3136 a59b9ce95b6b
child 3269 448134601b03
permissions -rw-r--r--
more doxygen
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     2
/*
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     3
 * Copyright (c) 2006 Georgia Tech Research Corporation
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     4
 *               2007 INRIA
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     5
 *
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
     9
 *
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    13
 * GNU General Public License for more details.
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    14
 *
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    18
 *
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    19
 * Authors: George F. Riley<riley@ece.gatech.edu>
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    20
 *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    21
 */
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    22
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    23
#ifndef __TCP_SOCKET_H__
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    24
#define __TCP_SOCKET_H__
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    25
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    26
#include "socket.h"
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    27
#include "ns3/traced-callback.h"
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    28
#include "ns3/callback.h"
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    29
#include "ns3/ptr.h"
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    30
#include "ns3/object.h"
3136
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    31
#include "ns3/nstime.h"
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    32
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    33
namespace ns3 {
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    34
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    35
class Node;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    36
class Packet;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    37
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    38
/**
3183
fc3b2e03e61e more doxygen
Tom Henderson <tomh@tomh.org>
parents: 3136
diff changeset
    39
 * \ingroup socket
fc3b2e03e61e more doxygen
Tom Henderson <tomh@tomh.org>
parents: 3136
diff changeset
    40
 *
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    41
 * \brief (abstract) base class of all TcpSockets
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    42
 *
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    43
 * This class exists solely for hosting TcpSocket attributes that can
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    44
 * be reused across different implementations.
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    45
 */
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    46
class TcpSocket : public Socket
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    47
{
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    48
public:
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    49
 static TypeId GetTypeId (void);
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    50
 
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    51
  TcpSocket (void);
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    52
  virtual ~TcpSocket (void);
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    53
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    54
  virtual enum Socket::SocketErrno GetErrno (void) const = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    55
  virtual Ptr<Node> GetNode (void) const = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    56
  virtual int Bind () = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    57
  virtual int Close (void) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    58
  virtual int ShutdownSend (void) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    59
  virtual int ShutdownRecv (void) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    60
  virtual int Connect (const Address &address) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    61
  virtual int Send (Ptr<Packet> p) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    62
  virtual uint32_t GetTxAvailable (void) const = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    63
  virtual int SendTo (Ptr<Packet> p, const Address &address) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    64
  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    65
  virtual uint32_t GetRxAvailable (void) const = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    66
3136
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    67
private:
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    68
  // Indirect the attribute setting and getting through private virtual methods
3136
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    69
  virtual void SetSndBufSize (uint32_t size) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    70
  virtual uint32_t GetSndBufSize (void) const = 0;
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    71
  virtual void SetRcvBufSize (uint32_t size) = 0;
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    72
  virtual uint32_t GetRcvBufSize (void) const = 0;
3136
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    73
  virtual void SetSegSize (uint32_t size) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    74
  virtual uint32_t GetSegSize (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    75
  virtual void SetAdvWin (uint32_t window) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    76
  virtual uint32_t GetAdvWin (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    77
  virtual void SetSSThresh (uint32_t threshold) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    78
  virtual uint32_t GetSSThresh (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    79
  virtual void SetInitialCwnd (uint32_t count) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    80
  virtual uint32_t GetInitialCwnd (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    81
  virtual void SetConnTimeout (Time timeout) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    82
  virtual Time GetConnTimeout (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    83
  virtual void SetConnCount (uint32_t count) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    84
  virtual uint32_t GetConnCount (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    85
  virtual void SetDelAckTimeout (Time timeout) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    86
  virtual Time GetDelAckTimeout (void) const = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    87
  virtual void SetDelAckMaxCount (uint32_t count) = 0;
a59b9ce95b6b Move Tcp attributes from factory to TcpSocket
Tom Henderson <tomh@tomh.org>
parents: 3135
diff changeset
    88
  virtual uint32_t GetDelAckMaxCount (void) const = 0;
3135
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    89
  
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    90
};
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    91
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    92
} //namespace ns3
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    93
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    94
#endif /* TCP_SOCKET_H */
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    95
2ae291cb16ae Add missing files
Tom Henderson <tomh@tomh.org>
parents:
diff changeset
    96