]> git.tdb.fi Git - libs/net.git/blobdiff - source/client.cpp
Add Server class
[libs/net.git] / source / client.cpp
index a4bc342f38c2738c27047f6a80818196fbd17396..be579184fa98e62a71d7ea3d09d5c247907fa16f 100644 (file)
@@ -15,14 +15,13 @@ Distributed under the LGPL
 
 using namespace std;
 
-#include <iostream>
-
 namespace Msp {
 namespace Http {
 
 Client::Client():
        sock(0),
        event_disp(0),
+       user_agent("libmsphttp/0.1"),
        request(0),
        response(0)
 { }
@@ -48,7 +47,10 @@ void Client::start_request(const Request &r)
        if(request)
                throw InvalidState("Already processing a request");
 
-       RefPtr<Net::SockAddr> addr=Net::resolve(r.get_header("host")+":"+r.get_header("x-port"));
+       string host=r.get_header("Host");
+       if(host.find(':')==string::npos)
+               host+=":80";
+       RefPtr<Net::SockAddr> addr=Net::resolve(host);
 
        delete sock;
        sock=new Net::StreamSocket(addr->get_family());
@@ -62,6 +64,8 @@ void Client::start_request(const Request &r)
        sock->connect(*addr);
 
        request=new Request(r);
+       if(!user_agent.empty())
+               request->set_header("User-Agent", user_agent);
 
        delete response;
        response=0;
@@ -83,7 +87,7 @@ void Client::tick()
        while(IO::PollEvent ev=IO::poll(*sock, sock->get_events(), Time::zero))
                sock->event(ev);
 
-       if(response && response->get_complete())
+       if(response && response->is_complete())
        {
                signal_response_complete.emit(*response);
 
@@ -96,7 +100,7 @@ void Client::tick()
 
 void Client::wait_response()
 {
-       while(!response || !response->get_complete())
+       while(request && (!response || !response->is_complete()))
                tick();
 }
 
@@ -143,7 +147,7 @@ void Client::data_available()
                in_buf.erase(0, len);
        }
 
-       if(response && response->get_complete())
+       if(response && response->is_complete())
        {
                signal_response_complete.emit(*response);