My fork of the HTTPServer (working)

Dependents:   DGWWebServer LAN2

Committer:
screamer
Date:
Mon Aug 06 09:23:14 2012 +0000
Revision:
0:7a64fbb4069d
[mbed] converted /DGWWebServer/HTTPServer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:7a64fbb4069d 1 #ifndef TCPCONNECTION_H
screamer 0:7a64fbb4069d 2 #define TCPCONNECTION_H
screamer 0:7a64fbb4069d 3
screamer 0:7a64fbb4069d 4 #include "arch/cc.h"
screamer 0:7a64fbb4069d 5 #include "lwip/err.h"
screamer 0:7a64fbb4069d 6 //#include "lwip/tcp.h"
screamer 0:7a64fbb4069d 7
screamer 0:7a64fbb4069d 8 #include "TCPItem.h"
screamer 0:7a64fbb4069d 9
screamer 0:7a64fbb4069d 10 namespace mbed {
screamer 0:7a64fbb4069d 11
screamer 0:7a64fbb4069d 12 class NetServer;
screamer 0:7a64fbb4069d 13 class TCPListener;
screamer 0:7a64fbb4069d 14
screamer 0:7a64fbb4069d 15 class TCPConnection : public TCPItem {
screamer 0:7a64fbb4069d 16 public:
screamer 0:7a64fbb4069d 17 TCPConnection(struct ip_addr, u16_t);
screamer 0:7a64fbb4069d 18 TCPConnection(TCPListener *, struct tcp_pcb *);
screamer 0:7a64fbb4069d 19
screamer 0:7a64fbb4069d 20 virtual ~TCPConnection();
screamer 0:7a64fbb4069d 21
screamer 0:7a64fbb4069d 22 void connect();
screamer 0:7a64fbb4069d 23
screamer 0:7a64fbb4069d 24 err_t write(void *, u16_t len, u8_t flags = TCP_WRITE_FLAG_COPY) const;
screamer 0:7a64fbb4069d 25
screamer 0:7a64fbb4069d 26 void recved(u32_t len) const;
screamer 0:7a64fbb4069d 27 u16_t sndbuf() const { return tcp_sndbuf(_pcb); }
screamer 0:7a64fbb4069d 28
screamer 0:7a64fbb4069d 29 void set_poll_timer(const u32_t &time) {
screamer 0:7a64fbb4069d 30 if(_pcb) {
screamer 0:7a64fbb4069d 31 _pcb->polltmr = time;
screamer 0:7a64fbb4069d 32 }
screamer 0:7a64fbb4069d 33 }
screamer 0:7a64fbb4069d 34
screamer 0:7a64fbb4069d 35 u32_t get_poll_interval() const {
screamer 0:7a64fbb4069d 36 return (_pcb)? _pcb->pollinterval: 0;
screamer 0:7a64fbb4069d 37 }
screamer 0:7a64fbb4069d 38
screamer 0:7a64fbb4069d 39 void set_poll_interval(const u32_t &value) {
screamer 0:7a64fbb4069d 40 if(_pcb) {
screamer 0:7a64fbb4069d 41 _pcb->pollinterval = value;
screamer 0:7a64fbb4069d 42 }
screamer 0:7a64fbb4069d 43 }
screamer 0:7a64fbb4069d 44
screamer 0:7a64fbb4069d 45 u32_t get_poll_timer() const {
screamer 0:7a64fbb4069d 46 return (_pcb)? _pcb->polltmr: 0;
screamer 0:7a64fbb4069d 47 }
screamer 0:7a64fbb4069d 48
screamer 0:7a64fbb4069d 49 protected:
screamer 0:7a64fbb4069d 50 TCPConnection();
screamer 0:7a64fbb4069d 51
screamer 0:7a64fbb4069d 52 /**
screamer 0:7a64fbb4069d 53 * Function to be called when more send buffer space is available.
screamer 0:7a64fbb4069d 54 * @param space the amount of bytes available
screamer 0:7a64fbb4069d 55 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 56 */
screamer 0:7a64fbb4069d 57 virtual err_t sent(u16_t space) = 0;
screamer 0:7a64fbb4069d 58
screamer 0:7a64fbb4069d 59 /**
screamer 0:7a64fbb4069d 60 * Function to be called when (in-sequence) data has arrived.
screamer 0:7a64fbb4069d 61 * @param p the packet buffer which arrived
screamer 0:7a64fbb4069d 62 * @param err an error argument (TODO: that is current always ERR_OK?)
screamer 0:7a64fbb4069d 63 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 64 */
screamer 0:7a64fbb4069d 65 virtual err_t recv(struct pbuf *p, err_t err) = 0;
screamer 0:7a64fbb4069d 66
screamer 0:7a64fbb4069d 67 /**
screamer 0:7a64fbb4069d 68 * Function to be called when a connection has been set up.
screamer 0:7a64fbb4069d 69 * @param pcb the tcp_pcb that now is connected
screamer 0:7a64fbb4069d 70 * @param err an error argument (TODO: that is current always ERR_OK?)
screamer 0:7a64fbb4069d 71 * @return value is currently ignored
screamer 0:7a64fbb4069d 72 */
screamer 0:7a64fbb4069d 73 virtual err_t connected(err_t err);
screamer 0:7a64fbb4069d 74
screamer 0:7a64fbb4069d 75 /**
screamer 0:7a64fbb4069d 76 * Function which is called periodically.
screamer 0:7a64fbb4069d 77 * The period can be adjusted in multiples of the TCP slow timer interval
screamer 0:7a64fbb4069d 78 * by changing tcp_pcb.polltmr.
screamer 0:7a64fbb4069d 79 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 80 */
screamer 0:7a64fbb4069d 81 virtual err_t poll() = 0;
screamer 0:7a64fbb4069d 82
screamer 0:7a64fbb4069d 83 /**
screamer 0:7a64fbb4069d 84 * Function to be called whenever a fatal error occurs.
screamer 0:7a64fbb4069d 85 * There is no pcb parameter since most of the times, the pcb is
screamer 0:7a64fbb4069d 86 * already deallocated (or there is no pcb) when this function is called.
screamer 0:7a64fbb4069d 87 * @param err an indication why the error callback is called:
screamer 0:7a64fbb4069d 88 * ERR_ABRT: aborted through tcp_abort or by a TCP timer
screamer 0:7a64fbb4069d 89 * ERR_RST: the connection was reset by the remote host
screamer 0:7a64fbb4069d 90 */
screamer 0:7a64fbb4069d 91 virtual void err(err_t err) = 0;
screamer 0:7a64fbb4069d 92
screamer 0:7a64fbb4069d 93 virtual void dnsreply(const char *hostname, struct ip_addr *addr) = 0;
screamer 0:7a64fbb4069d 94
screamer 0:7a64fbb4069d 95 err_t dnsrequest(const char *hostname, struct ip_addr *addr) const;
screamer 0:7a64fbb4069d 96
screamer 0:7a64fbb4069d 97 private:
screamer 0:7a64fbb4069d 98 static void dnsreply_callback(const char *name, struct ip_addr *ipaddr, void *arg);
screamer 0:7a64fbb4069d 99 static err_t connected_callback(void *arg, struct tcp_pcb *pcb, err_t err);
screamer 0:7a64fbb4069d 100 static err_t sent_callback(void *arg, struct tcp_pcb *pcb, u16_t space);
screamer 0:7a64fbb4069d 101 static err_t recv_callback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err);
screamer 0:7a64fbb4069d 102 static err_t poll_callback(void *arg, struct tcp_pcb *pcb);
screamer 0:7a64fbb4069d 103 static void error_callback(void *arg, err_t erra);
screamer 0:7a64fbb4069d 104
screamer 0:7a64fbb4069d 105 protected:
screamer 0:7a64fbb4069d 106 TCPListener *_parent;
screamer 0:7a64fbb4069d 107 struct ip_addr _ipaddr;
screamer 0:7a64fbb4069d 108 u16_t _port;
screamer 0:7a64fbb4069d 109
screamer 0:7a64fbb4069d 110 friend class NetServer;
screamer 0:7a64fbb4069d 111 };
screamer 0:7a64fbb4069d 112
screamer 0:7a64fbb4069d 113 };
screamer 0:7a64fbb4069d 114
screamer 0:7a64fbb4069d 115 #endif /* TCPCONNECTION_H */