Version of http://mbed.org/cookbook/NetServicesTribute with setting set the same for LPC2368

Dependents:   UDPSocketExample 24LCxx_I2CApp WeatherPlatform_pachube HvZServerLib ... more

Committer:
simon
Date:
Tue Nov 23 14:15:36 2010 +0000
Revision:
0:350011bf8be7
Experimental version for testing UDP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:350011bf8be7 1
simon 0:350011bf8be7 2 /*
simon 0:350011bf8be7 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
simon 0:350011bf8be7 4
simon 0:350011bf8be7 5 Permission is hereby granted, free of charge, to any person obtaining a copy
simon 0:350011bf8be7 6 of this software and associated documentation files (the "Software"), to deal
simon 0:350011bf8be7 7 in the Software without restriction, including without limitation the rights
simon 0:350011bf8be7 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
simon 0:350011bf8be7 9 copies of the Software, and to permit persons to whom the Software is
simon 0:350011bf8be7 10 furnished to do so, subject to the following conditions:
simon 0:350011bf8be7 11
simon 0:350011bf8be7 12 The above copyright notice and this permission notice shall be included in
simon 0:350011bf8be7 13 all copies or substantial portions of the Software.
simon 0:350011bf8be7 14
simon 0:350011bf8be7 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
simon 0:350011bf8be7 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
simon 0:350011bf8be7 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
simon 0:350011bf8be7 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
simon 0:350011bf8be7 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
simon 0:350011bf8be7 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
simon 0:350011bf8be7 21 THE SOFTWARE.
simon 0:350011bf8be7 22 */
simon 0:350011bf8be7 23
simon 0:350011bf8be7 24 #include "url.h"
simon 0:350011bf8be7 25
simon 0:350011bf8be7 26 Url::Url() : m_port(0)
simon 0:350011bf8be7 27 {
simon 0:350011bf8be7 28
simon 0:350011bf8be7 29 }
simon 0:350011bf8be7 30
simon 0:350011bf8be7 31 string Url::getProtocol()
simon 0:350011bf8be7 32 {
simon 0:350011bf8be7 33 return m_protocol;
simon 0:350011bf8be7 34 }
simon 0:350011bf8be7 35
simon 0:350011bf8be7 36 string Url::getHost()
simon 0:350011bf8be7 37 {
simon 0:350011bf8be7 38 return m_host;
simon 0:350011bf8be7 39 }
simon 0:350011bf8be7 40
simon 0:350011bf8be7 41 bool Url::getHostIp(IpAddr* ip)
simon 0:350011bf8be7 42 {
simon 0:350011bf8be7 43 unsigned int ipArr[4] = {0};
simon 0:350011bf8be7 44 if ( sscanf(m_host.c_str(), "%u.%u.%u.%u", &ipArr[0], &ipArr[1], &ipArr[2], &ipArr[3]) != 4 )
simon 0:350011bf8be7 45 {
simon 0:350011bf8be7 46 return false;
simon 0:350011bf8be7 47 }
simon 0:350011bf8be7 48 *ip = IpAddr(ipArr[0], ipArr[1], ipArr[2], ipArr[3]);
simon 0:350011bf8be7 49 return true;
simon 0:350011bf8be7 50 }
simon 0:350011bf8be7 51
simon 0:350011bf8be7 52 uint16_t Url::getPort()
simon 0:350011bf8be7 53 {
simon 0:350011bf8be7 54 return m_port;
simon 0:350011bf8be7 55 }
simon 0:350011bf8be7 56
simon 0:350011bf8be7 57 string Url::getPath()
simon 0:350011bf8be7 58 {
simon 0:350011bf8be7 59 return m_path;
simon 0:350011bf8be7 60 }
simon 0:350011bf8be7 61
simon 0:350011bf8be7 62 void Url::setProtocol(string protocol)
simon 0:350011bf8be7 63 {
simon 0:350011bf8be7 64 m_protocol = protocol;
simon 0:350011bf8be7 65 }
simon 0:350011bf8be7 66
simon 0:350011bf8be7 67 void Url::setHost(string host)
simon 0:350011bf8be7 68 {
simon 0:350011bf8be7 69 m_host = host;
simon 0:350011bf8be7 70 }
simon 0:350011bf8be7 71
simon 0:350011bf8be7 72 void Url::setPort(uint16_t port)
simon 0:350011bf8be7 73 {
simon 0:350011bf8be7 74 m_port = port;
simon 0:350011bf8be7 75 }
simon 0:350011bf8be7 76
simon 0:350011bf8be7 77 void Url::setPath(string path)
simon 0:350011bf8be7 78 {
simon 0:350011bf8be7 79 m_path = path;
simon 0:350011bf8be7 80 }
simon 0:350011bf8be7 81
simon 0:350011bf8be7 82 void Url::fromString(string str)
simon 0:350011bf8be7 83 {
simon 0:350011bf8be7 84 //URI form [protocol://]host[:port]/path
simon 0:350011bf8be7 85 int pos = 0;
simon 0:350011bf8be7 86 int len = str.find("://");
simon 0:350011bf8be7 87 if( len > 0)
simon 0:350011bf8be7 88 {
simon 0:350011bf8be7 89 m_protocol = str.substr(0, len);
simon 0:350011bf8be7 90 pos += len + 3;
simon 0:350011bf8be7 91 }
simon 0:350011bf8be7 92 else
simon 0:350011bf8be7 93 {
simon 0:350011bf8be7 94 m_protocol = "";
simon 0:350011bf8be7 95 }
simon 0:350011bf8be7 96
simon 0:350011bf8be7 97 bool isPort = false;
simon 0:350011bf8be7 98 int cln_pos = str.find(":", pos);
simon 0:350011bf8be7 99 int slash_pos = str.find("/", pos);
simon 0:350011bf8be7 100 if( slash_pos == -1 )
simon 0:350011bf8be7 101 {
simon 0:350011bf8be7 102 slash_pos = str.length();
simon 0:350011bf8be7 103 }
simon 0:350011bf8be7 104 if( (cln_pos != -1) && (cln_pos < slash_pos) )
simon 0:350011bf8be7 105 {
simon 0:350011bf8be7 106 isPort = true;
simon 0:350011bf8be7 107 len = cln_pos - pos;
simon 0:350011bf8be7 108 }
simon 0:350011bf8be7 109 else
simon 0:350011bf8be7 110 {
simon 0:350011bf8be7 111 len = slash_pos - pos;
simon 0:350011bf8be7 112 }
simon 0:350011bf8be7 113
simon 0:350011bf8be7 114 m_host = str.substr(pos, len);
simon 0:350011bf8be7 115
simon 0:350011bf8be7 116 pos += len;
simon 0:350011bf8be7 117 if( isPort )
simon 0:350011bf8be7 118 {
simon 0:350011bf8be7 119 pos+=1; //Do not keep :
simon 0:350011bf8be7 120 unsigned int port = 0;
simon 0:350011bf8be7 121 sscanf(str.substr(pos, cln_pos-pos).c_str(),"%u", &port);
simon 0:350011bf8be7 122 m_port = (uint16_t)port;
simon 0:350011bf8be7 123 pos = slash_pos;
simon 0:350011bf8be7 124 }
simon 0:350011bf8be7 125
simon 0:350011bf8be7 126 m_path = str.substr(pos);
simon 0:350011bf8be7 127 }
simon 0:350011bf8be7 128
simon 0:350011bf8be7 129 string Url::toString()
simon 0:350011bf8be7 130 {
simon 0:350011bf8be7 131 string url;
simon 0:350011bf8be7 132 if( !m_protocol.empty() )
simon 0:350011bf8be7 133 {
simon 0:350011bf8be7 134 url.append(m_protocol);
simon 0:350011bf8be7 135 url.append("://");
simon 0:350011bf8be7 136 }
simon 0:350011bf8be7 137 url.append(m_host);
simon 0:350011bf8be7 138 if( m_port )
simon 0:350011bf8be7 139 {
simon 0:350011bf8be7 140 char c_port[6] = {0};
simon 0:350011bf8be7 141 sprintf(c_port, "%d", m_port);
simon 0:350011bf8be7 142 url.append(":");
simon 0:350011bf8be7 143 url.append(c_port);
simon 0:350011bf8be7 144 }
simon 0:350011bf8be7 145 if(m_path[0]!='/')
simon 0:350011bf8be7 146 {
simon 0:350011bf8be7 147 url.append("/");
simon 0:350011bf8be7 148 }
simon 0:350011bf8be7 149 url.append(m_path);
simon 0:350011bf8be7 150 return url;
simon 0:350011bf8be7 151 }