]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/client.cpp
Use std::unique_ptr for owning pointers
[libs/net.git] / source / http / client.cpp
index 30c336e3e1bf627867d7e4a75ffd3d7a763f352a..e8790aa65bcc8b57e6d4dcb557319a7161f71c68 100644 (file)
@@ -1,5 +1,4 @@
 #include <msp/core/except.h>
-#include <msp/core/refptr.h>
 #include <msp/net/resolve.h>
 #include <msp/time/timedelta.h>
 #include "client.h"
@@ -13,9 +12,6 @@ namespace Http {
 
 Client::~Client()
 {
-       delete sock;
-       delete request;
-       delete response;
 }
 
 void Client::use_event_dispatcher(IO::EventDispatcher *ed)
@@ -30,14 +26,11 @@ void Client::use_event_dispatcher(IO::EventDispatcher *ed)
 void Client::use_resolver(Net::Resolver *r)
 {
        if(resolver)
-       {
-               delete resolve_listener;
-               resolve_listener = nullptr;
-       }
+               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)
@@ -45,15 +38,13 @@ void Client::start_request(const Request &r)
        if(request)
                throw invalid_state("already processing a request");
 
-       delete sock;
-       sock = nullptr;
+       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 = nullptr;
+       response.reset();
        in_buf.clear();
 
        string host = r.get_header("Host");
@@ -63,7 +54,7 @@ void Client::start_request(const Request &r)
                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);
        }
 }
@@ -72,7 +63,7 @@ const Response *Client::get_url(const std::string &url)
 {
        start_request(Request::from_url(url));
        wait_response();
-       return response;
+       return response.get();
 }
 
 void Client::tick()
@@ -87,10 +78,8 @@ void Client::tick()
        {
                signal_response_complete.emit(*response);
 
-               delete sock;
-               sock = nullptr;
-               delete request;
-               request = nullptr;
+               sock.reset();
+               request.reset();
        }
 }
 
@@ -102,10 +91,8 @@ void Client::wait_response()
 
 void Client::abort()
 {
-       delete sock;
-       sock = nullptr;
-       delete request;
-       request = nullptr;
+       sock.reset();
+       request.reset();
 }
 
 void Client::address_resolved(unsigned tag, const Net::SockAddr &addr)
@@ -114,7 +101,7 @@ 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));
@@ -131,8 +118,7 @@ void Client::resolve_failed(unsigned tag, const exception &err)
                return;
        resolve_tag = 0;
 
-       delete request;
-       request = nullptr;
+       request.reset();
 
        if(signal_socket_error.empty())
                throw err;
@@ -143,8 +129,7 @@ void Client::connect_finished(const exception *err)
 {
        if(err)
        {
-               delete request;
-               request = nullptr;
+               request.reset();
 
                if(signal_socket_error.empty())
                        throw *err;
@@ -190,7 +175,7 @@ void Client::data_available()
        {
                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();
                }
@@ -205,8 +190,7 @@ void Client::data_available()
        {
                signal_response_complete.emit(*response);
 
-               delete request;
-               request = nullptr;
+               request.reset();
        }
 }