Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: HelloWizFi250Interface
Fork of NetworkSocketAPI by
Revision 41:3ec1c97e9bbf, committed 2016-02-23
- Comitter:
- Christopher Haster
- Date:
- Tue Feb 23 04:01:38 2016 -0600
- Branch:
- api-changes
- Parent:
- 40:11d4a94df3f7
- Child:
- 42:49893d13c432
- Commit message:
- Moved timeout handling to setTimeout/getTimeout functions
Changed in this revision
--- a/EthernetInterface.h Mon Feb 22 23:52:09 2016 -0600
+++ b/EthernetInterface.h Tue Feb 23 04:01:38 2016 -0600
@@ -27,10 +27,9 @@
{
public:
/** Start the interface
- * @param timeout_ms Time in milliseconds to wait for a connection
* @return 0 on success
*/
- virtual int32_t connect(uint32_t timeout_ms = 15000) = 0;
+ virtual int32_t connect() = 0;
/** Stop the interface
* @return 0 on success
--- a/NetworkInterface.cpp Mon Feb 22 23:52:09 2016 -0600
+++ b/NetworkInterface.cpp Tue Feb 23 04:01:38 2016 -0600
@@ -20,6 +20,7 @@
#include <string.h>
NetworkInterface::NetworkInterface()
+ : _timeout(15000)
{
memset(_ip_address, 0, SOCK_IP_SIZE);
memset(_network_mask, 0, SOCK_IP_SIZE);
@@ -75,6 +76,16 @@
}
}
+void NetworkInterface::setTimeout(uint32_t timeout)
+{
+ _timeout = timeout;
+}
+
+uint32_t NetworkInterface::getTimeout()
+{
+ return _timeout;
+}
+
bool NetworkInterface::isConnected()
{
return getIPAddress() != 0;
--- a/NetworkInterface.h Mon Feb 22 23:52:09 2016 -0600
+++ b/NetworkInterface.h Tue Feb 23 04:01:38 2016 -0600
@@ -70,12 +70,23 @@
* @return String MAC address of the interface
*/
virtual const char *getMACAddress() = 0;
+
+ /** Set a timeout on network operations
+ * @param timeout Maximum time in milliseconds for socket operations
+ */
+ virtual void setTimeout(uint32_t timeout);
+
+ /** Get the current timeout on network operations
+ * @return Maximum time in milliseconds for socket operations
+ */
+ virtual uint32_t getTimeout();
+
/** Get the current status of the interface
* @return true if connected
*/
virtual bool isConnected(void);
-
+
/** Looks up the specified host's IP address
* @param name URL of host
* @param ip Buffer to hold IP address, must be at least SOCK_IP_SIZE
@@ -104,6 +115,7 @@
char _ip_address[SOCK_IP_SIZE];
char _network_mask[SOCK_IP_SIZE];
char _gateway[SOCK_IP_SIZE];
+ uint32_t _timeout;
};
#endif
--- a/Socket.cpp Mon Feb 22 23:52:09 2016 -0600
+++ b/Socket.cpp Tue Feb 23 04:01:38 2016 -0600
@@ -24,6 +24,8 @@
{
memset(_ip_address, 0, SOCK_IP_SIZE);
_port = 0;
+
+ _timeout = iface->getTimeout();
}
Socket::~Socket()
@@ -75,6 +77,20 @@
return _port;
}
+void Socket::setTimeout(uint32_t timeout)
+{
+ _timeout = timeout;
+
+ if (_socket) {
+ _socket->setTimeout(timeout);
+ }
+}
+
+uint32_t Socket::getTimeout() const
+{
+ return _timeout;
+}
+
bool Socket::isConnected()
{
if (!_socket) {
@@ -86,13 +102,13 @@
int32_t Socket::open(const char *url, uint16_t port)
{
- if (_socket) {
- int32_t err = close();
- if (err) return err;
- }
+ int32_t err;
+
+ err = close();
+ if (err) return err;
if (url) {
- int32_t err = setURL(url);
+ err = setURL(url);
if (err) return err;
}
@@ -107,7 +123,9 @@
_socket = _iface->createSocket(_proto);
if (!_socket) return -2;
- int32_t err = _socket->open(_ip_address, _port);
+ _socket->setTimeout(_timeout);
+
+ err = _socket->open(_ip_address, _port);
if (err) {
_iface->destroySocket(_socket);
@@ -129,15 +147,15 @@
return err;
}
-int32_t Socket::send(const void *data, uint32_t len, uint32_t timeout_ms)
+int32_t Socket::send(const void *data, uint32_t len)
{
if (!_socket) return -2;
- return _socket->send(data, len, timeout_ms);
+ return _socket->send(data, len);
}
-int32_t Socket::recv(void *data, uint32_t len, uint32_t timeout_ms)
+int32_t Socket::recv(void *data, uint32_t len)
{
if (!_socket) return -2;
- return _socket->recv(data, len, timeout_ms);
+ return _socket->recv(data, len);
}
--- a/Socket.h Mon Feb 22 23:52:09 2016 -0600
+++ b/Socket.h Tue Feb 23 04:01:38 2016 -0600
@@ -53,6 +53,16 @@
*/
uint16_t getPort() const;
+ /** Set a timeout on network operations
+ * @param timeout Maximum time in milliseconds for socket operations
+ */
+ void setTimeout(uint32_t timeout);
+
+ /** Get the current timeout on network operations
+ * @return Maximum time in milliseconds for socket operations
+ */
+ uint32_t getTimeout() const;
+
/** Returns status of socket
* @return true if connected
*/
@@ -74,18 +84,16 @@
/** Send data over the socket
* @param data Buffer of data to send
* @param len Size of data to send
- * @param timeout_ms Maximum amount of time to wait
* @return 0 on success
*/
- int32_t send(const void *data, uint32_t len, uint32_t timeout_ms = 15000);
+ int32_t send(const void *data, uint32_t len);
/** Recieve data over the socket
* @param data Buffer to store recieved data
* @param len Size of provided buffer
- * @param timeout_ms Maximum amount of time to wait
* @return Number of bytes sent or a negative value on failure
*/
- int32_t recv(void *data, uint32_t len, uint32_t timeout_ms = 15000);
+ int32_t recv(void *data, uint32_t len);
protected:
@@ -99,6 +107,7 @@
char _ip_address[SOCK_IP_SIZE];
uint16_t _port;
+ uint32_t _timeout;
};
#endif
--- a/SocketInterface.cpp Mon Feb 22 23:52:09 2016 -0600
+++ b/SocketInterface.cpp Tue Feb 23 04:01:38 2016 -0600
@@ -16,9 +16,10 @@
#include "SocketInterface.h"
-// By default setIPAddress/setPort has no special behaviour
-void SocketInterface::setIPAddress(const char *ip) {}
-void SocketInterface::setPort(uint16_t port) {}
+// By default set hooks have no special behaviour
+void SocketInterface::setIPAddress(const char *) {}
+void SocketInterface::setPort(uint16_t) {}
+void SocketInterface::setTimeout(uint32_t) {}
// By default isConnected is always true if the socket
// was created successfully
--- a/SocketInterface.h Mon Feb 22 23:52:09 2016 -0600
+++ b/SocketInterface.h Tue Feb 23 04:01:38 2016 -0600
@@ -37,7 +37,7 @@
{
public:
/** Set the IP address of the socket
- * @param ip IP address to connect to, copied internally
+ * @param ip IP address to connect to
*/
virtual void setIPAddress(const char *ip);
@@ -46,6 +46,11 @@
*/
virtual void setPort(uint16_t port);
+ /** Set a timeout on network operations
+ * @param timeout Maximum time in milliseconds for socket operations
+ */
+ virtual void setTimeout(uint32_t timeout);
+
/** Status of the socket
* @return True if connected
*/
@@ -66,18 +71,16 @@
/** Send data
* @param data Buffer of data to send
* @param len Size of data to send
- * @param timeout_ms Maximum amount of time to wait
* @return 0 on success
*/
- virtual int32_t send(const void *data, uint32_t len, uint32_t timeout_ms) = 0;
+ virtual int32_t send(const void *data, uint32_t len) = 0;
/** In client or server mode receive data
* @param data a buffer to store the data in
* @param amount The amount of data to receive
- * @param timeout_ms The longest time to wait for the data
* @return Number of bytes sent or a negative value on failure
*/
- virtual int32_t recv(void *data, uint32_t len, uint32_t timeout_ms) = 0;
+ virtual int32_t recv(void *data, uint32_t len) = 0;
};
#endif
--- a/WiFiInterface.h Mon Feb 22 23:52:09 2016 -0600
+++ b/WiFiInterface.h Tue Feb 23 04:01:38 2016 -0600
@@ -39,14 +39,12 @@
* @param ssid Name of the network to connect to
* @param pass Security passphrase to connect to the network
* @param security Type of encryption to connect with
- * @param timeout_ms Time in milliseconds to wait for a connection
* @return 0 on success
*/
virtual int32_t connect(
const char *ssid,
const char *pass,
- wifi_security_t security = WI_NONE,
- uint32_t timeout_ms = 15000) = 0;
+ wifi_security_t security = WI_NONE) = 0;
/** Stop the interface
* @return 0 on success
