+#include "client.h"
#include <msp/core/except.h>
-#include <msp/core/refptr.h>
#include <msp/net/resolve.h>
#include <msp/time/timedelta.h>
-#include "client.h"
#include "request.h"
#include "response.h"
Client::~Client()
{
- delete sock;
- delete request;
- delete response;
}
void Client::use_event_dispatcher(IO::EventDispatcher *ed)
void Client::use_resolver(Net::Resolver *r)
{
if(resolver)
- {
- delete resolve_listener;
- resolve_listener = 0;
- }
+ resolve_listener.reset();
resolver = r;
if(resolver)
- resolve_listener = new ResolveListener(*this);
+ resolve_listener = make_unique<ResolveListener>(*this);
}
void Client::start_request(const Request &r)
if(request)
throw invalid_state("already processing a request");
- delete sock;
- sock = 0;
+ sock.reset();
- request = new Request(r);
+ request = make_unique<Request>(r);
if(!user_agent.empty())
request->set_header("User-Agent", user_agent);
- delete response;
- response = 0;
+ response.reset();
in_buf.clear();
string host = r.get_header("Host");
resolve_tag = resolver->resolve(host);
else
{
- RefPtr<Net::SockAddr> addr = Net::resolve(host);
+ unique_ptr<Net::SockAddr> addr(Net::resolve(host));
address_resolved(resolve_tag, *addr);
}
}
{
start_request(Request::from_url(url));
wait_response();
- return response;
+ return response.get();
}
void Client::tick()
{
signal_response_complete.emit(*response);
- delete sock;
- sock = 0;
- delete request;
- request = 0;
+ sock.reset();
+ request.reset();
}
}
void Client::abort()
{
- delete sock;
- sock = 0;
- delete request;
- request = 0;
+ sock.reset();
+ request.reset();
}
void Client::address_resolved(unsigned tag, const Net::SockAddr &addr)
return;
resolve_tag = 0;
- sock = new Net::StreamSocket(addr.get_family());
+ sock = make_unique<Net::StreamSocket>(addr.get_family());
sock->set_block(false);
sock->signal_data_available.connect(sigc::mem_fun(this, &Client::data_available));
return;
resolve_tag = 0;
- delete request;
- request = 0;
+ request.reset();
if(signal_socket_error.empty())
throw err;
{
if(err)
{
- delete request;
- request = 0;
+ request.reset();
if(signal_socket_error.empty())
throw *err;
{
if(in_buf.find("\r\n\r\n")!=string::npos || in_buf.find("\n\n")!=string::npos)
{
- response = new Response(Response::parse(in_buf));
+ response = make_unique<Response>(Response::parse(in_buf));
response->set_user_data(request->get_user_data());
in_buf = string();
}
{
signal_response_complete.emit(*response);
- delete request;
- request = 0;
+ request.reset();
}
}