Free (GPLv2) TCP/IP stack developed by TASS Belgium

Dependents:   lpc1768-picotcp-demo ZeroMQ_PicoTCP_Publisher_demo TCPSocket_HelloWorld_PicoTCP Pico_TCP_UDP_Test ... more

PicoTCP. Copyright (c) 2013 TASS Belgium NV.

Released under the GNU General Public License, version 2.

Different licensing models may exist, at the sole discretion of the Copyright holders.

Official homepage: http://www.picotcp.com

Bug tracker: https://github.com/tass-belgium/picotcp/issues

Development steps:

  • initial integration with mbed RTOS
  • generic mbed Ethernet driver
  • high performance NXP LPC1768 specific Ethernet driver
  • Multi-threading support for mbed RTOS
  • Berkeley sockets and integration with the New Socket API
  • Fork of the apps running on top of the New Socket API
  • Scheduling optimizations
  • Debugging/benchmarking/testing

Demo application (measuring TCP sender performance):

Import programlpc1768-picotcp-demo

A PicoTCP demo app testing the ethernet throughput on the lpc1768 mbed board.

Committer:
tass picotcp@tass.be
Date:
Wed Feb 19 15:12:53 2014 +0100
Revision:
142:35da43068894
Parent:
39:8d4d653d94bd
Fixed some warnings in mbed wrapper code, moved setDnsServer implementation to stack_endpoint

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniele 20:3fa3db9fd4a4 1 /*
daniele 20:3fa3db9fd4a4 2 *
daniele 20:3fa3db9fd4a4 3 * PicoTCP Socket interface for mbed.
daniele 20:3fa3db9fd4a4 4 * Copyright (C) 2013 TASS Belgium NV
daniele 20:3fa3db9fd4a4 5 *
daniele 20:3fa3db9fd4a4 6 * Released under GPL v2
daniele 20:3fa3db9fd4a4 7 *
daniele 20:3fa3db9fd4a4 8 * Other licensing models might apply at the sole discretion of the copyright holders.
daniele 20:3fa3db9fd4a4 9 *
daniele 20:3fa3db9fd4a4 10 *
daniele 20:3fa3db9fd4a4 11 * This software is based on the mbed.org EthernetInterface implementation:
daniele 20:3fa3db9fd4a4 12 * Copyright (C) 2012 mbed.org, MIT License
daniele 20:3fa3db9fd4a4 13 *
daniele 20:3fa3db9fd4a4 14 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
daniele 20:3fa3db9fd4a4 15 * and associated documentation files (the "Software"), to deal in the Software without restriction,
daniele 20:3fa3db9fd4a4 16 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
daniele 20:3fa3db9fd4a4 17 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
daniele 20:3fa3db9fd4a4 18 * furnished to do so, subject to the following conditions:
daniele 20:3fa3db9fd4a4 19 *
daniele 20:3fa3db9fd4a4 20 * The above copyright notice and this permission notice shall be included in all copies or
daniele 20:3fa3db9fd4a4 21 * substantial portions of the Software.
daniele 20:3fa3db9fd4a4 22 *
daniele 20:3fa3db9fd4a4 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
daniele 20:3fa3db9fd4a4 24 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
daniele 20:3fa3db9fd4a4 25 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
daniele 20:3fa3db9fd4a4 26 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
daniele 20:3fa3db9fd4a4 27 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
daniele 20:3fa3db9fd4a4 28 */
daniele 20:3fa3db9fd4a4 29
daniele 20:3fa3db9fd4a4 30 #ifndef SOCKET_H_
daniele 20:3fa3db9fd4a4 31 #define SOCKET_H_
daniele 20:3fa3db9fd4a4 32
daniele 20:3fa3db9fd4a4 33 #ifdef __cplusplus
daniele 20:3fa3db9fd4a4 34 extern "C" {
daniele 20:3fa3db9fd4a4 35 #endif
daniele 20:3fa3db9fd4a4 36 #include "pico_dns_client.h"
daniele 20:3fa3db9fd4a4 37 #ifdef __cplusplus
daniele 20:3fa3db9fd4a4 38 }
daniele 20:3fa3db9fd4a4 39 #endif
daniele 20:3fa3db9fd4a4 40
daniele 20:3fa3db9fd4a4 41 #include "wrapper.h"
daniele 20:3fa3db9fd4a4 42 #include "proxy_endpoint.h"
daniele 20:3fa3db9fd4a4 43
daniele 20:3fa3db9fd4a4 44 class TimeInterval;
daniele 20:3fa3db9fd4a4 45
daniele 20:3fa3db9fd4a4 46 /** Socket file descriptor and select wrapper
daniele 20:3fa3db9fd4a4 47 */
daniele 20:3fa3db9fd4a4 48 class Socket {
daniele 20:3fa3db9fd4a4 49 public:
daniele 20:3fa3db9fd4a4 50 /** Socket
daniele 20:3fa3db9fd4a4 51 */
daniele 20:3fa3db9fd4a4 52 Socket();
daniele 20:3fa3db9fd4a4 53
daniele 20:3fa3db9fd4a4 54 /** Set blocking or non-blocking mode of the socket and a timeout on
daniele 20:3fa3db9fd4a4 55 blocking socket operations
daniele 20:3fa3db9fd4a4 56 \param blocking true for blocking mode, false for non-blocking mode.
daniele 20:3fa3db9fd4a4 57 \param timeout timeout in ms [Default: (1500)ms].
daniele 20:3fa3db9fd4a4 58 */
daniele 20:3fa3db9fd4a4 59 void set_blocking(bool blocking, unsigned int timeout=1500);
daniele 20:3fa3db9fd4a4 60
daniele 20:3fa3db9fd4a4 61 /** Set socket options
tass 35:6078073547bb 62 \param level stack level - parameter is ignored (kept for compatibility)
tass 35:6078073547bb 63 \param optname option ID - please check pico_socket.h
daniele 20:3fa3db9fd4a4 64 \param optval option value
daniele 20:3fa3db9fd4a4 65 \param socklen_t length of the option value
daniele 20:3fa3db9fd4a4 66 \return 0 on success, -1 on failure
daniele 20:3fa3db9fd4a4 67 */
daniele 20:3fa3db9fd4a4 68 int set_option(int level, int optname, const void *optval, socklen_t optlen);
daniele 20:3fa3db9fd4a4 69
daniele 20:3fa3db9fd4a4 70 /** Get socket options
tass 35:6078073547bb 71 \param level stack level - parameter is ignored (kept for compatibility)
tass 35:6078073547bb 72 \param optname option ID - please check pico_socket.h or lower in the page
daniele 20:3fa3db9fd4a4 73 \param optval buffer pointer where to write the option value
daniele 20:3fa3db9fd4a4 74 \param socklen_t length of the option value
daniele 20:3fa3db9fd4a4 75 \return 0 on success, -1 on failure
daniele 20:3fa3db9fd4a4 76 */
daniele 20:3fa3db9fd4a4 77 int get_option(int level, int optname, void *optval, socklen_t *optlen);
daniele 20:3fa3db9fd4a4 78
daniele 20:3fa3db9fd4a4 79 /** Close the socket file descriptor
daniele 20:3fa3db9fd4a4 80 */
daniele 20:3fa3db9fd4a4 81 int close();
daniele 20:3fa3db9fd4a4 82
daniele 20:3fa3db9fd4a4 83 ~Socket();
daniele 20:3fa3db9fd4a4 84
daniele 20:3fa3db9fd4a4 85 protected:
daniele 20:3fa3db9fd4a4 86 struct stack_endpoint *_ep;
daniele 20:3fa3db9fd4a4 87 int init_socket(int type);
daniele 20:3fa3db9fd4a4 88
daniele 20:3fa3db9fd4a4 89 int wait_readable(TimeInterval& timeout);
daniele 20:3fa3db9fd4a4 90 int wait_writable(TimeInterval& timeout);
tass 39:8d4d653d94bd 91
tass 39:8d4d653d94bd 92 int is_readable(void);
tass 39:8d4d653d94bd 93 int is_writable(void);
daniele 20:3fa3db9fd4a4 94
daniele 20:3fa3db9fd4a4 95 bool _blocking;
tass picotcp@tass.be 142:35da43068894 96 pico_time _timeout;
daniele 20:3fa3db9fd4a4 97
daniele 20:3fa3db9fd4a4 98 private:
daniele 20:3fa3db9fd4a4 99 int select(struct timeval *timeout, bool read, bool write);
daniele 20:3fa3db9fd4a4 100 };
daniele 20:3fa3db9fd4a4 101
daniele 20:3fa3db9fd4a4 102 /** Time interval class used to specify timeouts
daniele 20:3fa3db9fd4a4 103 */
daniele 20:3fa3db9fd4a4 104 class TimeInterval {
daniele 20:3fa3db9fd4a4 105 friend class Socket;
daniele 20:3fa3db9fd4a4 106
daniele 20:3fa3db9fd4a4 107 public:
daniele 20:3fa3db9fd4a4 108 /** Time Interval
daniele 20:3fa3db9fd4a4 109 \param ms time interval expressed in milliseconds
daniele 20:3fa3db9fd4a4 110 */
daniele 20:3fa3db9fd4a4 111 TimeInterval(unsigned int ms);
daniele 20:3fa3db9fd4a4 112
daniele 20:3fa3db9fd4a4 113 private:
daniele 20:3fa3db9fd4a4 114 struct timeval _time;
daniele 20:3fa3db9fd4a4 115 struct stack_endpoint * _ep;
daniele 20:3fa3db9fd4a4 116 };
daniele 20:3fa3db9fd4a4 117
tass 37:bdf736327c71 118 inline struct hostent *gethostbyname(const char *name) { return picotcp_gethostbyname(name); }
daniele 20:3fa3db9fd4a4 119 /* DNS
daniele 20:3fa3db9fd4a4 120 inline int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop) {
daniele 20:3fa3db9fd4a4 121 return picotcp_gethostbyname_r(name, ret, buf, buflen, result, h_errnop);
daniele 20:3fa3db9fd4a4 122 }*/
daniele 20:3fa3db9fd4a4 123 #endif /* SOCKET_H_ */