A version of LWIP, provided for backwards compatibility.
Dependents: AA_DemoBoard DemoBoard HelloServerDemo DemoBoard_RangeIndicator ... more
trunk/Core/NetServer.cpp@0:5e1631496985, 2012-05-08 (annotated)
- Committer:
- root@mbed.org
- Date:
- Tue May 08 15:32:10 2012 +0100
- Revision:
- 0:5e1631496985
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
root@mbed.org | 0:5e1631496985 | 1 | #include "lwip/opt.h" |
root@mbed.org | 0:5e1631496985 | 2 | #include "lwip/stats.h" |
root@mbed.org | 0:5e1631496985 | 3 | #include "lwip/sys.h" |
root@mbed.org | 0:5e1631496985 | 4 | #include "lwip/pbuf.h" |
root@mbed.org | 0:5e1631496985 | 5 | #include "lwip/udp.h" |
root@mbed.org | 0:5e1631496985 | 6 | #include "lwip/tcp.h" |
root@mbed.org | 0:5e1631496985 | 7 | #include "lwip/dns.h" |
root@mbed.org | 0:5e1631496985 | 8 | #include "lwip/dhcp.h" |
root@mbed.org | 0:5e1631496985 | 9 | #include "lwip/init.h" |
root@mbed.org | 0:5e1631496985 | 10 | #include "lwip/netif.h" |
root@mbed.org | 0:5e1631496985 | 11 | #include "netif/etharp.h" |
root@mbed.org | 0:5e1631496985 | 12 | #include "netif/loopif.h" |
root@mbed.org | 0:5e1631496985 | 13 | #include "device.h" |
root@mbed.org | 0:5e1631496985 | 14 | #include "Ethernet.h" |
root@mbed.org | 0:5e1631496985 | 15 | |
root@mbed.org | 0:5e1631496985 | 16 | #include "NetServer.h" |
root@mbed.org | 0:5e1631496985 | 17 | #include "TCPListener.h" |
root@mbed.org | 0:5e1631496985 | 18 | #include "TCPCallbackListener.h" |
root@mbed.org | 0:5e1631496985 | 19 | #include "TCPConnection.h" |
root@mbed.org | 0:5e1631496985 | 20 | |
root@mbed.org | 0:5e1631496985 | 21 | using namespace std; |
root@mbed.org | 0:5e1631496985 | 22 | using namespace mbed; |
root@mbed.org | 0:5e1631496985 | 23 | |
root@mbed.org | 0:5e1631496985 | 24 | NetServer *NetServer::singleton = NULL; |
root@mbed.org | 0:5e1631496985 | 25 | |
root@mbed.org | 0:5e1631496985 | 26 | NetServer::NetServer() : netif(&netif_data), dhcp(true), hostname(HOSTNAME) { |
root@mbed.org | 0:5e1631496985 | 27 | _time.start(); |
root@mbed.org | 0:5e1631496985 | 28 | IP4_ADDR(&netmask, 255,255,255,255); |
root@mbed.org | 0:5e1631496985 | 29 | IP4_ADDR(&gateway, 0,0,0,0); |
root@mbed.org | 0:5e1631496985 | 30 | IP4_ADDR(&ipaddr, 0,0,0,0); |
root@mbed.org | 0:5e1631496985 | 31 | netif->hwaddr_len = 0; |
root@mbed.org | 0:5e1631496985 | 32 | del = new list<TCPItem *>(); |
root@mbed.org | 0:5e1631496985 | 33 | } |
root@mbed.org | 0:5e1631496985 | 34 | |
root@mbed.org | 0:5e1631496985 | 35 | NetServer::NetServer(struct ip_addr ip, struct ip_addr nm, struct ip_addr gw) |
root@mbed.org | 0:5e1631496985 | 36 | : netif(&netif_data), ipaddr(ip), netmask(nm), gateway(gw), dhcp(false), hostname(HOSTNAME) { |
root@mbed.org | 0:5e1631496985 | 37 | _time.start(); |
root@mbed.org | 0:5e1631496985 | 38 | netif->hwaddr_len = 0; |
root@mbed.org | 0:5e1631496985 | 39 | del = new list<TCPItem *>(); |
root@mbed.org | 0:5e1631496985 | 40 | } |
root@mbed.org | 0:5e1631496985 | 41 | |
root@mbed.org | 0:5e1631496985 | 42 | NetServer::~NetServer() { |
root@mbed.org | 0:5e1631496985 | 43 | |
root@mbed.org | 0:5e1631496985 | 44 | } |
root@mbed.org | 0:5e1631496985 | 45 | |
root@mbed.org | 0:5e1631496985 | 46 | void NetServer::_poll() const { |
root@mbed.org | 0:5e1631496985 | 47 | while(!del->empty()) { |
root@mbed.org | 0:5e1631496985 | 48 | TCPItem *item = del->front(); |
root@mbed.org | 0:5e1631496985 | 49 | del->pop_front(); |
root@mbed.org | 0:5e1631496985 | 50 | delete item; |
root@mbed.org | 0:5e1631496985 | 51 | } |
root@mbed.org | 0:5e1631496985 | 52 | device_poll(); |
root@mbed.org | 0:5e1631496985 | 53 | tcp_tmr(); |
root@mbed.org | 0:5e1631496985 | 54 | } |
root@mbed.org | 0:5e1631496985 | 55 | |
root@mbed.org | 0:5e1631496985 | 56 | void NetServer::init() { |
root@mbed.org | 0:5e1631496985 | 57 | lwip_init(); |
root@mbed.org | 0:5e1631496985 | 58 | |
root@mbed.org | 0:5e1631496985 | 59 | netif->hwaddr_len = ETHARP_HWADDR_LEN; |
root@mbed.org | 0:5e1631496985 | 60 | device_address((char *)netif->hwaddr); |
root@mbed.org | 0:5e1631496985 | 61 | |
root@mbed.org | 0:5e1631496985 | 62 | netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, device_init, ip_input); |
root@mbed.org | 0:5e1631496985 | 63 | netif->hostname = (char *)this->hostname; |
root@mbed.org | 0:5e1631496985 | 64 | netif_set_default(netif); |
root@mbed.org | 0:5e1631496985 | 65 | if(!dhcp) { |
root@mbed.org | 0:5e1631496985 | 66 | netif_set_up(netif); |
root@mbed.org | 0:5e1631496985 | 67 | } else { |
root@mbed.org | 0:5e1631496985 | 68 | dhcp_start(netif); |
root@mbed.org | 0:5e1631496985 | 69 | } |
root@mbed.org | 0:5e1631496985 | 70 | |
root@mbed.org | 0:5e1631496985 | 71 | tickARP.attach_us( ðarp_tmr, ARP_TMR_INTERVAL * 1000); |
root@mbed.org | 0:5e1631496985 | 72 | //eth_tick.attach_us<NetServer>(this,&emac_tmr, TCP_FAST_INTERVAL * 1000); |
root@mbed.org | 0:5e1631496985 | 73 | dns_tick.attach_us(&dns_tmr, DNS_TMR_INTERVAL * 1000); |
root@mbed.org | 0:5e1631496985 | 74 | if(dhcp) { |
root@mbed.org | 0:5e1631496985 | 75 | dhcp_coarse.attach_us(&dhcp_coarse_tmr, DHCP_COARSE_TIMER_MSECS * 1000); |
root@mbed.org | 0:5e1631496985 | 76 | dhcp_fine.attach_us(&dhcp_fine_tmr, DHCP_FINE_TIMER_MSECS * 1000); |
root@mbed.org | 0:5e1631496985 | 77 | } |
root@mbed.org | 0:5e1631496985 | 78 | } |
root@mbed.org | 0:5e1631496985 | 79 | |
root@mbed.org | 0:5e1631496985 | 80 | void NetServer::setUp() const { |
root@mbed.org | 0:5e1631496985 | 81 | netif_set_up(netif); |
root@mbed.org | 0:5e1631496985 | 82 | } |
root@mbed.org | 0:5e1631496985 | 83 | |
root@mbed.org | 0:5e1631496985 | 84 | void NetServer::setDown() const { |
root@mbed.org | 0:5e1631496985 | 85 | netif_set_down(netif); |
root@mbed.org | 0:5e1631496985 | 86 | } |
root@mbed.org | 0:5e1631496985 | 87 | |
root@mbed.org | 0:5e1631496985 | 88 | int NetServer::isUp() const { |
root@mbed.org | 0:5e1631496985 | 89 | return netif_is_up(netif); |
root@mbed.org | 0:5e1631496985 | 90 | } |
root@mbed.org | 0:5e1631496985 | 91 | |
root@mbed.org | 0:5e1631496985 | 92 | void NetServer::waitUntilReady() { |
root@mbed.org | 0:5e1631496985 | 93 | while(!netif_is_up(netif)) { |
root@mbed.org | 0:5e1631496985 | 94 | _poll(); |
root@mbed.org | 0:5e1631496985 | 95 | wait_ms(1); |
root@mbed.org | 0:5e1631496985 | 96 | } |
root@mbed.org | 0:5e1631496985 | 97 | ipaddr = netif->ip_addr; |
root@mbed.org | 0:5e1631496985 | 98 | printf("IP: %hhu.%hhu.%hhu.%hhu\n", (ipaddr.addr)&0xFF, (ipaddr.addr>>8)&0xFF, (ipaddr.addr>>16)&0xFF, (ipaddr.addr>>24)&0xFF); |
root@mbed.org | 0:5e1631496985 | 99 | } |
root@mbed.org | 0:5e1631496985 | 100 | |
root@mbed.org | 0:5e1631496985 | 101 | TCPCallbackListener *NetServer::bindTCPPort(u16_t port, err_t (*accept)(TCPCallbackListener *, struct tcp_pcb *, err_t)) const { |
root@mbed.org | 0:5e1631496985 | 102 | TCPCallbackListener *listener = new TCPCallbackListener(port, accept); |
root@mbed.org | 0:5e1631496985 | 103 | listener->bind(); |
root@mbed.org | 0:5e1631496985 | 104 | return listener; |
root@mbed.org | 0:5e1631496985 | 105 | } |
root@mbed.org | 0:5e1631496985 | 106 | |
root@mbed.org | 0:5e1631496985 | 107 | void NetServer::free(TCPItem *item) const { |
root@mbed.org | 0:5e1631496985 | 108 | del->push_back(item); |
root@mbed.org | 0:5e1631496985 | 109 | } |
root@mbed.org | 0:5e1631496985 | 110 | |
root@mbed.org | 0:5e1631496985 | 111 | int NetServer::time() { |
root@mbed.org | 0:5e1631496985 | 112 | return NetServer::get()->_time.read_ms(); |
root@mbed.org | 0:5e1631496985 | 113 | } |