pefect / NetworkSocketAPI

Dependencies:   DnsQuery

Dependents:   WizFi310_TCP_Echo_Server_Example

Fork of NetworkSocketAPI by NetworkSocketAPI

Committer:
Christopher Haster
Date:
Thu Feb 18 04:09:00 2016 -0600
Branch:
api-changes
Revision:
24:a5e959bdd2dd
Parent:
23:1e86d9fb3d86
Child:
26:9774a2edad71
Added setURL for DNS lookups

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:d35446f60233 1 /* SocketInterface Base Class
sam_grove 0:d35446f60233 2 * Copyright (c) 2015 ARM Limited
sam_grove 0:d35446f60233 3 *
sam_grove 0:d35446f60233 4 * Licensed under the Apache License, Version 2.0 (the "License");
sam_grove 0:d35446f60233 5 * you may not use this file except in compliance with the License.
sam_grove 0:d35446f60233 6 * You may obtain a copy of the License at
sam_grove 0:d35446f60233 7 *
sam_grove 0:d35446f60233 8 * http://www.apache.org/licenses/LICENSE-2.0
sam_grove 0:d35446f60233 9 *
sam_grove 0:d35446f60233 10 * Unless required by applicable law or agreed to in writing, software
sam_grove 0:d35446f60233 11 * distributed under the License is distributed on an "AS IS" BASIS,
sam_grove 0:d35446f60233 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sam_grove 0:d35446f60233 13 * See the License for the specific language governing permissions and
sam_grove 0:d35446f60233 14 * limitations under the License.
sam_grove 0:d35446f60233 15 */
sam_grove 8:4b7f97a5597b 16
Christopher Haster 21:35ed15069189 17 #ifndef SOCKET_INTERFACE_H
Christopher Haster 21:35ed15069189 18 #define SOCKET_INTERFACE_H
bridadan 2:ce08986b18b5 19
sam_grove 8:4b7f97a5597b 20 #include "stdint.h"
sam_grove 8:4b7f97a5597b 21
sam_grove 8:4b7f97a5597b 22
Christopher Haster 21:35ed15069189 23 /** Enum of socket protocols
sam_grove 8:4b7f97a5597b 24 */
sam_grove 8:4b7f97a5597b 25 typedef enum {
sam_grove 8:4b7f97a5597b 26 SOCK_TCP, /*!< Socket connection over TCP */
sam_grove 8:4b7f97a5597b 27 SOCK_UDP, /*!< Socket connection over UDP */
sam_grove 8:4b7f97a5597b 28 } socket_protocol_t;
sam_grove 8:4b7f97a5597b 29
Christopher Haster 21:35ed15069189 30
Christopher Haster 21:35ed15069189 31 /** SocketInterface class
Christopher Haster 21:35ed15069189 32 * Common interface for implementation specific sockets created through
Christopher Haster 21:35ed15069189 33 * network interfaces. This class is used internally by the
Christopher Haster 21:35ed15069189 34 * TCPSocket and UDPSocket classes
sam_grove 8:4b7f97a5597b 35 */
Christopher Haster 21:35ed15069189 36 class SocketInterface
sam_grove 8:4b7f97a5597b 37 {
sam_grove 8:4b7f97a5597b 38 public:
Christopher Haster 23:1e86d9fb3d86 39 SocketInterface();
Christopher Haster 23:1e86d9fb3d86 40 virtual ~SocketInterface();
sam_grove 8:4b7f97a5597b 41
Christopher Haster 21:35ed15069189 42
Christopher Haster 24:a5e959bdd2dd 43 /** Set the URL of the socket
Christopher Haster 24:a5e959bdd2dd 44 * Performs DNS lookup if necessary
Christopher Haster 24:a5e959bdd2dd 45 * @param url URL to connect to
Christopher Haster 24:a5e959bdd2dd 46 */
Christopher Haster 24:a5e959bdd2dd 47 virtual void setURL(const char *url) = 0;
Christopher Haster 24:a5e959bdd2dd 48
Christopher Haster 21:35ed15069189 49 /** Set the IP address of the socket
Christopher Haster 21:35ed15069189 50 * @param ip IP address to connect to, copied internally
sam_grove 8:4b7f97a5597b 51 */
Christopher Haster 21:35ed15069189 52 virtual void setIPAddress(const char *ip);
sam_grove 16:658d4943c753 53
Christopher Haster 21:35ed15069189 54 /** Set the port of the socket
Christopher Haster 21:35ed15069189 55 * @param port Port to connect to
sam_grove 8:4b7f97a5597b 56 */
Christopher Haster 21:35ed15069189 57 virtual void setPort(uint16_t port);
sam_grove 8:4b7f97a5597b 58
Christopher Haster 21:35ed15069189 59 /** Get the IP address
Christopher Haster 21:35ed15069189 60 * @return IP address to connect to
sam_grove 8:4b7f97a5597b 61 */
Christopher Haster 21:35ed15069189 62 virtual const char *getIPAddress();
Christopher Haster 21:35ed15069189 63
Christopher Haster 21:35ed15069189 64 /** Get the port
Christopher Haster 21:35ed15069189 65 * @return Port to connect to
Christopher Haster 21:35ed15069189 66 */
Christopher Haster 21:35ed15069189 67 virtual uint16_t getPort();
Christopher Haster 21:35ed15069189 68
sam_grove 8:4b7f97a5597b 69
Christopher Haster 21:35ed15069189 70 /** Open a connection to the underlying address
Christopher Haster 21:35ed15069189 71 * Only used for TCP sockets
Christopher Haster 21:35ed15069189 72 * @return 0 on success
sam_grove 8:4b7f97a5597b 73 */
Christopher Haster 21:35ed15069189 74 virtual int32_t open() = 0;
Christopher Haster 21:35ed15069189 75
Christopher Haster 21:35ed15069189 76 /** Close an open connection
Christopher Haster 21:35ed15069189 77 * Only used for TCP sockets
Christopher Haster 21:35ed15069189 78 * @return 0 on success
Christopher Haster 21:35ed15069189 79 */
Christopher Haster 21:35ed15069189 80 virtual int32_t close() = 0;
sam_grove 8:4b7f97a5597b 81
Christopher Haster 21:35ed15069189 82 /** Send data
Christopher Haster 21:35ed15069189 83 * @param data Buffer of data to send
Christopher Haster 21:35ed15069189 84 * @param len Size of data to send
Christopher Haster 21:35ed15069189 85 * @param timeout_ms Maximum amount of time to wait
Christopher Haster 21:35ed15069189 86 * @return 0 on success
sam_grove 8:4b7f97a5597b 87 */
Christopher Haster 22:4fca633c0633 88 virtual int32_t send(const void *data, uint32_t len, uint32_t timeout_ms) = 0;
sam_grove 8:4b7f97a5597b 89
Christopher Haster 21:35ed15069189 90 /** In client or server mode receive data
Christopher Haster 21:35ed15069189 91 * @param data a buffer to store the data in
Christopher Haster 21:35ed15069189 92 * @param amount The amount of data to receive
Christopher Haster 21:35ed15069189 93 * @param timeout_ms The longest time to wait for the data
Christopher Haster 21:35ed15069189 94 * @return Number of bytes sent or a negative value on failure
sam_grove 8:4b7f97a5597b 95 */
Christopher Haster 22:4fca633c0633 96 virtual int32_t recv(void *data, uint32_t len, uint32_t timeout_ms) = 0;
Christopher Haster 21:35ed15069189 97
Christopher Haster 21:35ed15069189 98 private:
Christopher Haster 21:35ed15069189 99 char *_ip_address;
sarahmarshy 13:f84e69b3fdd3 100 uint16_t _port;
sam_grove 8:4b7f97a5597b 101 };
sam_grove 8:4b7f97a5597b 102
bridadan 1:291a9d61e58a 103 #endif