33 #define UIP_CLIENT_CONNECTED 0x10
34 #define UIP_CLIENT_CLOSE 0x20
35 #define UIP_CLIENT_REMOTECLOSED 0x40
36 #define UIP_CLIENT_RESTART 0x80
37 #define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART)
38 #define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS
49} uip_userdata_closed_t;
55typedef struct __attribute__((__packed__))
65 #if UIP_CLIENT_TIMER >= 0
69 uint32_t restartInterval;
70 #if UIP_CONNECTION_TIMEOUT > 0
71 uint32_t connectTimeout;
72 uint32_t connectTimer;
77 #include "RF24Network_config.h"
78 #define INCOMING_DATA_SIZE MAX_PAYLOAD_SIZE * 2
81 #ifndef ETHERNET_USING_LWIP_ARDUINO
85 #include "lwip/tcpip.h"
89 #include <lwIP_Arduino.h>
90 #include "lwip/include/lwip/tcp.h"
91 #include "lwip/include/lwip/raw.h"
103 int connect(IPAddress ip, uint16_t port);
113 int connect(
const char* host, uint16_t port);
122 int read(uint8_t* buf,
size_t size);
148 size_t write(uint8_t);
151 size_t write(
const uint8_t* buf,
size_t size);
190 static uip_userdata_t all_data[UIP_CONNS];
223 static err_t
recv_callback(
void* arg,
struct tcp_pcb* tpcb,
struct pbuf* p, err_t err);
225 static err_t
srecv_callback(
void* arg,
struct tcp_pcb* tpcb,
struct pbuf* p, err_t err);
243 uip_userdata_t* data;
245 static int _available(uip_userdata_t*);
246 static uip_userdata_t* _allocateData();
247 static size_t _write(uip_userdata_t*,
const uint8_t* buf,
size_t size);
250 friend void uip_log(
char* msg);
256 static size_t _write(uint8_t* data,
const uint8_t* buf,
size_t size);
257 static int _available(uint8_t* data);
259 static err_t accept(
void* arg,
struct tcp_pcb* tpcb, err_t err);
260 static err_t closed(
void* arg,
struct tcp_pcb* tpcb, err_t err);
261 static err_t closed_port(
void* arg,
struct tcp_pcb* tpcb);
262 static err_t closeConn(
void* arg,
struct tcp_pcb* tpcb);
263 static err_t serverTimeouts(
void* arg,
struct tcp_pcb* tpcb);
264 static err_t clientTimeouts(
void* arg,
struct tcp_pcb* tpcb);
265 static err_t on_connected(
void* arg,
struct tcp_pcb* tpcb, err_t err);
266 static err_t blocking_write(
struct tcp_pcb* pcb,
ConnectState* fstate,
const char* data,
size_t len);
267 static void dnsCallback(
const char* name,
const ip_addr_t* ipaddr,
void* callback_arg);
270 static uint32_t clientConnectionTimeout;
271 static uint32_t serverConnectionTimeout;
272 static uint16_t dataSize[2];
273 static struct tcp_pcb* myPcb;
275 static char* incomingData[2];
276 static uint32_t simpleCounter;
277 static int32_t accepts;
virtual bool operator==(const EthernetClient &)
int connect(IPAddress ip, uint16_t port)
friend class RF24EthernetClass
static void error_callback(void *arg, err_t err)
static err_t srecv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
int waitAvailable(uint32_t timeout=750)
static ConnectState * gState[2]
virtual bool operator!=(const EthernetClient &rhs)
static err_t recv_callback(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
static err_t sent_callback(void *arg, struct tcp_pcb *tpcb, uint16_t len)
#define OUTPUT_BUFFER_SIZE
volatile bool backlogWasClosed
volatile uint32_t clientTimer
volatile uint32_t sConnectionTimeout
volatile bool backlogWasAccepted
volatile bool clientPollingSetup
volatile uint32_t identifier
volatile uint32_t closeTimer
volatile uint32_t cConnectionTimeout
volatile bool waiting_for_ack
volatile bool stateActiveID
volatile uint32_t connectTimestamp
volatile uint32_t serverTimer
void serialip_appcall(void)
#define UIP_SOCKET_NUMPACKETS