]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/client.h
Adjust exception classes and messages
[libs/net.git] / source / http / client.h
index 37acf0cfe0e3bb08d1483520e9a3cd7bc557dc76..e0b9b64f097b62c563480e0f879b2985cb5523c2 100644 (file)
@@ -4,18 +4,12 @@
 #include <string>
 #include <sigc++/signal.h>
 #include <msp/io/eventdispatcher.h>
+#include <msp/net/resolve.h>
 #include <msp/net/streamsocket.h>
 
 namespace Msp {
 namespace Http {
 
-class client_busy: public std::logic_error
-{
-public:
-       client_busy(): std::logic_error(std::string()) { }
-       virtual ~client_busy() throw() { }
-};
-
 class Request;
 class Response;
 
@@ -26,8 +20,21 @@ public:
        sigc::signal<void, const std::exception &> signal_socket_error;
 
 private:
+       struct ResolveListener: public sigc::trackable
+       {
+               Client &client;
+
+               ResolveListener(Client &);
+
+               void address_resolved(unsigned, const Net::SockAddr &);
+               void resolve_failed(unsigned, const std::exception &);
+       };
+
        Net::StreamSocket *sock;
        IO::EventDispatcher *event_disp;
+       Net::Resolver *resolver;
+       ResolveListener *resolve_listener;
+       unsigned resolve_tag;
        std::string user_agent;
        Request *request;
        Response *response;
@@ -40,6 +47,7 @@ public:
        ~Client();
 
        void use_event_dispatcher(IO::EventDispatcher *);
+       void use_resolver(Net::Resolver *);
        void set_user_agent(const std::string &);
        void start_request(const Request &);
        const Response *get_url(const std::string &);
@@ -49,6 +57,8 @@ public:
        const Request *get_request() const { return request; }
        const Response *get_response() const { return response; }
 private:
+       void address_resolved(unsigned, const Net::SockAddr &);
+       void resolve_failed(unsigned, const std::exception &);
        void connect_finished(const std::exception *);
        void data_available();
 };