A Discrete-Event Network Simulator
API
three-gpp-http-server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Magister Solutions
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Budiarto Herman <budiarto.herman@magister.fi>
18  *
19  */
20 
21 #ifndef THREE_GPP_HTTP_SERVER_H
22 #define THREE_GPP_HTTP_SERVER_H
23 
24 #include "three-gpp-http-header.h"
25 
26 #include <ns3/address.h>
27 #include <ns3/application.h>
28 #include <ns3/event-id.h>
29 #include <ns3/nstime.h>
30 #include <ns3/ptr.h>
31 #include <ns3/simple-ref-count.h>
32 #include <ns3/traced-callback.h>
33 
34 #include <map>
35 #include <ostream>
36 
37 namespace ns3
38 {
39 
40 class Socket;
41 class Packet;
42 class ThreeGppHttpVariables;
43 class ThreeGppHttpServerTxBuffer;
44 
69 {
70  public:
83 
88  static TypeId GetTypeId();
89 
99  void SetMtuSize(uint32_t mtuSize);
100 
105  Ptr<Socket> GetSocket() const;
106 
108  enum State_t
109  {
112  STOPPED
113  };
114 
119  State_t GetState() const;
120 
125  std::string GetStateString() const;
126 
132  static std::string GetStateString(State_t state);
133 
139  typedef void (*ThreeGppHttpObjectCallback)(uint32_t size);
140 
148  Ptr<Socket> socket);
149 
150  protected:
151  // Inherited from Object base class
152  void DoDispose() override;
153 
154  // Inherited from Application base class
155  void StartApplication() override;
156  void StopApplication() override;
157 
158  private:
159  // SOCKET CALLBACK METHODS
160 
182  void NormalCloseCallback(Ptr<Socket> socket);
188  void ErrorCloseCallback(Ptr<Socket> socket);
198  void ReceivedDataCallback(Ptr<Socket> socket);
207  void SendCallback(Ptr<Socket> socket, uint32_t availableBufferSize);
208 
209  // TX-RELATED METHODS
210 
221  void ServeNewMainObject(Ptr<Socket> socket);
232  void ServeNewEmbeddedObject(Ptr<Socket> socket);
252  uint32_t ServeFromTxBuffer(Ptr<Socket> socket);
253 
258  void SwitchToState(State_t state);
259 
266 
267  // ATTRIBUTES
268 
274  uint16_t m_localPort;
276  uint32_t m_mtuSize;
277 
278  // TRACE SOURCES
279 
294 
295 }; // end of `class ThreeGppHttpServer`
296 
312 class ThreeGppHttpServerTxBuffer : public SimpleRefCount<ThreeGppHttpServerTxBuffer>
313 {
314  public:
317 
318  // SOCKET MANAGEMENT
319 
329  bool IsSocketAvailable(Ptr<Socket> socket) const;
330 
340  void AddSocket(Ptr<Socket> socket);
341 
358  void RemoveSocket(Ptr<Socket> socket);
359 
375  void CloseSocket(Ptr<Socket> socket);
376 
380  void CloseAllSockets();
381 
382  // BUFFER MANAGEMENT
383 
392  bool IsBufferEmpty(Ptr<Socket> socket) const;
393 
401  Time GetClientTs(Ptr<Socket> socket) const;
402 
415 
424  uint32_t GetBufferSize(Ptr<Socket> socket) const;
425 
437  bool HasTxedPartOfObject(Ptr<Socket> socket) const;
438 
455  void WriteNewObject(Ptr<Socket> socket,
457  uint32_t objectSize);
458 
475  void RecordNextServe(Ptr<Socket> socket, const EventId& eventId, const Time& clientTs);
476 
496  void DepleteBufferSize(Ptr<Socket> socket, uint32_t amount);
497 
506  void PrepareClose(Ptr<Socket> socket);
507 
508  private:
513  struct TxBuffer_t
514  {
535  uint32_t txBufferSize;
541  bool isClosing;
547  };
548 
550  std::map<Ptr<Socket>, TxBuffer_t> m_txBuffer;
551 
552 }; // end of `class ThreeGppHttpServerTxBuffer`
553 
554 } // namespace ns3
555 
556 #endif /* THREE_GPP_HTTP_SERVER_H */
a polymophic address class
Definition: address.h:101
The base class for all ns3 applications.
Definition: application.h:62
An identifier for simulation events.
Definition: event-id.h:55
A template-based reference counting class.
ContentType_t
The possible types of content (default = NOT_SET).
Model application which simulates the traffic of a web server.
State_t
The possible states of the application.
@ NOT_STARTED
Before StartApplication() is invoked.
@ STOPPED
After StopApplication() is invoked.
@ STARTED
Passively listening and responding to requests.
void StartApplication() override
Application specific startup code.
uint32_t ServeFromTxBuffer(Ptr< Socket > socket)
Creates a packet out of a pending object in the Tx buffer send it over the given socket.
State_t m_state
The current state of the client application. Begins with NOT_STARTED.
void(* ThreeGppHttpObjectCallback)(uint32_t size)
Common callback signature for MainObject and EmbeddedObject trace sources.
Ptr< ThreeGppHttpVariables > m_httpVariables
The Variables attribute.
uint16_t m_localPort
The LocalPort attribute.
TracedCallback< uint32_t > m_embeddedObjectTrace
The EmbeddedObject trace source.
Address m_localAddress
The LocalAddress attribute.
void ReceivedDataCallback(Ptr< Socket > socket)
Invoked when m_initialSocket receives some packet data.
void ServeNewMainObject(Ptr< Socket > socket)
Generates a new main object and push it into the Tx buffer.
TracedCallback< uint32_t > m_mainObjectTrace
The MainObject trace source.
uint32_t m_mtuSize
The Mtu attribute.
TracedCallback< const Time &, const Address & > m_rxDelayTrace
The RxDelay trace source.
State_t GetState() const
Returns the current state of the application.
Ptr< ThreeGppHttpServerTxBuffer > m_txBuffer
Pointer to the transmission buffer.
void(* ConnectionEstablishedCallback)(Ptr< const ThreeGppHttpServer > httpServer, Ptr< Socket > socket)
Callback signature for ConnectionEstablished trace source.
bool ConnectionRequestCallback(Ptr< Socket > socket, const Address &address)
Invoked when m_initialSocket receives a connection request.
void ServeNewEmbeddedObject(Ptr< Socket > socket)
Generates a new embedded object and push it into the Tx buffer.
TracedCallback< const std::string &, const std::string & > m_stateTransitionTrace
The StateTransition trace source.
void ErrorCloseCallback(Ptr< Socket > socket)
Invoked when a connection with a web client is terminated.
void SendCallback(Ptr< Socket > socket, uint32_t availableBufferSize)
Invoked when more buffer space for transmission is added to a socket.
TracedCallback< Ptr< const Packet >, const Address & > m_rxTrace
The Rx trace source.
Ptr< Socket > GetSocket() const
Returns a pointer to the listening socket.
TracedCallback< Ptr< const ThreeGppHttpServer >, Ptr< Socket > > m_connectionEstablishedTrace
The ConnectionEstablished trace source.
Ptr< Socket > m_initialSocket
The listening socket, for receiving connection requests from clients.
static TypeId GetTypeId()
Returns the object TypeId.
std::string GetStateString() const
Returns the current state of the application in string format.
ThreeGppHttpServer()
Creates a new instance of HTTP server application.
TracedCallback< Ptr< const Packet > > m_txTrace
The Tx trace source.
void NormalCloseCallback(Ptr< Socket > socket)
Invoked when a connection with a web client is terminated.
void DoDispose() override
Destructor implementation.
void StopApplication() override
Application specific shutdown code.
void NewConnectionCreatedCallback(Ptr< Socket > socket, const Address &address)
Invoked when a new connection has been established.
void SetMtuSize(uint32_t mtuSize)
Sets the maximum transmission unit (MTU) size used by the application.
void SwitchToState(State_t state)
Change the state of the server.
void DepleteBufferSize(Ptr< Socket > socket, uint32_t amount)
Decrements a buffer size by a given amount.
ThreeGppHttpHeader::ContentType_t GetBufferContentType(Ptr< Socket > socket) const
Returns ThreeGppHttpHeader::NOT_SET when the buffer is new and never been filled with any data before...
uint32_t GetBufferSize(Ptr< Socket > socket) const
void CloseAllSockets()
Close and remove all stored sockets, hence clearing the buffer.
bool HasTxedPartOfObject(Ptr< Socket > socket) const
void PrepareClose(Ptr< Socket > socket)
Tell the buffer to close the associated socket once the buffer becomes empty.
Time GetClientTs(Ptr< Socket > socket) const
void CloseSocket(Ptr< Socket > socket)
Close and remove a socket and its associated transmission buffer, and then unset the socket's callbac...
ThreeGppHttpServerTxBuffer()
Create an empty instance of transmission buffer.
void RecordNextServe(Ptr< Socket > socket, const EventId &eventId, const Time &clientTs)
Informs about a pending transmission event associated with the socket, so that it would be automatica...
std::map< Ptr< Socket >, TxBuffer_t > m_txBuffer
Collection of accepted sockets and its individual transmission buffer.
void WriteNewObject(Ptr< Socket > socket, ThreeGppHttpHeader::ContentType_t contentType, uint32_t objectSize)
Writes a data representing a new main object or embedded object to the transmission buffer.
bool IsBufferEmpty(Ptr< Socket > socket) const
bool IsSocketAvailable(Ptr< Socket > socket) const
This method is typically used before calling other methods.
void AddSocket(Ptr< Socket > socket)
Add a new socket and create an empty transmission buffer for it.
void RemoveSocket(Ptr< Socket > socket)
Remove a socket and its associated transmission buffer, and then unset the socket's callbacks to prev...
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
address
Definition: first.py:47
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Set of fields representing a single transmission buffer, which will be associated with a socket.
ThreeGppHttpHeader::ContentType_t txBufferContentType
The content type of the current data inside the transmission buffer.
uint32_t txBufferSize
The length (in bytes) of the current data inside the transmission buffer.
EventId nextServe
Pending transmission event which will be automatically canceled when the associated socket is closed.
bool isClosing
True if the remote end has issued a request to close, which means that this socket will immediately c...
bool hasTxedPartOfObject
True if the buffer content has been read since it is written.
Time clientTs
The client time stamp that comes from the request packet.