blob: 1860002f33e390ffd6290d2aa9305ca0cfdf0574 [file] [log] [blame]
Jeff Thompson7850d782013-07-14 17:59:14 -07001/*
2 * File: TcpTransport.h
3 * Author: jefft0
4 *
5 * Created on July 14, 2013, 4:15 PM
6 */
7
8#ifndef NDN_TCPTRANSPORT_H
Jeff Thompson2d27e2f2013-08-09 12:55:00 -07009#define NDN_TCPTRANSPORT_H
Jeff Thompson7850d782013-07-14 17:59:14 -070010
Jeff Thompson53412192013-08-06 13:35:50 -070011#include "socket-transport.h"
Jeff Thompson0d567da2013-07-14 22:10:21 -070012
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070013#ifdef __cplusplus
Jeff Thompson7850d782013-07-14 17:59:14 -070014extern "C" {
15#endif
16
17struct ndn_TcpTransport {
Jeff Thompson0aa754a2013-07-17 17:42:28 -070018 struct ndn_SocketTransport base;
Jeff Thompson7850d782013-07-14 17:59:14 -070019};
20
Jeff Thompson432c8be2013-08-09 16:16:08 -070021/**
22 * Initialize the ndn_TcpTransport struct with default values for no connection yet.
23 * @param self A pointer to the ndn_TcpTransport struct.
24 */
Jeff Thompson0d567da2013-07-14 22:10:21 -070025static inline void ndn_TcpTransport_init(struct ndn_TcpTransport *self)
Jeff Thompson7850d782013-07-14 17:59:14 -070026{
Jeff Thompson0aa754a2013-07-17 17:42:28 -070027 ndn_SocketTransport_init(&self->base);
Jeff Thompson7850d782013-07-14 17:59:14 -070028}
29
Jeff Thompson432c8be2013-08-09 16:16:08 -070030/**
31 * Connect with TCP to the host:port.
32 * @param self A pointer to the ndn_TcpTransport struct.
33 * @param host The host to connect to.
34 * @param port The port to connect to.
35 * @return 0 for success, else an error code.
36 */
Jeff Thompson0aa754a2013-07-17 17:42:28 -070037static inline ndn_Error ndn_TcpTransport_connect(struct ndn_TcpTransport *self, char *host, unsigned short port)
38{
39 return ndn_SocketTransport_connect(&self->base, SOCKET_TCP, host, port);
40}
Jeff Thompson0d567da2013-07-14 22:10:21 -070041
Jeff Thompson432c8be2013-08-09 16:16:08 -070042/**
43 * Send data to the socket.
44 * @param self A pointer to the ndn_TcpTransport struct.
45 * @param data A pointer to the buffer of data to send.
46 * @param dataLength The number of bytes in data.
47 * @return 0 for success, else an error code.
48 */
Jeff Thompson0aa754a2013-07-17 17:42:28 -070049static inline ndn_Error ndn_TcpTransport_send(struct ndn_TcpTransport *self, unsigned char *data, unsigned int dataLength)
50{
51 return ndn_SocketTransport_send(&self->base, data, dataLength);
52}
Jeff Thompson0d567da2013-07-14 22:10:21 -070053
Jeff Thompson432c8be2013-08-09 16:16:08 -070054/**
55 * Check if there is data ready on the socket to be received with ndn_TcpTransport_receive.
56 * @param self A pointer to the ndn_TcpTransport struct.
57 * @param receiveIsReady This will be set to 1 if data is ready, 0 if not.
58 * @return 0 for success, else an error code.
59 */
60static inline ndn_Error ndn_TcpTransport_receiveIsReady(struct ndn_TcpTransport *self, int *receiveIsReady)
61{
62 return ndn_SocketTransport_receiveIsReady(&self->base, receiveIsReady);
63}
64
65/**
66 * Receive data from the socket. NOTE: This is a blocking call. You should first call ndn_SocketTransport_receiveIsReady
67 * to make sure there is data ready to receive.
68 * @param self A pointer to the ndn_TcpTransport struct.
69 * @param buffer A pointer to the buffer to receive the data.
70 * @param bufferLength The maximum length of buffer.
71 * @param nBytes Return the number of bytes received into buffer.
72 * @return 0 for success, else an error code.
73 */
Jeff Thompson0aa754a2013-07-17 17:42:28 -070074static inline ndn_Error ndn_TcpTransport_receive
75 (struct ndn_TcpTransport *self, unsigned char *buffer, unsigned int bufferLength, unsigned int *nBytes)
76{
77 return ndn_SocketTransport_receive(&self->base, buffer, bufferLength, nBytes);
78}
Jeff Thompson0d567da2013-07-14 22:10:21 -070079
Jeff Thompson432c8be2013-08-09 16:16:08 -070080/**
81 * Close the socket.
82 * @param self A pointer to the ndn_TcpTransport struct.
83 * @return 0 for success, else an error code.
84 */
Jeff Thompson57963882013-08-05 16:01:25 -070085static inline ndn_Error ndn_TcpTransport_close(struct ndn_TcpTransport *self)
86{
87 return ndn_SocketTransport_close(&self->base);
88}
89
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070090#ifdef __cplusplus
Jeff Thompson7850d782013-07-14 17:59:14 -070091}
92#endif
93
94#endif