friendev EtherDune TCP/IP library
|
Implements the TCP protocol. More...
#include <TCPSocket.h>
Public Member Functions | |
TCPSocket () | |
void | connect () |
Initiates a TCP connection to remoteIP and remotePort. More... | |
void | close () |
Attempts to gracefully close a connection. More... | |
void | terminate () |
Immediately shuts down the socket and makes it available for a new task. More... | |
void | listen () |
Starts listening on the local port indicated by the localPort property. More... | |
void | accept () |
Accepts a connection request that has been received on the port this instance was listening on More... | |
void | accept (TCPSocket &listener) |
Accepts a connection request that was sent to another TCPSocket instance. More... | |
void | push () |
Sets the PSH TCP flag and also sends data in the outgoing buffer immediately. More... | |
virtual void | onConnect () |
Fires when the socket connection is established. More... | |
virtual void | onConnectRequest () |
Called when a listening socket receives a connection request. More... | |
virtual void | onClose () |
Fires when the other party closed the incoming end of the connection because it has no more data to send. More... | |
virtual void | onReceive (uint16_t len, const byte *data) |
Called for each data packet received More... | |
virtual void | onTerminate () |
Called when the socket is ready to be reused. More... | |
![]() | |
uint16_t | write (uint16_t len, const byte *data) |
In the case of TCP, writes the given data buffer to the socket. More... | |
uint16_t | write (const String &s) |
In the case of TCP, writes the given String to the socket, not including the null-terminating character. More... | |
uint16_t | write (const __FlashStringHelper *pattern,...) |
Writes out the specified PROGMEM string that may contain the % escape character. More... | |
template<class T > | |
uint16_t | write (const T &message) |
Writes out the binary representation of the parameter to the socket. More... | |
![]() | |
uint8_t | getState () |
Additional Inherited Members | |
![]() | |
nint16_t | remotePort |
remote TCP or UDP port More... | |
nint16_t | localPort |
local TCP or UDP port More... | |
IPAddress | remoteIP |
remote IP address to connect to (TCP) or send the next packet to (UDP) More... | |
![]() | |
void | prepareIPPacket () |
![]() | |
NetworkService () | |
~NetworkService () | |
virtual void | onDNSResolve (uint8_t status, uint16_t identification, const IPAddress &ip) |
Called on each network service every time a DNS response is received. More... | |
![]() | |
void | setState (uint8_t newState, uint8_t timeout) |
Changes to a new state More... | |
![]() | |
static uint16_t | calcPseudoHeaderChecksum (uint8_t protocol, uint16_t length) |
Calculates the TCP or UDP pseudo header checksum. More... | |
static uint16_t | calcTCPChecksum (bool options, uint16_t dataLength, uint16_t dataChecksum) |
Calculates the TCP checksum. More... | |
static uint16_t | calcUDPChecksum (uint16_t dataLength, uint16_t dataChecksum) |
Calculates the UDP checksum. More... | |
static bool | verifyUDPTCPChecksum () |
Verifies if the UDP or TCP checksum of the current packet is correct. More... | |
![]() | |
static bool | sendIPPacket (uint16_t length) |
Puts the current in-memory packet in the network More... | |
static void | prepareIPPacket (const IPAddress &remoteIP) |
Sets up common IP header values for all outgoing IP packets and calculates the IP header checksum More... | |
static bool | sameLAN (IPAddress &dst) |
Determines whether the given IP is in the same subnet as localIP More... | |
static bool | begin (uint8_t cspin) |
Initializes EtherDune and the underlying hardware More... | |
static void | loop () |
Gives processing time to EtherDune so that it can check for incoming packets or send queued packets. More... | |
static DNSClient & | DNS () |
Obtains access to the DNS service singleton instance. More... | |
![]() | |
static void | writeByte (byte b) |
static void | writeByte (uint16_t dst, byte b) |
static void | writeBuf (uint16_t dst, uint16_t len, const byte *data) |
static void | writeBuf (uint16_t len, const byte *data) |
static uint16_t | hardwareChecksum (uint16_t src, uint16_t len) |
static uint16_t | hardwareChecksumRxOffset (uint16_t offset, uint16_t len) |
static void | moveMem (uint16_t dest, uint16_t src, uint16_t len) |
static void | readBuf (uint16_t src, uint16_t len, byte *data) |
static void | readBuf (uint16_t len, byte *data) |
static byte | readByte (uint16_t src) |
static void | packetSend (uint16_t len) |
static void | packetSend (uint16_t len, const byte *data) |
static void | loadSample () |
static void | loadAll () |
static void | release () |
static uint8_t | begin (uint8_t cspin) |
static void | loop () |
static void | enableBroadcast () |
static bool | isLinkUp () |
Determines whether the network link is ready More... | |
![]() | |
SharedBuffer | buffer |
output buffer for this socket More... | |
![]() | |
uint8_t | stateTimer |
state timer, in ticks More... | |
uint8_t | state |
state code More... | |
![]() | |
static uint8_t | srcPort_L_count = 0 |
self-incrementing counter for local ports. More... | |
![]() | |
static EthBuffer | packet |
in-memory packet buffer currently being processed. More... | |
static ARPService | ARP |
ARP singleton instance. More... | |
static MACAddress | localMAC |
Ethernet MAC address. More... | |
static IPAddress | localIP = { 0, 0, 0, 0 } |
IP address of this application. More... | |
static IPAddress | gatewayIP = { 0, 0, 0, 0 } |
IP address of the gateway in this network. More... | |
static IPAddress | netmask = { 0, 0, 0, 0 } |
Subnet mask. More... | |
static IPAddress | dnsIP = { 0, 0, 0, 0 } |
IP address of the DNS server to use. More... | |
Implements the TCP protocol.
This class implements the TCP protocol as a NetworkService.
To consume this class, create a derived class of TCPSocket to be able to override the different virtual functions that notify of events related to the socket.
The socket write functions are inherited from Socket. Check out Socket::write() for more information.
See TCPClientDemo_DaytimeClient.ino, ChatServer.ino and EchoServer.ino for examples
Definition at line 45 of file TCPSocket.h.
TCPSocket::TCPSocket | ( | ) |
Definition at line 56 of file TCPSocket.cpp.
void TCPSocket::accept | ( | ) |
Accepts a connection request that has been received on the port this instance was listening on
Definition at line 101 of file TCPSocket.cpp.
void TCPSocket::accept | ( | TCPSocket & | listener | ) |
Accepts a connection request that was sent to another TCPSocket instance.
This allows to "spawn" a socket dedicated to fulfill a client request while keeping the listening socket available to detect other connection requests.
listener | The TCPSocket that received the connection request |
Definition at line 120 of file TCPSocket.cpp.
void TCPSocket::close | ( | ) |
Attempts to gracefully close a connection.
Definition at line 194 of file TCPSocket.cpp.
void TCPSocket::connect | ( | ) |
Initiates a TCP connection to remoteIP and remotePort.
Definition at line 71 of file TCPSocket.cpp.
void TCPSocket::listen | ( | ) |
Starts listening on the local port indicated by the localPort property.
Set this property prior to calling listen()
Definition at line 91 of file TCPSocket.cpp.
|
virtual |
Fires when the other party closed the incoming end of the connection because it has no more data to send.
Note that the outgoing end of the connection must also be closed by calling close(). A socket is not fully closed until both directions are closed. Usually you call close() as a response to the onClose() event, but this will depend on the protocol being implemented.
Definition at line 31 of file TCPSocket.cpp.
|
virtual |
Fires when the socket connection is established.
If this was a client socket, onConnect() fires when SYN-ACK is received.
If this was a listening socket, onConnect fires when the ACK to the SYN-ACK is received, that is, when the connection is fully established.
Definition at line 39 of file TCPSocket.cpp.
|
virtual |
Called when a listening socket receives a connection request.
To accept the connection request, call accept()
Reimplemented in TCPListener< SOCKET, MAX_CLIENTS >.
Definition at line 44 of file TCPSocket.cpp.
|
virtual |
Called for each data packet received
len | Length of the data received |
data | Pointer to data received |
Definition at line 50 of file TCPSocket.cpp.
|
virtual |
Called when the socket is ready to be reused.
Reimplemented in TCPListener< SOCKET, MAX_CLIENTS >.
Definition at line 54 of file TCPSocket.cpp.
void TCPSocket::push | ( | ) |
Sets the PSH TCP flag and also sends data in the outgoing buffer immediately.
Normally, socket writes have a maximum lag of 1 tick (by default 200ms) to try piggyback ACKs and also attempt to send more data than just one write. Using push() you can have EhterFlow send data without waiting the 200ms.
Definition at line 498 of file TCPSocket.cpp.
void TCPSocket::terminate | ( | ) |
Immediately shuts down the socket and makes it available for a new task.
Call this method to ensure a full cleanup before reusing a socket instance.
Note that using this method will not gracefully terminate a connection. If a connection was established, no message will be sent to the other party.
Definition at line 183 of file TCPSocket.cpp.