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.
Fork of WizFi310Interface_Legacynew by
UDPSocket.cpp
00001 /* 00002 * Copyright (C) 2013 gsfan, MIT License 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 00005 * and associated documentation files (the "Software"), to deal in the Software without restriction, 00006 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 00007 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 00008 * furnished to do so, subject to the following conditions: 00009 * 00010 * The above copyright notice and this permission notice shall be included in all copies or 00011 * substantial portions of the Software. 00012 * 00013 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 00014 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00015 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 00016 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00017 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00018 */ 00019 /* Copyright (C) 2014 Wiznet, MIT License 00020 * port to the Wiznet Module WizFi250 00021 */ 00022 /* Copyright (C) 2017 Wiznet, MIT License 00023 * port to the Wiznet Module WizFi310 00024 */ 00025 00026 #include "UDPSocket.h" 00027 00028 #include <string> 00029 #include <algorithm> 00030 00031 UDPSocket::UDPSocket() 00032 { 00033 endpoint_connected = false; 00034 } 00035 00036 int UDPSocket::init(void) 00037 { 00038 _server = false; 00039 return 0; 00040 } 00041 00042 // Server initialization 00043 int UDPSocket::bind(int port) 00044 { 00045 if(port == 0) 00046 { 00047 _port = 5000; 00048 _server = false; 00049 } 00050 else 00051 { 00052 _port = port; 00053 _server = true; 00054 } 00055 00056 return 0; 00057 } 00058 00059 int UDPSocket::sendTo(Endpoint &remote, char *packet, int length) 00060 { 00061 Timer tmr; 00062 int idx = 0; 00063 00064 if (_cid < 0 && _wizfi310->isAssociated()) 00065 { 00066 if (_server) 00067 { 00068 _cid = _wizfi310->listen(WizFi310::PROTO_UDP, _port); 00069 } 00070 else 00071 { 00072 _cid = _wizfi310->open(WizFi310::PROTO_UDP, remote.get_address(), remote.get_port(), _port); 00073 } 00074 if (_cid < 0) return -1; 00075 } 00076 00077 tmr.start(); 00078 00079 while ((tmr.read_ms() < _timeout) || _blocking) 00080 { 00081 if(_server) 00082 { 00083 idx += _wizfi310->sendto(_cid, packet, length, remote.get_address(), remote.get_port()); 00084 } 00085 else 00086 { 00087 idx += _wizfi310->send(_cid, packet, length); 00088 } 00089 if (idx < 0) 00090 { 00091 if (!_wizfi310->isConnected(_cid)) _cid = -1; 00092 } 00093 00094 if (idx == length) 00095 return idx; 00096 } 00097 return (idx == 0) ? -1 : idx; 00098 } 00099 00100 00101 int UDPSocket::receiveFrom(Endpoint &remote, char *buffer, int length) 00102 { 00103 Timer tmr; 00104 int idx = 0; 00105 int time = -1; 00106 char ip[16]; 00107 int port; 00108 00109 if(_cid < 0 && _wizfi310->isAssociated()) 00110 { 00111 // Socket open 00112 if (_server) { 00113 _cid = _wizfi310->listen(WizFi310::PROTO_UDP, _port); 00114 //WIZ_DBG("TEST CID : %d",_cid); 00115 } 00116 else 00117 { 00118 _cid = _wizfi310->open(WizFi310::PROTO_UDP, remote.get_address(), remote.get_port(), _port); 00119 } 00120 if (_cid < 0) return -1; 00121 } 00122 00123 if (_blocking) 00124 { 00125 tmr.start(); 00126 while (time < _timeout + 20) 00127 { 00128 if(_wizfi310->readable(_cid)) 00129 { 00130 break; 00131 } 00132 time = tmr.read_ms(); 00133 } 00134 if (time >= _timeout + 20) 00135 { 00136 return -1; 00137 } 00138 } 00139 else 00140 { 00141 if(!_wizfi310->readable(_cid)) 00142 { 00143 return 0; 00144 } 00145 } 00146 00147 00148 tmr.reset(); 00149 time = -1; 00150 tmr.start(); 00151 00152 while (time < _timeout) 00153 { 00154 if(_server) 00155 { 00156 idx += _wizfi310->recvfrom(_cid, &buffer[idx], length - idx, ip, &port); 00157 } 00158 else 00159 { 00160 //idx += _wizfi250->recv(_cid, &buffer[idx], length - idx); 00161 idx += _wizfi310->recvfrom(_cid, &buffer[idx], length - idx, ip, &port); 00162 } 00163 00164 if (idx == length) 00165 break; 00166 00167 00168 time = tmr.read_ms(); 00169 } 00170 00171 remote.set_address(ip, port); 00172 return (idx==0) ? -1 : idx; 00173 }
Generated on Wed Jul 13 2022 02:14:29 by
1.7.2
