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 TCPCALLBACKCONNECTION_H
screamer 0:7a64fbb4069d 2 #define TCPCALLBACKCONNECTION_H
screamer 0:7a64fbb4069d 3
screamer 0:7a64fbb4069d 4 #include "TCPConnection.h"
screamer 0:7a64fbb4069d 5
screamer 0:7a64fbb4069d 6 namespace mbed {
screamer 0:7a64fbb4069d 7
screamer 0:7a64fbb4069d 8 #define NO_SENT_FNC ((err_t (*)(TCPCallbackConnection *, u16_t))NULL)
screamer 0:7a64fbb4069d 9 #define NO_RECV_FNC ((err_t (*)(TCPCallbackConnection *, struct pbuf *, err_t))NULL)
screamer 0:7a64fbb4069d 10 #define NO_POLL_FNC ((err_t (*)(TCPCallbackConnection *))NULL)
screamer 0:7a64fbb4069d 11 #define NO_ACCEPT_FNC ((err_t (*)(TCPCallbackConnection *, struct tcp_pcb *, err_t))NULL)
screamer 0:7a64fbb4069d 12 #define NO_CONNECT_FNC ((err_t (*)(TCPCallbackConnection *, err_t))NULL)
screamer 0:7a64fbb4069d 13 #define NO_ERR_FNC ((void (*)(TCPCallbackConnection *, err_t))NULL)
screamer 0:7a64fbb4069d 14
screamer 0:7a64fbb4069d 15
screamer 0:7a64fbb4069d 16 class TCPCallbackConnection : public TCPConnection {
screamer 0:7a64fbb4069d 17 public:
screamer 0:7a64fbb4069d 18 TCPCallbackConnection(struct ip_addr ip_addr, u16_t port,
screamer 0:7a64fbb4069d 19 err_t (*psent)(TCPCallbackConnection *, u16_t),
screamer 0:7a64fbb4069d 20 err_t (*precv)(TCPCallbackConnection *, struct pbuf *, err_t),
screamer 0:7a64fbb4069d 21 err_t (*ppoll)(TCPCallbackConnection *),
screamer 0:7a64fbb4069d 22 err_t (*pconnected)(TCPCallbackConnection *, err_t),
screamer 0:7a64fbb4069d 23 void (*perr )(TCPCallbackConnection *, err_t))
screamer 0:7a64fbb4069d 24 : TCPConnection(ip_addr, port) {
screamer 0:7a64fbb4069d 25 _sent = psent;
screamer 0:7a64fbb4069d 26 _recv = precv;
screamer 0:7a64fbb4069d 27 _poll = ppoll;
screamer 0:7a64fbb4069d 28 _connected = pconnected;
screamer 0:7a64fbb4069d 29 _err = perr;
screamer 0:7a64fbb4069d 30 }
screamer 0:7a64fbb4069d 31
screamer 0:7a64fbb4069d 32 TCPCallbackConnection(TCPListener *parent, struct tcp_pcb *npcb,
screamer 0:7a64fbb4069d 33 err_t (*psent)(TCPCallbackConnection *, u16_t),
screamer 0:7a64fbb4069d 34 err_t (*precv)(TCPCallbackConnection *, struct pbuf *, err_t),
screamer 0:7a64fbb4069d 35 err_t (*ppoll)(TCPCallbackConnection *),
screamer 0:7a64fbb4069d 36 err_t (*pconnected)(TCPCallbackConnection *, err_t),
screamer 0:7a64fbb4069d 37 void (*perr )(TCPCallbackConnection *, err_t))
screamer 0:7a64fbb4069d 38 : TCPConnection(parent, npcb) {
screamer 0:7a64fbb4069d 39 _sent = psent;
screamer 0:7a64fbb4069d 40 _recv = precv;
screamer 0:7a64fbb4069d 41 _poll = ppoll;
screamer 0:7a64fbb4069d 42 _connected = pconnected;
screamer 0:7a64fbb4069d 43 _err = perr;
screamer 0:7a64fbb4069d 44 }
screamer 0:7a64fbb4069d 45
screamer 0:7a64fbb4069d 46 private:
screamer 0:7a64fbb4069d 47 /*
screamer 0:7a64fbb4069d 48 * Function to be called when more send buffer space is available.
screamer 0:7a64fbb4069d 49 * @param space the amount of bytes available
screamer 0:7a64fbb4069d 50 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 51 */
screamer 0:7a64fbb4069d 52 virtual err_t sent(u16_t space) {
screamer 0:7a64fbb4069d 53 if(_sent) {
screamer 0:7a64fbb4069d 54 return (_sent)(this, space);
screamer 0:7a64fbb4069d 55 } else {
screamer 0:7a64fbb4069d 56 return ERR_OK;
screamer 0:7a64fbb4069d 57 }
screamer 0:7a64fbb4069d 58 }
screamer 0:7a64fbb4069d 59
screamer 0:7a64fbb4069d 60 /*
screamer 0:7a64fbb4069d 61 * Function to be called when (in-sequence) data has arrived.
screamer 0:7a64fbb4069d 62 * @param p the packet buffer which arrived
screamer 0:7a64fbb4069d 63 * @param err an error argument (TODO: that is current always ERR_OK?)
screamer 0:7a64fbb4069d 64 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 65 */
screamer 0:7a64fbb4069d 66 virtual err_t recv(struct pbuf *p, err_t err) {
screamer 0:7a64fbb4069d 67 if(_recv) {
screamer 0:7a64fbb4069d 68 return (_recv)(this, p, err);
screamer 0:7a64fbb4069d 69 } else {
screamer 0:7a64fbb4069d 70 return ERR_OK;
screamer 0:7a64fbb4069d 71 }
screamer 0:7a64fbb4069d 72 }
screamer 0:7a64fbb4069d 73
screamer 0:7a64fbb4069d 74 /*
screamer 0:7a64fbb4069d 75 * Function which is called periodically.
screamer 0:7a64fbb4069d 76 * The period can be adjusted in multiples of the TCP slow timer interval
screamer 0:7a64fbb4069d 77 * by changing tcp_pcb.polltmr.
screamer 0:7a64fbb4069d 78 * @return ERR_OK: try to send some data by calling tcp_output
screamer 0:7a64fbb4069d 79 */
screamer 0:7a64fbb4069d 80 virtual err_t poll() {
screamer 0:7a64fbb4069d 81 if(_poll) {
screamer 0:7a64fbb4069d 82 return (_poll)(this);
screamer 0:7a64fbb4069d 83 } else {
screamer 0:7a64fbb4069d 84 return ERR_OK;
screamer 0:7a64fbb4069d 85 }
screamer 0:7a64fbb4069d 86 }
screamer 0:7a64fbb4069d 87
screamer 0:7a64fbb4069d 88 virtual err_t connected(err_t err) {
screamer 0:7a64fbb4069d 89 err = TCPConnection::connected(err);
screamer 0:7a64fbb4069d 90 if(_connected) {
screamer 0:7a64fbb4069d 91 return (_connected)(this, err);
screamer 0:7a64fbb4069d 92 } else {
screamer 0:7a64fbb4069d 93 return ERR_OK;
screamer 0:7a64fbb4069d 94 }
screamer 0:7a64fbb4069d 95 }
screamer 0:7a64fbb4069d 96
screamer 0:7a64fbb4069d 97 /*
screamer 0:7a64fbb4069d 98 * Function to be called whenever a fatal error occurs.
screamer 0:7a64fbb4069d 99 * There is no pcb parameter since most of the times, the pcb is
screamer 0:7a64fbb4069d 100 * already deallocated (or there is no pcb) when this function is called.
screamer 0:7a64fbb4069d 101 * @param err an indication why the error callback is called:
screamer 0:7a64fbb4069d 102 * ERR_ABRT: aborted through tcp_abort or by a TCP timer
screamer 0:7a64fbb4069d 103 * ERR_RST: the connection was reset by the remote host
screamer 0:7a64fbb4069d 104 */
screamer 0:7a64fbb4069d 105 virtual void err(err_t erra) {
screamer 0:7a64fbb4069d 106 if(_err) {
screamer 0:7a64fbb4069d 107 (_err)(this, erra);
screamer 0:7a64fbb4069d 108 }
screamer 0:7a64fbb4069d 109 }
screamer 0:7a64fbb4069d 110
screamer 0:7a64fbb4069d 111 virtual void dnsreply(const char *hostname, struct ip_addr *addr) {};
screamer 0:7a64fbb4069d 112
screamer 0:7a64fbb4069d 113 err_t (*_sent)(TCPCallbackConnection *, u16_t);
screamer 0:7a64fbb4069d 114 err_t (*_recv)(TCPCallbackConnection *, struct pbuf *p, err_t err);
screamer 0:7a64fbb4069d 115 err_t (*_poll)(TCPCallbackConnection *);
screamer 0:7a64fbb4069d 116 err_t (*_accept)(TCPCallbackConnection *, struct tcp_pcb *newpcb, err_t err);
screamer 0:7a64fbb4069d 117 err_t (*_connected)(TCPCallbackConnection *, err_t err);
screamer 0:7a64fbb4069d 118 void (*_err )(TCPCallbackConnection *, err_t);
screamer 0:7a64fbb4069d 119 };
screamer 0:7a64fbb4069d 120
screamer 0:7a64fbb4069d 121 };
screamer 0:7a64fbb4069d 122
screamer 0:7a64fbb4069d 123 #endif /* TCPCALLBACKCONNECTION_H */