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 #include "lwip/arch.h"
geiineuville 0:9cf1d79ebe04 2
geiineuville 0:9cf1d79ebe04 3 #include "dns.h"
geiineuville 0:9cf1d79ebe04 4
geiineuville 0:9cf1d79ebe04 5 #include "TCPConnection.h"
geiineuville 0:9cf1d79ebe04 6 #include "TCPListener.h"
geiineuville 0:9cf1d79ebe04 7 #include "NetServer.h"
geiineuville 0:9cf1d79ebe04 8
geiineuville 0:9cf1d79ebe04 9 using namespace std;
geiineuville 0:9cf1d79ebe04 10 using namespace mbed;
geiineuville 0:9cf1d79ebe04 11
geiineuville 0:9cf1d79ebe04 12 void TCPConnection::dnsreply_callback(const char *name, struct ip_addr *ipaddr, void *arg) {
geiineuville 0:9cf1d79ebe04 13 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 14 if(connection) {
geiineuville 0:9cf1d79ebe04 15 (connection->dnsreply)(name, ipaddr);
geiineuville 0:9cf1d79ebe04 16 }
geiineuville 0:9cf1d79ebe04 17 }
geiineuville 0:9cf1d79ebe04 18
geiineuville 0:9cf1d79ebe04 19 err_t TCPConnection::connected_callback(void *arg, struct tcp_pcb *pcb, err_t err) {
geiineuville 0:9cf1d79ebe04 20 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 21 LWIP_UNUSED_ARG(pcb);
geiineuville 0:9cf1d79ebe04 22 if(connection) {
geiineuville 0:9cf1d79ebe04 23 return (connection->connected)(err);
geiineuville 0:9cf1d79ebe04 24 }
geiineuville 0:9cf1d79ebe04 25 return ERR_OK;
geiineuville 0:9cf1d79ebe04 26 }
geiineuville 0:9cf1d79ebe04 27
geiineuville 0:9cf1d79ebe04 28 err_t TCPConnection::sent_callback(void *arg, struct tcp_pcb *pcb, u16_t space) {
geiineuville 0:9cf1d79ebe04 29 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 30 LWIP_UNUSED_ARG(pcb);
geiineuville 0:9cf1d79ebe04 31 if(connection) {
geiineuville 0:9cf1d79ebe04 32 return (connection->sent)(space);
geiineuville 0:9cf1d79ebe04 33 }
geiineuville 0:9cf1d79ebe04 34 return ERR_OK;
geiineuville 0:9cf1d79ebe04 35 }
geiineuville 0:9cf1d79ebe04 36
geiineuville 0:9cf1d79ebe04 37 err_t TCPConnection::recv_callback(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) {
geiineuville 0:9cf1d79ebe04 38 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 39 LWIP_UNUSED_ARG(pcb);
geiineuville 0:9cf1d79ebe04 40 if(connection) {
geiineuville 0:9cf1d79ebe04 41 return (connection->recv)(p, err);
geiineuville 0:9cf1d79ebe04 42 }
geiineuville 0:9cf1d79ebe04 43 return ERR_OK;
geiineuville 0:9cf1d79ebe04 44 }
geiineuville 0:9cf1d79ebe04 45
geiineuville 0:9cf1d79ebe04 46 err_t TCPConnection::poll_callback(void *arg, struct tcp_pcb *pcb) {
geiineuville 0:9cf1d79ebe04 47 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 48 LWIP_UNUSED_ARG(pcb);
geiineuville 0:9cf1d79ebe04 49 if(connection) {
geiineuville 0:9cf1d79ebe04 50 return (connection->poll)();
geiineuville 0:9cf1d79ebe04 51 }
geiineuville 0:9cf1d79ebe04 52 return ERR_OK;
geiineuville 0:9cf1d79ebe04 53 }
geiineuville 0:9cf1d79ebe04 54
geiineuville 0:9cf1d79ebe04 55 void TCPConnection::error_callback(void *arg, err_t erra) {
geiineuville 0:9cf1d79ebe04 56 TCPConnection *connection = static_cast<TCPConnection *>(arg);
geiineuville 0:9cf1d79ebe04 57 if(connection) {
geiineuville 0:9cf1d79ebe04 58 (connection->err)(erra);
geiineuville 0:9cf1d79ebe04 59 }
geiineuville 0:9cf1d79ebe04 60 }
geiineuville 0:9cf1d79ebe04 61
geiineuville 0:9cf1d79ebe04 62 TCPConnection::TCPConnection() : _parent(NULL), _port(0) {
geiineuville 0:9cf1d79ebe04 63 }
geiineuville 0:9cf1d79ebe04 64
geiineuville 0:9cf1d79ebe04 65 TCPConnection::TCPConnection(struct ip_addr ip, u16_t port) : _parent(NULL) {
geiineuville 0:9cf1d79ebe04 66 this->_ipaddr = ip;
geiineuville 0:9cf1d79ebe04 67 this->_port = port;
geiineuville 0:9cf1d79ebe04 68 }
geiineuville 0:9cf1d79ebe04 69
geiineuville 0:9cf1d79ebe04 70 TCPConnection::TCPConnection(TCPListener *parent, struct tcp_pcb *pcb)
geiineuville 0:9cf1d79ebe04 71 : TCPItem(pcb), _parent(parent), _ipaddr(pcb->remote_ip), _port(pcb->remote_port) {
geiineuville 0:9cf1d79ebe04 72 tcp_arg(this->_pcb, static_cast<void *>(this));
geiineuville 0:9cf1d79ebe04 73 connected(ERR_OK);
geiineuville 0:9cf1d79ebe04 74 }
geiineuville 0:9cf1d79ebe04 75
geiineuville 0:9cf1d79ebe04 76 TCPConnection::~TCPConnection() {
geiineuville 0:9cf1d79ebe04 77 }
geiineuville 0:9cf1d79ebe04 78
geiineuville 0:9cf1d79ebe04 79 err_t TCPConnection::write(void *msg, u16_t len, u8_t flags) const {
geiineuville 0:9cf1d79ebe04 80 return tcp_write(this->_pcb, msg, len, flags);
geiineuville 0:9cf1d79ebe04 81 }
geiineuville 0:9cf1d79ebe04 82
geiineuville 0:9cf1d79ebe04 83 void TCPConnection::recved(u32_t len) const {
geiineuville 0:9cf1d79ebe04 84 tcp_recved(this->_pcb, len);
geiineuville 0:9cf1d79ebe04 85 }
geiineuville 0:9cf1d79ebe04 86
geiineuville 0:9cf1d79ebe04 87 err_t TCPConnection::connected(err_t err) {
geiineuville 0:9cf1d79ebe04 88 tcp_recv(this->_pcb, TCPConnection::recv_callback);
geiineuville 0:9cf1d79ebe04 89 tcp_sent(this->_pcb, TCPConnection::sent_callback);
geiineuville 0:9cf1d79ebe04 90 tcp_poll(this->_pcb, TCPConnection::poll_callback, 1); // addjust time (in twice a sec)
geiineuville 0:9cf1d79ebe04 91 tcp_err(this->_pcb, TCPConnection::error_callback);
geiineuville 0:9cf1d79ebe04 92 return ERR_OK;
geiineuville 0:9cf1d79ebe04 93 }
geiineuville 0:9cf1d79ebe04 94
geiineuville 0:9cf1d79ebe04 95 void TCPConnection::connect() {
geiineuville 0:9cf1d79ebe04 96 NetServer::ready();
geiineuville 0:9cf1d79ebe04 97 open();
geiineuville 0:9cf1d79ebe04 98 tcp_connect(this->_pcb, &this->_ipaddr, this->_port, TCPConnection::connected_callback);
geiineuville 0:9cf1d79ebe04 99 }
geiineuville 0:9cf1d79ebe04 100
geiineuville 0:9cf1d79ebe04 101 err_t TCPConnection::dnsrequest(const char *hostname, struct ip_addr *addr) const {
geiineuville 0:9cf1d79ebe04 102 return dns_gethostbyname(hostname, addr, TCPConnection::dnsreply_callback, (void *)this);
geiineuville 0:9cf1d79ebe04 103 }