]> git.tdb.fi Git - libs/net.git/blobdiff - source/http/client.cpp
Use nullptr instead of 0 for pointers
[libs/net.git] / source / http / client.cpp
index 6f221810c922a78f85289934b36ce4d6b71b2100..30c336e3e1bf627867d7e4a75ffd3d7a763f352a 100644 (file)
@@ -1,6 +1,7 @@
+#include <msp/core/except.h>
 #include <msp/core/refptr.h>
 #include <msp/net/resolve.h>
-#include <msp/time/units.h>
+#include <msp/time/timedelta.h>
 #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;
@@ -42,7 +32,7 @@ void Client::use_resolver(Net::Resolver *r)
        if(resolver)
        {
                delete resolve_listener;
-               resolve_listener = 0;
+               resolve_listener = nullptr;
        }
 
        resolver = r;
@@ -53,17 +43,17 @@ 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;
+       sock = nullptr;
 
        request = new Request(r);
        if(!user_agent.empty())
                request->set_header("User-Agent", user_agent);
 
        delete response;
-       response = 0;
+       response = nullptr;
        in_buf.clear();
 
        string host = r.get_header("Host");
@@ -98,9 +88,9 @@ void Client::tick()
                signal_response_complete.emit(*response);
 
                delete sock;
-               sock = 0;
+               sock = nullptr;
                delete request;
-               request = 0;
+               request = nullptr;
        }
 }
 
@@ -113,9 +103,9 @@ void Client::wait_response()
 void Client::abort()
 {
        delete sock;
-       sock = 0;
+       sock = nullptr;
        delete request;
-       request = 0;
+       request = nullptr;
 }
 
 void Client::address_resolved(unsigned tag, const Net::SockAddr &addr)
@@ -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;
+       request = nullptr;
+
+       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;
+               request = nullptr;
+
+               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;
        }
@@ -198,7 +206,7 @@ void Client::data_available()
                signal_response_complete.emit(*response);
 
                delete request;
-               request = 0;
+               request = nullptr;
        }
 }