#include <string>
#include <sigc++/signal.h>
#include <msp/io/eventdispatcher.h>
+#include <msp/net/resolve.h>
#include <msp/net/streamsocket.h>
namespace Msp {
{
public:
sigc::signal<void, const Response &> signal_response_complete;
- sigc::signal<void, const std::exception *> signal_socket_error;
+ 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;
~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 &);
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();
};