NetworkSocketAPI

Dependencies:   DnsQuery

Dependents:   HelloWizFi250Interface

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Thu Feb 18 03:11:58 2016 -0600
Branch:
api-changes
Revision:
21:35ed15069189
Child:
24:a5e959bdd2dd
Added UDPSocket and TCPSocket API and changes to core API

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 21:35ed15069189 1 /* TCPSocket
Christopher Haster 21:35ed15069189 2 * Copyright (c) 2015 ARM Limited
Christopher Haster 21:35ed15069189 3 *
Christopher Haster 21:35ed15069189 4 * Licensed under the Apache License, Version 2.0 (the "License");
Christopher Haster 21:35ed15069189 5 * you may not use this file except in compliance with the License.
Christopher Haster 21:35ed15069189 6 * You may obtain a copy of the License at
Christopher Haster 21:35ed15069189 7 *
Christopher Haster 21:35ed15069189 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 21:35ed15069189 9 *
Christopher Haster 21:35ed15069189 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 21:35ed15069189 11 * distributed under the License is distributed on an "AS IS" BASIS,
Christopher Haster 21:35ed15069189 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 21:35ed15069189 13 * See the License for the specific language governing permissions and
Christopher Haster 21:35ed15069189 14 * limitations under the License.
Christopher Haster 21:35ed15069189 15 */
Christopher Haster 21:35ed15069189 16
Christopher Haster 21:35ed15069189 17 #ifndef TCP_SOCKET_H
Christopher Haster 21:35ed15069189 18 #define TCP_SOCKET_H
Christopher Haster 21:35ed15069189 19
Christopher Haster 21:35ed15069189 20 #include "NetworkInterface.h"
Christopher Haster 21:35ed15069189 21
Christopher Haster 21:35ed15069189 22 /** TCPSocket class
Christopher Haster 21:35ed15069189 23 * API for handling TCP sockets. The implementation is determined
Christopher Haster 21:35ed15069189 24 * by the interface passed during construction.
Christopher Haster 21:35ed15069189 25 */
Christopher Haster 21:35ed15069189 26 class TCPSocket
Christopher Haster 21:35ed15069189 27 {
Christopher Haster 21:35ed15069189 28 public:
Christopher Haster 21:35ed15069189 29 /** Create a socket using the specified network interface
Christopher Haster 21:35ed15069189 30 * @param iface The network interface to use
Christopher Haster 21:35ed15069189 31 * @param ip Optional ip address to connect to, copied internally
Christopher Haster 21:35ed15069189 32 * @param port Optional port to connect to
Christopher Haster 21:35ed15069189 33 */
Christopher Haster 21:35ed15069189 34 TCPSocket(NetworkInterface *iface, const char *ip = 0, uint16_t port = 0);
Christopher Haster 21:35ed15069189 35
Christopher Haster 21:35ed15069189 36 /** Closes and destroys the socket
Christopher Haster 21:35ed15069189 37 */
Christopher Haster 21:35ed15069189 38 ~TCPSocket();
Christopher Haster 21:35ed15069189 39
Christopher Haster 21:35ed15069189 40
Christopher Haster 21:35ed15069189 41 /** Set the IP address of the socket
Christopher Haster 21:35ed15069189 42 * @param ip IP address to connect to, copied internally
Christopher Haster 21:35ed15069189 43 */
Christopher Haster 21:35ed15069189 44 void setIPAddress(const char *ip);
Christopher Haster 21:35ed15069189 45
Christopher Haster 21:35ed15069189 46 /** Set the port of the socket
Christopher Haster 21:35ed15069189 47 * @param port Port to connect to
Christopher Haster 21:35ed15069189 48 */
Christopher Haster 21:35ed15069189 49 void setPort(uint16_t port);
Christopher Haster 21:35ed15069189 50
Christopher Haster 21:35ed15069189 51 /** Gets the IP address
Christopher Haster 21:35ed15069189 52 * @return IP address to connect to
Christopher Haster 21:35ed15069189 53 */
Christopher Haster 21:35ed15069189 54 const char *getIPAddress();
Christopher Haster 21:35ed15069189 55
Christopher Haster 21:35ed15069189 56 /** Gets the port
Christopher Haster 21:35ed15069189 57 * @return Port to connect to
Christopher Haster 21:35ed15069189 58 */
Christopher Haster 21:35ed15069189 59 uint16_t getPort();
Christopher Haster 21:35ed15069189 60
Christopher Haster 21:35ed15069189 61
Christopher Haster 21:35ed15069189 62 /** Open a connection to the underlying address
Christopher Haster 21:35ed15069189 63 * @return 0 on success
Christopher Haster 21:35ed15069189 64 */
Christopher Haster 21:35ed15069189 65 int32_t open();
Christopher Haster 21:35ed15069189 66
Christopher Haster 21:35ed15069189 67 /** Close an open connection
Christopher Haster 21:35ed15069189 68 * @return 0 on success
Christopher Haster 21:35ed15069189 69 */
Christopher Haster 21:35ed15069189 70 int32_t close();
Christopher Haster 21:35ed15069189 71
Christopher Haster 21:35ed15069189 72 /** Send data over TCP
Christopher Haster 21:35ed15069189 73 * @param data Buffer of data to send
Christopher Haster 21:35ed15069189 74 * @param len Size of data to send
Christopher Haster 21:35ed15069189 75 * @param timeout_ms Maximum amount of time to wait
Christopher Haster 21:35ed15069189 76 * @return 0 on success
Christopher Haster 21:35ed15069189 77 */
Christopher Haster 21:35ed15069189 78 int32_t send(const void *data, uint32_t len, uint32_t timeout_ms = 15000);
Christopher Haster 21:35ed15069189 79
Christopher Haster 21:35ed15069189 80 /** Recieve data over TCP
Christopher Haster 21:35ed15069189 81 * @param data Buffer to store recieved data
Christopher Haster 21:35ed15069189 82 * @param len Size of provided buffer
Christopher Haster 21:35ed15069189 83 * @param timeout_ms Maximum amount of time to wait
Christopher Haster 21:35ed15069189 84 * @return Number of bytes sent or a negative value on failure
Christopher Haster 21:35ed15069189 85 */
Christopher Haster 21:35ed15069189 86 int32_t recv(void *data, uint32_t len, uint32_t timeout_ms = 15000);
Christopher Haster 21:35ed15069189 87
Christopher Haster 21:35ed15069189 88 private:
Christopher Haster 21:35ed15069189 89 NetworkInterface *_iface;
Christopher Haster 21:35ed15069189 90 SocketInterface *_socket;
Christopher Haster 21:35ed15069189 91 };
Christopher Haster 21:35ed15069189 92
Christopher Haster 21:35ed15069189 93 #endif