A version of LWIP, provided for backwards compatibility.

Dependents:   AA_DemoBoard DemoBoard HelloServerDemo DemoBoard_RangeIndicator ... more

Committer:
root@mbed.org
Date:
Tue May 08 15:32:10 2012 +0100
Revision:
0:5e1631496985
initial commit

Who changed what in which revision?

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