diff --git a/src/node/tcp-socket.cc b/src/node/tcp-socket.cc new file mode 100644 index 000000000..3d3a83d67 --- /dev/null +++ b/src/node/tcp-socket.cc @@ -0,0 +1,72 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2007 INRIA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Mathieu Lacage + */ + +#include "ns3/object.h" +#include "ns3/log.h" +#include "ns3/uinteger.h" +#include "ns3/trace-source-accessor.h" +#include "tcp-socket.h" + +NS_LOG_COMPONENT_DEFINE ("TcpSocket"); + +namespace ns3 { + +NS_OBJECT_ENSURE_REGISTERED (TcpSocket); + +TypeId +TcpSocket::GetTypeId (void) +{ + static TypeId tid = TypeId ("ns3::TcpSocket") + .SetParent () +#if 0 + .AddAttribute ("RcvBufSize", + "TcpSocket maximum receive buffer size (bytes)", + UintegerValue (0xffffffffl), + MakeUintegerAccessor (&TcpSocket::GetRcvBufSize, + &TcpSocket::SetRcvBufSize), + MakeUintegerChecker ()) + .AddAttribute ("IpTtl", + "socket-specific TTL for unicast IP packets (if non-zero)", + UintegerValue (0), + MakeUintegerAccessor (&TcpSocket::GetIpTtl, + &TcpSocket::SetIpTtl), + MakeUintegerChecker ()) + .AddAttribute ("IpMulticastTtl", + "socket-specific TTL for multicast IP packets (if non-zero)", + UintegerValue (0), + MakeUintegerAccessor (&TcpSocket::GetIpMulticastTtl, + &TcpSocket::SetIpMulticastTtl), + MakeUintegerChecker ()) +#endif + ; + return tid; +} + +TcpSocket::TcpSocket () +{ + NS_LOG_FUNCTION_NOARGS (); +} + +TcpSocket::~TcpSocket () +{ + NS_LOG_FUNCTION_NOARGS (); +} + +}; // namespace ns3 diff --git a/src/node/tcp-socket.h b/src/node/tcp-socket.h new file mode 100644 index 000000000..bc48ebf93 --- /dev/null +++ b/src/node/tcp-socket.h @@ -0,0 +1,81 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2006 Georgia Tech Research Corporation + * 2007 INRIA + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Authors: George F. Riley + * Mathieu Lacage + */ + +#ifndef __TCP_SOCKET_H__ +#define __TCP_SOCKET_H__ + +#include "socket.h" +#include "ns3/traced-callback.h" +#include "ns3/callback.h" +#include "ns3/ptr.h" +#include "ns3/object.h" + +namespace ns3 { + +class Node; +class Packet; + +/** + * \brief (abstract) base class of all TcpSockets + * + * This class exists solely for hosting TcpSocket attributes that can + * be reused across different implementations. + */ +class TcpSocket : public Socket +{ +public: + static TypeId GetTypeId (void); + + TcpSocket (void); + virtual ~TcpSocket (void); + + virtual enum Socket::SocketErrno GetErrno (void) const = 0; + virtual Ptr GetNode (void) const = 0; + virtual int Bind () = 0; + virtual int Close (void) = 0; + virtual int ShutdownSend (void) = 0; + virtual int ShutdownRecv (void) = 0; + virtual int Connect (const Address &address) = 0; + virtual int Send (Ptr p) = 0; + virtual uint32_t GetTxAvailable (void) const = 0; + virtual int SendTo (Ptr p, const Address &address) = 0; + virtual Ptr Recv (uint32_t maxSize, uint32_t flags) = 0; + virtual uint32_t GetRxAvailable (void) const = 0; + +public: +#if 0 + // Indirect the attribute setting and getting through private virtual methods + virtual void SetRcvBufSize (uint32_t size) = 0; + virtual uint32_t GetRcvBufSize (void) const = 0; + virtual void SetIpTtl (uint32_t ipTtl) = 0; + virtual uint32_t GetIpTtl (void) const = 0; + virtual void SetIpMulticastTtl (uint32_t ipTtl) = 0; + virtual uint32_t GetIpMulticastTtl (void) const = 0; +#endif + +}; + +} //namespace ns3 + +#endif /* TCP_SOCKET_H */ + +