X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fhttp%2Fclient.cpp;h=073656d184440aa225ca2774f5f98e2dafd8374b;hb=6625cf0e574406425c35d33110f8d99617e902df;hp=6f221810c922a78f85289934b36ce4d6b71b2100;hpb=ebbf753626c9e5dd26743c379741c53f9f11866e;p=libs%2Fnet.git diff --git a/source/http/client.cpp b/source/http/client.cpp index 6f22181..073656d 100644 --- a/source/http/client.cpp +++ b/source/http/client.cpp @@ -1,6 +1,7 @@ +#include #include #include -#include +#include #include "client.h" #include "request.h" #include "response.h" @@ -10,17 +11,6 @@ using namespace std; namespace Msp { namespace Http { -Client::Client(): - sock(0), - event_disp(0), - resolver(0), - resolve_listener(0), - resolve_tag(0), - user_agent("libmsphttp/0.1"), - request(0), - response(0) -{ } - Client::~Client() { delete sock; @@ -53,7 +43,7 @@ void Client::use_resolver(Net::Resolver *r) void Client::start_request(const Request &r) { if(request) - throw client_busy(); + throw invalid_state("already processing a request"); delete sock; sock = 0; @@ -141,23 +131,39 @@ void Client::resolve_failed(unsigned tag, const exception &err) return; resolve_tag = 0; - signal_socket_error.emit(err); - delete request; request = 0; + + if(signal_socket_error.empty()) + throw err; + signal_socket_error.emit(err); } void Client::connect_finished(const exception *err) { if(err) { - signal_socket_error.emit(*err); - delete request; request = 0; + + if(signal_socket_error.empty()) + throw *err; + signal_socket_error.emit(*err); } else - sock->write(request->str()); + { + try + { + sock->write(request->str()); + } + catch(const exception &e) + { + if(signal_socket_error.empty()) + throw; + signal_socket_error.emit(e); + return; + } + } } void Client::data_available() @@ -170,6 +176,8 @@ void Client::data_available() } catch(const exception &e) { + if(signal_socket_error.empty()) + throw; signal_socket_error.emit(e); return; }