AmrRT
Dependents: LPC1768_AppBoard_Internet_LCD_Clock
Fork of EthernetNetIf by
Diff: LPC1768/api/TCPSocket.h
- Revision:
- 5:bc7df6da7589
- Parent:
- 0:422060928e37
--- a/LPC1768/api/TCPSocket.h Fri Jul 09 14:34:26 2010 +0000 +++ b/LPC1768/api/TCPSocket.h Thu Aug 05 15:09:22 2010 +0000 @@ -21,64 +21,106 @@ THE SOFTWARE. */ +/** \file +TCP Socket header file +*/ + #ifndef TCPSOCKET_H #define TCPSOCKET_H -#include "if/net/net.h" +#include "core/net.h" +#include "core/host.h" //Essentially it is a safe interface to NetTcpSocket +///TCP Socket error codes enum TCPSocketErr { __TCPSOCKET_MIN = -0xFFFF, - TCPSOCKET_SETUP, //NetTcpSocket not properly configured - TCPSOCKET_TIMEOUT, - TCPSOCKET_IF, //If has problems, does not exist or is not initialized - TCPSOCKET_MEM, //Not enough mem - TCPSOCKET_INUSE, //If/Port is in use - TCPSOCKET_EMPTY, //Connections queue is empty - TCPSOCKET_RST, // Connection was reset by remote host + TCPSOCKET_SETUP, ///<TCPSocket not properly configured + TCPSOCKET_TIMEOUT, ///<Connection timed out + TCPSOCKET_IF, ///<Interface has problems, does not exist or is not initialized + TCPSOCKET_MEM, ///<Not enough mem + TCPSOCKET_INUSE, ///<Interface / Port is in use + TCPSOCKET_EMPTY, ///<Connections queue is empty + TCPSOCKET_RST, ///<Connection was reset by remote host //... - TCPSOCKET_OK = 0 + TCPSOCKET_OK = 0 ///<Success }; +///TCP Socket Events enum TCPSocketEvent { - TCPSOCKET_CONNECTED, //Connected to host, must call accept() if we were listening - TCPSOCKET_ACCEPT, //Connected to client - TCPSOCKET_READABLE, //Data in buf - TCPSOCKET_WRITEABLE, //Can write data to buf - TCPSOCKET_CONTIMEOUT, - TCPSOCKET_CONRST, - TCPSOCKET_CONABRT, - TCPSOCKET_ERROR, - TCPSOCKET_DISCONNECTED + TCPSOCKET_CONNECTED, ///<Connected to host + TCPSOCKET_ACCEPT, ///<Client is connected, must call accept() to get a new Socket + TCPSOCKET_READABLE, ///<Data in buf + TCPSOCKET_WRITEABLE, ///<Can write data to buf + TCPSOCKET_CONTIMEOUT, ///<Connection timed out + TCPSOCKET_CONRST, ///<Connection was reset by remote host + TCPSOCKET_CONABRT, ///<Connection was aborted + TCPSOCKET_ERROR, ///<Unknown error + TCPSOCKET_DISCONNECTED ///<Disconnected }; +class NetTcpSocket; +enum NetTcpSocketEvent; +///This is a simple TCP Socket class +/** + This class exposes an API to deal with TCP Sockets +*/ class TCPSocket { public: + ///Creates a new socket TCPSocket(); protected: TCPSocket(NetTcpSocket* pNetTcpSocket); public: + ///Closes if needed and destroys the socket ~TCPSocket(); //close() + ///Binds the socket to (local) host TCPSocketErr bind(const Host& me); + + ///Starts listening TCPSocketErr listen(); + + ///Connects socket to host TCPSocketErr connect(const Host& host); + + ///Accepts connection from client and gets connected socket TCPSocketErr accept(Host* pClient, TCPSocket** ppNewTcpSocket); + ///Sends data + /* + @return a negative error code or the number of bytes transmitted + */ int /*if < 0 : TCPSocketErr*/ send(const char* buf, int len); + + ///Receives data + /* + @return a negative error code or the number of bytes received + */ int /*if < 0 : TCPSocketErr*/ recv(char* buf, int len); /* TODO NTH : printf / scanf helpers that call send/recv */ + ///Closes socket TCPSocketErr close(); + //Callbacks + ///Setups callback + /** + @param pMethod : callback function + */ + void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + class CDummy; - //Callbacks - void setOnEvent( void (*pMethod)(TCPSocketEvent) ); + ///Setups callback + /** + @param pItem : instance of class on which to execute the callback method + @param pMethod : callback method + */ template<class T> void setOnEvent( T* pItem, void (T::*pMethod)(TCPSocketEvent) ) { @@ -86,7 +128,8 @@ m_pCbMeth = (void (CDummy::*)(TCPSocketEvent)) pMethod; } - void resetOnEvent(); //Disable callback + ///Disables callback + void resetOnEvent(); protected: void onNetTcpSocketEvent(NetTcpSocketEvent e);