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 27:d7ed39727306, committed 2016-02-18
- Comitter:
- Christopher Haster
- Date:
- Thu Feb 18 09:20:39 2016 -0600
- Branch:
- api-changes
- Parent:
- 26:9774a2edad71
- Child:
- 28:163fbe3263f4
- Commit message:
- Added better behaviour for urls in constructors
Changed in this revision
--- a/Socket.cpp Thu Feb 18 06:16:11 2016 -0600
+++ b/Socket.cpp Thu Feb 18 09:20:39 2016 -0600
@@ -15,6 +15,8 @@
*/
#include "Socket.h"
+#include <cstdlib>
+#include <cstring>
Socket::Socket(
NetworkInterface *iface,
@@ -23,36 +25,74 @@
uint16_t port)
: _iface(iface)
, _proto(proto)
- , _socket(0) {
- if (url) setURL(url);
- if (port) setPort(port);
+ , _socket(0)
+ , _pending_url(0)
+ , _pending_ip(0)
+ , _pending_port(0) {
+
+ if (url) {
+ _pending_url = (char*)malloc(strlen(url)+1);
+ strcpy(_pending_url, url);
+ }
+
+ if (port) {
+ _pending_port = port;
+ }
}
Socket::~Socket() {
if (_socket) _iface->destroySocket(_socket);
+ free(_pending_url);
+ free(_pending_ip);
}
SocketInterface *Socket::_get_socket() {
- if (!_socket) _socket = _iface->createSocket(_proto);
+ if (!_socket) {
+ _socket = _iface->createSocket(_proto);
+
+ if (_pending_url) {
+ _socket->setURL(_pending_url);
+ free(_pending_url);
+ _pending_url = 0;
+ }
+
+ if (_pending_ip) {
+ _socket->setIPAddress(_pending_ip);
+ free(_pending_ip);
+ _pending_ip = 0;
+ }
+
+ if (_pending_port) {
+ _socket->setPort(_pending_port);
+ _pending_port = 0;
+ }
+ }
+
return _socket;
}
-void Socket::setURL(const char *url) {
+int32_t Socket::setURL(const char *url) {
SocketInterface *s = _get_socket();
- if (!s) return;
- s->setURL(url);
+ if (!s) return -2;
+ return s->setURL(url);
}
void Socket::setIPAddress(const char *ip) {
- SocketInterface *s = _get_socket();
- if (!s) return;
- s->setIPAddress(ip);
+ if (!_socket) {
+ free(_pending_ip);
+ _pending_ip = (char*)malloc(strlen(ip)+1);
+ strcpy(_pending_ip, ip);
+ } else {
+ _socket->setIPAddress(ip);
+ }
}
void Socket::setPort(uint16_t port) {
- SocketInterface *s = _get_socket();
- if (!s) return;
- s->setPort(port);
+ if (!_socket) {
+ _pending_port = port;
+ } else {
+ _socket->setPort(port);
+ }
}
const char *Socket::getIPAddress() {
--- a/Socket.h Thu Feb 18 06:16:11 2016 -0600
+++ b/Socket.h Thu Feb 18 09:20:39 2016 -0600
@@ -29,8 +29,9 @@
/** Set the URL of the socket
* Performs DNS lookup if necessary
* @param url URL to connect to
+ * @return 0 on success
*/
- void setURL(const char *url);
+ int32_t setURL(const char *url);
/** Set the IP address of the socket
* @param ip IP address to connect to, copied internally
@@ -83,6 +84,10 @@
NetworkInterface *_iface;
socket_protocol_t _proto;
SocketInterface *_socket;
+
+ char *_pending_url;
+ char *_pending_ip;
+ uint16_t _pending_port;
};
#endif
--- a/SocketInterface.h Thu Feb 18 06:16:11 2016 -0600
+++ b/SocketInterface.h Thu Feb 18 09:20:39 2016 -0600
@@ -39,8 +39,9 @@
/** Set the URL of the socket
* Performs DNS lookup if necessary
* @param url URL to connect to
+ * @return 0 on success
*/
- virtual void setURL(const char *url) = 0;
+ virtual int32_t setURL(const char *url) = 0;
/** Set the IP address of the socket
* @param ip IP address to connect to, copied internally
--- a/TCPSocket.h Thu Feb 18 06:16:11 2016 -0600
+++ b/TCPSocket.h Thu Feb 18 09:20:39 2016 -0600
@@ -27,8 +27,9 @@
{
public:
/** Create a socket using the specified network interface
+ * No network operations are performed until the socket is actually used
* @param iface The network interface to use
- * @param ip Optional URL to connect to, copied internally
+ * @param url Optional URL to connect to, copied internally
* @param port Optional port to connect to
*/
TCPSocket(NetworkInterface *iface, const char *url = 0, uint16_t port = 0);
--- a/UDPSocket.h Thu Feb 18 06:16:11 2016 -0600
+++ b/UDPSocket.h Thu Feb 18 09:20:39 2016 -0600
@@ -27,6 +27,7 @@
{
public:
/** Create a socket using the specified network interface
+ * No network operations are performed until the socket is actually used
* @param iface The network interface to use
* @param ip Optional URL to connect to, copied internally
* @param port Optional port to connect to
