LRSD stephane / Mbed 2 deprecated WEBserverv3

Dependencies:   mbed

Committer:
geiineuville
Date:
Thu Sep 08 08:57:21 2011 +0000
Revision:
0:9cf1d79ebe04
v0 v1 v2   \"v3\"

Who changed what in which revision?

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