Refactor to use new protocol module and sipo.
[bertos.git] / bertos / net / tcp_socket.h
index 0791c187864ba3cd4910f3f4b637ce96781cee49..a5eef82525224add2b206cd9c2ad520360beafb2 100644 (file)
 #include <lwip/netif.h>
 #include <lwip/ip_addr.h>
 
+typedef void (*tcphandler_t)(KFile *fd);
+
 typedef struct TcpSocket
 {
-       KFile fd;
-       struct netconn *sock;
-       struct netbuf *rx_buf_conn;
-       size_t remaning_data_len;
+       KFile fd;                         ///< KFile context.
+       struct netconn *sock;             ///< Current socket connection.
+       struct netbuf *rx_buf_conn;       ///< Current received buffer from socket.
+       size_t remaning_data_len;         ///< Number of bytes to read from the received buffer.
+
+       struct ip_addr *local_addr;       ///< Device Ip.
+       struct ip_addr *remote_addr;      ///< Ip address which we want to connect.
+       uint16_t port;                    ///< Number port to connect.
 
-       struct ip_addr *local_addr;
-       struct ip_addr *remote_addr;
-       uint16_t port;
+       int error;                        ///< Error status.
 
-       int error;
+       struct netconn *server_sock;      ///< Server sockect connection.
+       tcphandler_t handler;             ///< TCP handler when are in server mode.
 } TcpSocket;
 
 #define KFT_TCPSOCKET MAKE_ID('T', 'S', 'C', 'K')
@@ -70,4 +75,7 @@ INLINE TcpSocket *TCPSOCKET_CAST(KFile *fd)
 
 void tcpsocket_init(TcpSocket *socket, struct ip_addr *local_addr, struct ip_addr *remote_addr, uint16_t port);
 
+void tcpsocket_serverPoll(KFile *fd);
+void tcpsocket_serverInit(TcpSocket *socket, struct ip_addr *local_addr, struct ip_addr *remote_addr, uint16_t port, tcphandler_t handler);
+
 #endif /* NET_TCP_SOCKET_H */