src/applications/packet-sink/packet-sink.cc
changeset 3097 1b1661bbfa33
parent 2965 4b28e9740e3b
child 3100 70b98532fe5c
equal deleted inserted replaced
3000:bd2d3e32ef7b 3097:1b1661bbfa33
    86       m_socket->Bind (m_local);
    86       m_socket->Bind (m_local);
    87       m_socket->Listen (0);
    87       m_socket->Listen (0);
    88     }
    88     }
    89 
    89 
    90   m_socket->SetRecvCallback (MakeCallback(&PacketSink::Receive, this));
    90   m_socket->SetRecvCallback (MakeCallback(&PacketSink::Receive, this));
       
    91   m_socket->SetRecv_Callback (MakeCallback(&PacketSink::HandleRead, this));
    91   m_socket->SetAcceptCallback (
    92   m_socket->SetAcceptCallback (
    92             MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
    93             MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
    93             MakeNullCallback<void, Ptr<Socket>, const Address&> (),
    94             MakeNullCallback<void, Ptr<Socket>, const Address&> (),
    94             MakeCallback(&PacketSink::CloseConnection, this) );
    95             MakeCallback(&PacketSink::CloseConnection, this) );
    95 }
    96 }
    98 {
    99 {
    99   if (m_socket) 
   100   if (m_socket) 
   100     {
   101     {
   101       m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket>, 
   102       m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket>, 
   102         Ptr<Packet>, const Address &> ());
   103         Ptr<Packet>, const Address &> ());
       
   104     }
       
   105 }
       
   106 
       
   107 void PacketSink::HandleRead (Ptr<Socket> socket)
       
   108 {
       
   109   Ptr<Packet> packet;
       
   110   uint32_t maxSize = std::numeric_limits<uint32_t>::max();
       
   111   uint32_t flags = 0;  // no flags
       
   112   while (packet = socket->Recv (maxSize, flags))
       
   113     {
       
   114           NS_LOG_INFO ("Received " << packet->GetSize());
       
   115 #if 0
       
   116       // this code waits until we pass address as a Packet tag
       
   117       if (InetSocketAddress::IsMatchingType (from))
       
   118         {
       
   119           address = InetSocketAddress::ConvertFrom (from);
       
   120           NS_LOG_INFO ("Received " << packet->GetSize() << " bytes from " << 
       
   121             address.GetIpv4() << " [" << address << "]---'" << 
       
   122             packet->PeekData() << "'");
       
   123         }    
       
   124       m_rxTrace (packet, from);
       
   125 #endif
   103     }
   126     }
   104 }
   127 }
   105 
   128 
   106 // This LOG output inspired by the application on Joseph Kopena's wiki
   129 // This LOG output inspired by the application on Joseph Kopena's wiki
   107 void PacketSink::Receive(Ptr<Socket> socket, Ptr<Packet> packet,
   130 void PacketSink::Receive(Ptr<Socket> socket, Ptr<Packet> packet,