]> git.tdb.fi Git - libs/net.git/blobdiff - source/request.cpp
Use maputils.h
[libs/net.git] / source / request.cpp
index bcf36c991f727f5c539a6431304d68691dd5be92..c948755ae78281cb1c36378de491a1cd0c948cd7 100644 (file)
@@ -1,14 +1,8 @@
-/* $Id$
-
-This file is part of libmsphttp
-Copyright © 2008  Mikkosoft Productions, Mikko Rasa
-Distributed under the LGPL
-*/
-
 #include <msp/strings/formatter.h>
 #include <msp/strings/regex.h>
 #include <msp/strings/utils.h>
 #include "request.h"
+#include "utils.h"
 
 using namespace std;
 
@@ -22,46 +16,49 @@ Request::Request(const string &m, const string &p):
 
 string Request::str() const
 {
-       string result=format("%s %s %s\r\n", method, path, version_str(http_version));
-       result+=str_common();
+       string result = format("%s %s %s\r\n", method, path, version_str(http_version));
+       result += str_common();
 
        return result;
 }
 
 Request Request::parse(const string &str)
 {
-       unsigned lf=str.find('\n');
-       vector<string> parts=split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2);
+       unsigned lf = str.find('\n');
+       vector<string> parts = split(str.substr(0, lf-(str[lf-1]=='\r')), ' ', 2);
        if(parts.size()<3)
-               throw InvalidParameterValue("Invalid request");
+               throw invalid_argument("Request::parse");
 
        Request result(parts[0], parts[1]);
-       result.http_version=parse_version(parts[2]);
+       result.http_version = parse_version(parts[2]);
 
-       lf+=result.parse_headers(str.substr(lf+1));
+       lf += result.parse_headers(str.substr(lf+1));
 
        result.parse_content(str.substr(lf+1));
 
        return result;
 }
 
-Request Request::from_url(const string &url)
+Request Request::from_url(const string &str)
 {
-       if(RegMatch match=Regex("^http://([a-zA-Z0-9.-]+(:[0-9]+)?)(/[^ #]*)?$").match(url))
+       Url url = parse_url(str);
+       if(url.scheme!="http")
+               throw invalid_argument("Request::from_url");
+
+       string path = url.path;
+       if(path.empty())
+               path = "/";
+       if(!url.query.empty())
        {
-               string host=match[1].str;
-               string path=match[3].str;
-               if(path.empty())
-                       path="/";
+               path += '?';
+               path += url.query;
+       }
 
-               Request result("GET", path);
-               result.set_header("Host", host);
-               result.set_header("Connection", "close");
+       Request result("GET", path);
+       result.set_header("Host", url.host);
+       result.set_header("Connection", "close");
 
-               return result;
-       }
-       else
-               throw InvalidParameterValue("Invalid URL");
+       return result;
 }
 
 } // namespace Http