HTTPClient using static IP

Dependencies:   mbed

Committer:
mr_q
Date:
Mon May 30 11:53:37 2011 +0000
Revision:
0:d8f2f7d5f31b
v0.01 Draft

Who changed what in which revision?

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