View | Details | Raw Unified | Return to bug 424
Collapse All | Expand All

(-)a/src/applications/packet-sink/packet-sink.cc (-3 / +24 lines)
 Lines 62-67   PacketSink::PacketSink () Link Here 
62
{
62
{
63
  NS_LOG_FUNCTION (this);
63
  NS_LOG_FUNCTION (this);
64
  m_socket = 0;
64
  m_socket = 0;
65
  m_totalRx = 0;
65
}
66
}
66
67
67
PacketSink::~PacketSink()
68
PacketSink::~PacketSink()
 Lines 69-76   PacketSink::~PacketSink() Link Here 
69
  NS_LOG_FUNCTION (this);
70
  NS_LOG_FUNCTION (this);
70
}
71
}
71
72
72
void
73
uint32_t PacketSink::GetTotalRx() const
73
PacketSink::DoDispose (void)
74
{
75
  return m_totalRx;
76
}
77
  
78
void PacketSink::DoDispose (void)
74
{
79
{
75
  NS_LOG_FUNCTION (this);
80
  NS_LOG_FUNCTION (this);
76
  m_socket = 0;
81
  m_socket = 0;
 Lines 109-114   void PacketSink::StartApplication() / Link Here 
109
  m_socket->SetAcceptCallback (
114
  m_socket->SetAcceptCallback (
110
            MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
115
            MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
111
            MakeCallback(&PacketSink::HandleAccept, this));
116
            MakeCallback(&PacketSink::HandleAccept, this));
117
  m_socket->SetCloseCallbacks (
118
            MakeCallback(&PacketSink::HandlePeerClose, this),
119
            MakeCallback(&PacketSink::HandlePeerError, this));
112
}
120
}
113
121
114
void PacketSink::StopApplication()     // Called at time specified by Stop
122
void PacketSink::StopApplication()     // Called at time specified by Stop
 Lines 141-152   void PacketSink::HandleRead (Ptr<Socket> Link Here 
141
      if (InetSocketAddress::IsMatchingType (from))
149
      if (InetSocketAddress::IsMatchingType (from))
142
        {
150
        {
143
          InetSocketAddress address = InetSocketAddress::ConvertFrom (from);
151
          InetSocketAddress address = InetSocketAddress::ConvertFrom (from);
152
          m_totalRx += packet->GetSize();
144
          NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << 
153
          NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << 
145
            address.GetIpv4() << " [" << address << "]");
154
                       address.GetIpv4() << " [" << address << "]" 
155
                       << " total Rx " << m_totalRx);
146
        }    
156
        }    
147
      m_rxTrace (packet, from);
157
      m_rxTrace (packet, from);
148
    }
158
    }
149
}
159
}
160
161
void PacketSink::HandlePeerClose (Ptr<Socket> socket)
162
{
163
  NS_LOG_INFO("PktSink, peerClose");
164
}
165
 
166
void PacketSink::HandlePeerError (Ptr<Socket> socket)
167
{
168
  NS_LOG_INFO("PktSink, peerError");
169
}
170
 
150
171
151
void PacketSink::HandleAccept (Ptr<Socket> s, const Address& from)
172
void PacketSink::HandleAccept (Ptr<Socket> s, const Address& from)
152
{
173
{
(-)a/src/applications/packet-sink/packet-sink.h (-2 / +8 lines)
 Lines 73-78   public: Link Here 
73
73
74
  virtual ~PacketSink ();
74
  virtual ~PacketSink ();
75
75
76
  // Return the total bytes received in this sink app
77
  uint32_t GetTotalRx() const;
78
  
76
protected:
79
protected:
77
  virtual void DoDispose (void);
80
  virtual void DoDispose (void);
78
private:
81
private:
 Lines 80-94   private: Link Here 
80
  virtual void StartApplication (void);    // Called at time specified by Start
83
  virtual void StartApplication (void);    // Called at time specified by Start
81
  virtual void StopApplication (void);     // Called at time specified by Stop
84
  virtual void StopApplication (void);     // Called at time specified by Stop
82
85
83
  void HandleRead (Ptr<Socket> socket);
86
  void HandleRead (Ptr<Socket>);
84
  void HandleAccept (Ptr<Socket>, const Address& from);
87
  void HandleAccept (Ptr<Socket>, const Address& from);
85
88
  void HandlePeerClose(Ptr<Socket>);
89
  void HandlePeerError(Ptr<Socket>);
90
  
86
  // In the case of TCP, each socket accept returns a new socket, so the 
91
  // In the case of TCP, each socket accept returns a new socket, so the 
87
  // listening socket is stored seperately from the accepted sockets
92
  // listening socket is stored seperately from the accepted sockets
88
  Ptr<Socket>     m_socket;       // Listening socket
93
  Ptr<Socket>     m_socket;       // Listening socket
89
  std::list<Ptr<Socket> > m_socketList; //the accepted sockets
94
  std::list<Ptr<Socket> > m_socketList; //the accepted sockets
90
95
91
  Address         m_local;        // Local address to bind to
96
  Address         m_local;        // Local address to bind to
97
  uint32_t        m_totalRx;      // Total bytes received
92
  TypeId          m_tid;          // Protocol TypeId
98
  TypeId          m_tid;          // Protocol TypeId
93
  TracedCallback<Ptr<const Packet>, const Address &> m_rxTrace;
99
  TracedCallback<Ptr<const Packet>, const Address &> m_rxTrace;
94
  
100
  
(-)a/src/internet-stack/tcp-socket-impl.cc (-7 / +59 lines)
 Lines 198-203   TcpSocketImpl::~TcpSocketImpl () Link Here 
198
  m_tcp = 0;
198
  m_tcp = 0;
199
  delete m_pendingData; //prevents leak
199
  delete m_pendingData; //prevents leak
200
  m_pendingData = 0;
200
  m_pendingData = 0;
201
  CancelAllTimers();
201
}
202
}
202
203
203
void
204
void
 Lines 329-342   TcpSocketImpl::Close (void) Link Here 
329
TcpSocketImpl::Close (void)
330
TcpSocketImpl::Close (void)
330
{
331
{
331
  NS_LOG_FUNCTION_NOARGS ();
332
  NS_LOG_FUNCTION_NOARGS ();
332
  if (m_pendingData && m_pendingData->Size() != 0)
333
  // First we check to see if there is any unread rx data
334
  // Bug number 426 claims we should send reset in this case.
335
  if (!m_bufferedData.empty())
336
    {
337
      SendRST();
338
      return 0;
339
    }
340
341
  uint32_t remainingData = 0;
342
  if (m_pendingData)
343
    {
344
      remainingData = m_pendingData->SizeFromSeq (m_firstPendingSequence,
345
                                                  m_nextTxSequence);
346
    }
347
  
348
  if (remainingData != 0)
333
    { // App close with pending data must wait until all data transmitted
349
    { // App close with pending data must wait until all data transmitted
334
      m_closeOnEmpty = true;
350
      m_closeOnEmpty = true;
335
      NS_LOG_LOGIC("Socket " << this << 
351
      NS_LOG_LOGIC("Socket " << this << 
336
                   " deferring close, state " << m_state);
352
                   " deferring close, state " << m_state);
337
      return 0;
353
      return 0;
338
    }
354
    }
339
340
  Actions_t action  = ProcessEvent (APP_CLOSE);
355
  Actions_t action  = ProcessEvent (APP_CLOSE);
341
  ProcessAction (action);
356
  ProcessAction (action);
342
  return 0;
357
  return 0;
 Lines 460-468   int TcpSocketImpl::DoSendTo (Ptr<Packet> Link Here 
460
      m_errno = ERROR_SHUTDOWN;
475
      m_errno = ERROR_SHUTDOWN;
461
      return -1;
476
      return -1;
462
    }
477
    }
478
  // Get the size before sending to tcp, as the sent callback cares
479
  // about payload sent, not with headers
480
  uint32_t sentSize = p->GetSize();
463
  m_tcp->Send (p, m_endPoint->GetLocalAddress (), ipv4,
481
  m_tcp->Send (p, m_endPoint->GetLocalAddress (), ipv4,
464
                  m_endPoint->GetLocalPort (), port);
482
                  m_endPoint->GetLocalPort (), port);
465
  NotifyDataSent (p->GetSize ());
483
  NotifyDataSent (sentSize);
466
  return 0;
484
  return 0;
467
}
485
}
468
486
 Lines 638-643   TcpSocketImpl::ForwardUp (Ptr<Packet> pa Link Here 
638
  TcpHeader tcpHeader;
656
  TcpHeader tcpHeader;
639
  packet->RemoveHeader (tcpHeader);
657
  packet->RemoveHeader (tcpHeader);
640
658
659
  if (tcpHeader.GetFlags () & TcpHeader::RST)
660
    { // Got an RST, just shut everything down
661
      NotifyErrorClose();
662
      CancelAllTimers();
663
      m_endPoint->SetDestroyCallback(MakeNullCallback<void>());
664
      m_tcp->DeAllocate (m_endPoint);
665
      m_endPoint = 0;
666
      return;
667
    }
668
      
641
  if (tcpHeader.GetFlags () & TcpHeader::ACK)
669
  if (tcpHeader.GetFlags () & TcpHeader::ACK)
642
    {
670
    {
643
      Time m = m_rtt->AckSeq (tcpHeader.GetAckNumber () );
671
      Time m = m_rtt->AckSeq (tcpHeader.GetAckNumber () );
 Lines 677-682   Actions_t TcpSocketImpl::ProcessEvent (E Link Here 
677
    {
705
    {
678
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " sending RST from state "
706
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " sending RST from state "
679
              << saveState << " event " << e);
707
              << saveState << " event " << e);
708
      SendRST();
709
      return NO_ACT;
680
    }
710
    }
681
  bool needCloseNotify = (stateAction.state == CLOSED && m_state != CLOSED 
711
  bool needCloseNotify = (stateAction.state == CLOSED && m_state != CLOSED 
682
    && e != TIMEOUT);
712
    && e != TIMEOUT);
 Lines 692-698   Actions_t TcpSocketImpl::ProcessEvent (E Link Here 
692
    // the handshaking
722
    // the handshaking
693
    {
723
    {
694
      Simulator::ScheduleNow(&TcpSocketImpl::ConnectionSucceeded, this);
724
      Simulator::ScheduleNow(&TcpSocketImpl::ConnectionSucceeded, this);
695
      //NotifyConnectionSucceeded ();
696
      m_connected = true;
725
      m_connected = true;
697
      m_endPoint->SetPeer (m_remoteAddress, m_remotePort);
726
      m_endPoint->SetPeer (m_remoteAddress, m_remotePort);
698
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " Connected!");
727
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " Connected!");
 Lines 708-713   Actions_t TcpSocketImpl::ProcessEvent (E Link Here 
708
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " transition to CLOSED from " 
737
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " transition to CLOSED from " 
709
               << m_state << " event " << e << " closeNot " << m_closeNotified
738
               << m_state << " event " << e << " closeNot " << m_closeNotified
710
               << " action " << stateAction.action);
739
               << " action " << stateAction.action);
740
      NotifyNormalClose();
711
      m_closeNotified = true;
741
      m_closeNotified = true;
712
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " calling Closed from PE"
742
      NS_LOG_LOGIC ("TcpSocketImpl " << this << " calling Closed from PE"
713
              << " origState " << saveState
743
              << " origState " << saveState
 Lines 732-737   Actions_t TcpSocketImpl::ProcessEvent (E Link Here 
732
      m_endPoint->SetDestroyCallback(MakeNullCallback<void>());
762
      m_endPoint->SetDestroyCallback(MakeNullCallback<void>());
733
      m_tcp->DeAllocate (m_endPoint);
763
      m_tcp->DeAllocate (m_endPoint);
734
      m_endPoint = 0;
764
      m_endPoint = 0;
765
      CancelAllTimers();
735
    }
766
    }
736
    
767
    
737
  return stateAction.action;
768
  return stateAction.action;
 Lines 776-781   void TcpSocketImpl::SendEmptyPacket (uin Link Here 
776
  }
807
  }
777
}
808
}
778
809
810
// This function closes the endpoint completely
811
void TcpSocketImpl::SendRST()
812
{
813
  SendEmptyPacket(TcpHeader::RST);
814
  NotifyErrorClose();
815
  CancelAllTimers();
816
  m_endPoint->SetDestroyCallback(MakeNullCallback<void>());
817
  m_tcp->DeAllocate (m_endPoint);
818
  m_endPoint = 0;
819
}
820
821
  
779
bool TcpSocketImpl::ProcessAction (Actions_t a)
822
bool TcpSocketImpl::ProcessAction (Actions_t a)
780
{ // These actions do not require a packet or any TCP Headers
823
{ // These actions do not require a packet or any TCP Headers
781
  NS_LOG_FUNCTION (this << a);
824
  NS_LOG_FUNCTION (this << a);
 Lines 976-981   bool TcpSocketImpl::ProcessPacketAction Link Here 
976
      break;
1019
      break;
977
    case PEER_CLOSE:
1020
    case PEER_CLOSE:
978
    {
1021
    {
1022
      NS_LOG_LOGIC("Got Peer Close");
979
      // First we have to be sure the FIN packet was not received
1023
      // First we have to be sure the FIN packet was not received
980
      // out of sequence.  If so, note pending close and process
1024
      // out of sequence.  If so, note pending close and process
981
      // new sequence rx
1025
      // new sequence rx
 Lines 1002-1007   bool TcpSocketImpl::ProcessPacketAction Link Here 
1002
        {
1046
        {
1003
          NS_LOG_LOGIC ("TCP " << this 
1047
          NS_LOG_LOGIC ("TCP " << this 
1004
              << " calling AppCloseRequest");
1048
              << " calling AppCloseRequest");
1049
          NotifyNormalClose();
1005
          m_closeRequestNotified = true;
1050
          m_closeRequestNotified = true;
1006
        }
1051
        }
1007
      NS_LOG_LOGIC ("TcpSocketImpl " << this 
1052
      NS_LOG_LOGIC ("TcpSocketImpl " << this 
 Lines 1132-1139   bool TcpSocketImpl::SendPendingData (boo Link Here 
1132
                         m_endPoint->GetLocalAddress (),
1177
                         m_endPoint->GetLocalAddress (),
1133
                         m_remoteAddress);
1178
                         m_remoteAddress);
1134
      m_rtt->SentSeq(m_nextTxSequence, sz);       // notify the RTT
1179
      m_rtt->SentSeq(m_nextTxSequence, sz);       // notify the RTT
1135
      // Notify the application
1180
      // Notify the application of the data being sent
1136
      Simulator::ScheduleNow(&TcpSocketImpl::NotifyDataSent, this, p->GetSize ());
1181
      Simulator::ScheduleNow(&TcpSocketImpl::NotifyDataSent, this, sz);
1137
      nPacketsSent++;                             // Count sent this loop
1182
      nPacketsSent++;                             // Count sent this loop
1138
      m_nextTxSequence += sz;                     // Advance next tx sequence
1183
      m_nextTxSequence += sz;                     // Advance next tx sequence
1139
      // Note the high water mark
1184
      // Note the high water mark
 Lines 1406-1412   void TcpSocketImpl::CommonNewAck (Sequen Link Here 
1406
  // and MUST be called by any subclass, from the NewAck function
1451
  // and MUST be called by any subclass, from the NewAck function
1407
  // Always cancel any pending re-tx timer on new acknowledgement
1452
  // Always cancel any pending re-tx timer on new acknowledgement
1408
  NS_LOG_FUNCTION (this << ack << skipTimer); 
1453
  NS_LOG_FUNCTION (this << ack << skipTimer); 
1409
  //DEBUG(1,(cout << "TCP " << this << "Cancelling retx timer " << endl));
1410
  if (!skipTimer)
1454
  if (!skipTimer)
1411
    {
1455
    {
1412
      NS_LOG_LOGIC (this<<" Cancelled ReTxTimeout event which was set to expire at "
1456
      NS_LOG_LOGIC (this<<" Cancelled ReTxTimeout event which was set to expire at "
 Lines 1465-1470   void TcpSocketImpl::CommonNewAck (Sequen Link Here 
1465
  SendPendingData (m_connected);
1509
  SendPendingData (m_connected);
1466
}
1510
}
1467
1511
1512
void TcpSocketImpl::CancelAllTimers()
1513
{
1514
  m_retxEvent.Cancel ();
1515
  m_persistEvent.Cancel ();
1516
  m_delAckEvent.Cancel();
1517
  m_lastAckEvent.Cancel ();
1518
}
1519
1468
Ptr<TcpSocketImpl> TcpSocketImpl::Copy ()
1520
Ptr<TcpSocketImpl> TcpSocketImpl::Copy ()
1469
{
1521
{
1470
  return CopyObject<TcpSocketImpl> (this);
1522
  return CopyObject<TcpSocketImpl> (this);
(-)a/src/internet-stack/tcp-socket-impl.h (-6 / +8 lines)
 Lines 105-110   private: Link Here 
105
  int DoSendTo (Ptr<Packet> p, const Address &daddr);
105
  int DoSendTo (Ptr<Packet> p, const Address &daddr);
106
  int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport);
106
  int DoSendTo (Ptr<Packet> p, Ipv4Address daddr, uint16_t dport);
107
  void SendEmptyPacket(uint8_t flags);
107
  void SendEmptyPacket(uint8_t flags);
108
  void SendRST();
109
  
108
  //methods for state
110
  //methods for state
109
  bool ProcessAction (Actions_t a);
111
  bool ProcessAction (Actions_t a);
110
  bool ProcessAction (Actions_t a, const TcpHeader& tcpHeader,
112
  bool ProcessAction (Actions_t a, const TcpHeader& tcpHeader,
 Lines 130-147   private: Link Here 
130
  // Manage data tx/rx
132
  // Manage data tx/rx
131
  void NewRx (Ptr<Packet>, const TcpHeader&, const Address&);
133
  void NewRx (Ptr<Packet>, const TcpHeader&, const Address&);
132
  void RxBufFinishInsert (SequenceNumber);
134
  void RxBufFinishInsert (SequenceNumber);
133
  // XXX This should be virtual and overridden
134
  Ptr<TcpSocketImpl> Copy ();
135
  Ptr<TcpSocketImpl> Copy ();
135
  void NewAck (SequenceNumber seq); 
136
  virtual void NewAck (SequenceNumber seq); 
136
  // XXX This should be virtual and overridden
137
  virtual void DupAck (const TcpHeader& t, uint32_t count); 
137
  void DupAck (const TcpHeader& t, uint32_t count); 
138
  virtual void ReTxTimeout ();
138
  void ReTxTimeout ();
139
  void DelAckTimeout ();
139
  void DelAckTimeout ();
140
  void LastAckTimeout ();
140
  void LastAckTimeout ();
141
  void PersistTimeout ();
141
  void PersistTimeout ();
142
  void Retransmit ();
142
  void Retransmit ();
143
  void CommonNewAck (SequenceNumber seq, bool skipTimer = false);
143
  void CommonNewAck (SequenceNumber seq, bool skipTimer = false);
144
144
  // All timers are cancelled when the endpoint is deleted, to insure
145
  // we don't have additional activity
146
  void CancelAllTimers();
145
  // attribute related
147
  // attribute related
146
  virtual void SetSndBufSize (uint32_t size);
148
  virtual void SetSndBufSize (uint32_t size);
147
  virtual uint32_t GetSndBufSize (void) const;
149
  virtual uint32_t GetSndBufSize (void) const;
(-)a/src/node/socket.cc (+30 lines)
 Lines 62-67   Socket::SetConnectCallback ( Link Here 
62
}
62
}
63
63
64
void 
64
void 
65
Socket::SetCloseCallbacks (
66
  Callback<void, Ptr<Socket> > normalClose,
67
  Callback<void, Ptr<Socket> > errorClose)
68
{
69
  NS_LOG_FUNCTION_NOARGS ();
70
  m_normalClose = normalClose;
71
  m_errorClose = errorClose;
72
}
73
74
void 
65
Socket::SetAcceptCallback (
75
Socket::SetAcceptCallback (
66
  Callback<bool, Ptr<Socket>, const Address &> connectionRequest,
76
  Callback<bool, Ptr<Socket>, const Address &> connectionRequest,
67
  Callback<void, Ptr<Socket>, const Address&> newConnectionCreated)
77
  Callback<void, Ptr<Socket>, const Address&> newConnectionCreated)
 Lines 191-196   Socket::NotifyConnectionFailed (void) Link Here 
191
  if (!m_connectionFailed.IsNull ())
201
  if (!m_connectionFailed.IsNull ())
192
    {
202
    {
193
      m_connectionFailed (this);
203
      m_connectionFailed (this);
204
    }
205
}
206
207
void 
208
Socket::NotifyNormalClose (void)
209
{
210
  NS_LOG_FUNCTION_NOARGS ();
211
  if (!m_normalClose.IsNull ())
212
    {
213
      m_normalClose (this);
214
    }
215
}
216
217
void 
218
Socket::NotifyErrorClose (void)
219
{
220
  NS_LOG_FUNCTION_NOARGS ();
221
  if (!m_errorClose.IsNull ())
222
    {
223
      m_errorClose (this);
194
    }
224
    }
195
}
225
}
196
226
(-)a/src/node/socket.h (-3 / +26 lines)
 Lines 103-108   public: Link Here 
103
   */
103
   */
104
  virtual Ptr<Node> GetNode (void) const = 0;
104
  virtual Ptr<Node> GetNode (void) const = 0;
105
  /**
105
  /**
106
   * \brief Specify callbacks to allow the caller to determine if
107
   * the connection succeeds of fails.
106
   * \param connectionSucceeded this callback is invoked when the 
108
   * \param connectionSucceeded this callback is invoked when the 
107
   *        connection request initiated by the user is successfully 
109
   *        connection request initiated by the user is successfully 
108
   *        completed. The callback is passed  back a pointer to 
110
   *        completed. The callback is passed  back a pointer to 
 Lines 114-119   public: Link Here 
114
   */
116
   */
115
  void SetConnectCallback (Callback<void, Ptr<Socket> > connectionSucceeded,
117
  void SetConnectCallback (Callback<void, Ptr<Socket> > connectionSucceeded,
116
                           Callback<void,  Ptr<Socket> > connectionFailed);
118
                           Callback<void,  Ptr<Socket> > connectionFailed);
119
 /**
120
  * \brief Detect socket recv() events such as graceful shutdown or error.
121
  * 
122
  * For connection-oriented sockets, the first callback is used to signal
123
  * that the remote side has gracefully shut down the connection, and the
124
  * second callback denotes an error corresponding to cases in which
125
  * a traditional recv() socket call might return -1 (error), such 
126
  * as a connection reset.  For datagram sockets, these callbacks may
127
  * never be invoked.
128
  * 
129
  * \param normalClose this callback is invoked when the 
130
  *        peer closes the connection gracefully
131
  * \param errorClose this callback is invoked when the 
132
  *        connection closes abnormally
133
  */
134
  void SetCloseCallbacks (Callback<void, Ptr<Socket> > normalClose,
135
                          Callback<void, Ptr<Socket> > errorClose);
117
  /**
136
  /**
118
   * \brief Accept connection requests from remote hosts
137
   * \brief Accept connection requests from remote hosts
119
   * \param connectionRequest Callback for connection request from peer. 
138
   * \param connectionRequest Callback for connection request from peer. 
 Lines 496-501   protected: Link Here 
496
protected:
515
protected:
497
  void NotifyConnectionSucceeded (void);
516
  void NotifyConnectionSucceeded (void);
498
  void NotifyConnectionFailed (void);
517
  void NotifyConnectionFailed (void);
518
  void NotifyNormalClose(void);
519
  void NotifyErrorClose(void);
499
  bool NotifyConnectionRequest (const Address &from);
520
  bool NotifyConnectionRequest (const Address &from);
500
  void NotifyNewConnectionCreated (Ptr<Socket> socket, const Address &from);
521
  void NotifyNewConnectionCreated (Ptr<Socket> socket, const Address &from);
501
  void NotifyDataSent (uint32_t size);
522
  void NotifyDataSent (uint32_t size);
 Lines 503-515   protected: Link Here 
503
  void NotifyDataRecv (void);
524
  void NotifyDataRecv (void);
504
  virtual void DoDispose (void);
525
  virtual void DoDispose (void);
505
private:
526
private:
506
  Callback<void, Ptr<Socket> >   m_connectionSucceeded;
527
  Callback<void, Ptr<Socket> >                   m_connectionSucceeded;
507
  Callback<void, Ptr<Socket> >   m_connectionFailed;
528
  Callback<void, Ptr<Socket> >                   m_connectionFailed;
529
  Callback<void, Ptr<Socket> >                   m_normalClose;
530
  Callback<void, Ptr<Socket> >                   m_errorClose;
508
  Callback<bool, Ptr<Socket>, const Address &>   m_connectionRequest;
531
  Callback<bool, Ptr<Socket>, const Address &>   m_connectionRequest;
509
  Callback<void, Ptr<Socket>, const Address&>    m_newConnectionCreated;
532
  Callback<void, Ptr<Socket>, const Address&>    m_newConnectionCreated;
510
  Callback<void, Ptr<Socket>, uint32_t>          m_dataSent;
533
  Callback<void, Ptr<Socket>, uint32_t>          m_dataSent;
511
  Callback<void, Ptr<Socket>, uint32_t >         m_sendCb;
534
  Callback<void, Ptr<Socket>, uint32_t >         m_sendCb;
512
  Callback<void, Ptr<Socket> > m_receivedData;
535
  Callback<void, Ptr<Socket> >                   m_receivedData;
513
536
514
};
537
};
515
538

Return to bug 424