[svn] commit: r2410 - /branches/trac259/src/bin/auth/asio_link.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Jul 2 23:53:51 UTC 2010


Author: each
Date: Fri Jul  2 23:53:50 2010
New Revision: 2410

Log:
Some refactoring of asio_link.cc, and added logging when errors are
encountered.

Modified:
    branches/trac259/src/bin/auth/asio_link.cc

Modified: branches/trac259/src/bin/auth/asio_link.cc
==============================================================================
--- branches/trac259/src/bin/auth/asio_link.cc (original)
+++ branches/trac259/src/bin/auth/asio_link.cc Fri Jul  2 23:53:50 2010
@@ -127,67 +127,74 @@
     void headerRead(const asio::error_code& error,
                     size_t bytes_transferred)
     {
-        if (!error) {
-            InputBuffer dnsbuffer(data_, bytes_transferred);
-
-            uint16_t msglen = dnsbuffer.readUint16();
-            async_read(socket_, asio::buffer(data_, msglen),
-
-                       boost::bind(&TCPClient::requestRead, this,
-                                   placeholders::error,
-                                   placeholders::bytes_transferred));
-        } else {
+        if (error) {
+            cout << "[b10-auth] Header read failure: "
+                 << error.message() << endl;
             delete this;
-        }
+            return;
+        }
+
+        InputBuffer dnsbuffer(data_, bytes_transferred);
+        uint16_t msglen = dnsbuffer.readUint16();
+        async_read(socket_, asio::buffer(data_, msglen),
+                   boost::bind(&TCPClient::requestRead, this,
+                               placeholders::error,
+                               placeholders::bytes_transferred));
     }
 
     void requestRead(const asio::error_code& error,
                      size_t bytes_transferred)
     {
-        if (!error) {
-            InputBuffer dnsbuffer(data_, bytes_transferred);
-            if (check_axfr_query(data_, bytes_transferred)) {
-                dispatch_axfr_query(socket_.native(), data_, bytes_transferred); 
-                // start to get new query ?
-                start();
+        if (error) {
+            cout << "[b10-auth] Message read failure: "
+                 << error.message() << endl;
+            delete this;
+            return;
+        }
+
+        InputBuffer dnsbuffer(data_, bytes_transferred);
+        if (check_axfr_query(data_, bytes_transferred)) {
+            dispatch_axfr_query(socket_.native(), data_, bytes_transferred); 
+            // start to get new query ?
+            start();
+        } else {
+            if (auth_server_->processMessage(dnsbuffer, dns_message_,
+                                            response_renderer_, false))
+            {
+                responselen_buffer_.writeUint16(response_buffer_.getLength());
+                async_write(socket_,
+                            asio::buffer(responselen_buffer_.getData(),
+                                         responselen_buffer_.getLength()),
+                            boost::bind(&TCPClient::responseWrite, this,
+                                        placeholders::error));
             } else {
-                if (auth_server_->processMessage(dnsbuffer, dns_message_,
-                                                response_renderer_, false)) {
-                    responselen_buffer_.writeUint16(
-                        response_buffer_.getLength());
-                    async_write(socket_,
-                                asio::buffer(
-                                    responselen_buffer_.getData(),
-                                    responselen_buffer_.getLength()),
-                                boost::bind(&TCPClient::responseWrite, this,
-                                            placeholders::error));
-                } else {
-                    delete this;
-                }
+                delete this;
             }
-        } else {
+        }
+    }
+
+    void responseWrite(const asio::error_code& error) {
+        if (error) {
+            cout << "[b10-auth] Response failure: " << error.message() << endl;
             delete this;
-        }
-    }
-
-    void responseWrite(const asio::error_code& error) {
-        if (!error) {
-                async_write(socket_,
-                            asio::buffer(response_buffer_.getData(),
-                                                response_buffer_.getLength()),
-                        boost::bind(&TCPClient::handleWrite, this,
-                                    placeholders::error));
-        } else {
+            return;
+        }
+
+        async_write(socket_,
+                    asio::buffer(response_buffer_.getData(),
+                                 response_buffer_.getLength()),
+                    boost::bind(&TCPClient::handleWrite, this,
+                                placeholders::error));
+    }
+
+    void handleWrite(const asio::error_code& error) {
+        if (error) {
+            cout << "[b10-auth] Write failure: " << error.message() << endl;
             delete this;
-        }
-    }
-
-    void handleWrite(const asio::error_code& error) {
-        if (!error) {
-            start();            // handle next request, if any.
-      } else {
-            delete this;
-      }
+            return;
+        }
+
+        start();            // handle next request, if any.
     }
 
 private:
@@ -247,17 +254,19 @@
     void handleAccept(TCPClient* new_client,
                       const asio::error_code& error)
     {
-        if (!error) {
-            assert(new_client == listening_);
-            new_client->start();
-            listening_ = new TCPClient(auth_server_, io_service_);
-            acceptor_.async_accept(listening_->getSocket(),
-                                   boost::bind(&TCPServer::handleAccept,
-                                               this, listening_,
-                                               placeholders::error));
-        } else {
+        if (error) {
+            cout << "[b10-auth] Accept failure: " << error.message() << endl;
             delete new_client;
-        }
+            return;
+        }
+
+        assert(new_client == listening_);
+        new_client->start();
+        listening_ = new TCPClient(auth_server_, io_service_);
+        acceptor_.async_accept(listening_->getSocket(),
+                               boost::bind(&TCPServer::handleAccept,
+                                           this, listening_,
+                                           placeholders::error));
     }
 
 private:
@@ -308,24 +317,33 @@
         if (auth_server_->configSession()->hasQueuedMsgs()) {
             auth_server_->configSession()->checkCommand();
         }
-        if (!error && bytes_recvd > 0) {
-            InputBuffer request_buffer(data_, bytes_recvd);
-
-            dns_message_.clear(Message::PARSE);
-            response_renderer_.clear();
-            if (auth_server_->processMessage(request_buffer, dns_message_,
-                                            response_renderer_, true)) {
-                socket_.async_send_to(
-                    asio::buffer(response_buffer_.getData(),
-                                        response_buffer_.getLength()),
-                    sender_endpoint_,
-                    boost::bind(&UDPServer::sendCompleted,
-                                this,
-                                placeholders::error,
-                                placeholders::bytes_transferred));
-            } else {
-                startReceive();
-            }
+
+        if (error) {
+            cout << "[b10-auth] Request failure: " << error.message() << endl;
+            startReceive();
+            return;
+        }
+
+        if (bytes_recvd == 0) {
+            cout << "[b10-auth] Request failure: 0 bytes read" << endl;
+            startReceive();
+            return;
+        }
+
+        InputBuffer request_buffer(data_, bytes_recvd);
+
+        dns_message_.clear(Message::PARSE);
+        response_renderer_.clear();
+        if (auth_server_->processMessage(request_buffer, dns_message_,
+                                         response_renderer_, true))
+        {
+            socket_.async_send_to(asio::buffer(response_buffer_.getData(),
+                                               response_buffer_.getLength()),
+                                  sender_endpoint_,
+                                  boost::bind(&UDPServer::sendCompleted,
+                                              this,
+                                              placeholders::error,
+                                              placeholders::bytes_transferred));
         } else {
             startReceive();
         }




More information about the bind10-changes mailing list