NetworkSocketAPI
Dependents: HelloWizFi250Interface
Fork of NetworkSocketAPI by
Socket.cpp
- Committer:
- Christopher Haster
- Date:
- 2016-02-18
- Branch:
- api-changes
- Revision:
- 27:d7ed39727306
- Parent:
- 25:ed7b2a52e8ac
- Child:
- 28:163fbe3263f4
File content as of revision 27:d7ed39727306:
/* Socket * Copyright (c) 2015 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Socket.h" #include <cstdlib> #include <cstring> Socket::Socket( NetworkInterface *iface, socket_protocol_t proto, const char *url, uint16_t port) : _iface(iface) , _proto(proto) , _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 (_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; } int32_t Socket::setURL(const char *url) { SocketInterface *s = _get_socket(); if (!s) return -2; return s->setURL(url); } void Socket::setIPAddress(const char *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) { if (!_socket) { _pending_port = port; } else { _socket->setPort(port); } } const char *Socket::getIPAddress() { SocketInterface *s = _get_socket(); if (!s) return 0; return s->getIPAddress(); } uint16_t Socket::getPort() { SocketInterface *s = _get_socket(); if (!s) return 0; return s->getPort(); } int32_t Socket::send(const void *data, uint32_t len, uint32_t timeout_ms) { SocketInterface *s = _get_socket(); if (!s) return -2; return s->send(data, len, timeout_ms); } int32_t Socket::recv(void *data, uint32_t len, uint32_t timeout_ms) { SocketInterface *s = _get_socket(); if (!s) return -2; return s->recv(data, len, timeout_ms); }