Library for Bert van Dam's book "ARM MICROCONTROLLERS" For all chapters with internet.

Dependencies:   mbed

Committer:
ICTFBI
Date:
Fri Oct 16 14:28:26 2015 +0000
Revision:
0:4edb816d21e1
Pre-update 16-10-15

Who changed what in which revision?

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