X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fclient.cpp;h=be579184fa98e62a71d7ea3d09d5c247907fa16f;hb=077408f98f08fac1a098a501fffdb22728a57a46;hp=a4bc342f38c2738c27047f6a80818196fbd17396;hpb=a4049d7c4126126ca3abd12b1aca8715e7006d44;p=libs%2Fnet.git diff --git a/source/client.cpp b/source/client.cpp index a4bc342..be57918 100644 --- a/source/client.cpp +++ b/source/client.cpp @@ -15,14 +15,13 @@ Distributed under the LGPL using namespace std; -#include - 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 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 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);