Parcourir la source

[2013] intermediate cleanup: make message and renderer reusable.

JINMEI Tatuya il y a 13 ans
Parent
commit
2b2439252c
1 fichiers modifiés avec 16 ajouts et 11 suppressions
  1. 16 11
      src/bin/ddns/ddns.py.in

+ 16 - 11
src/bin/ddns/ddns.py.in

@@ -123,7 +123,11 @@ class DDNSServer:
         self._listen_socket.bind(SOCKET_FILE)
         self._listen_socket.listen(16)
 
-        # The following attributes are essentially private and constant,
+        # Create reusable resources
+        self.__request_msg = Message(Message.PARSE)
+        self.__response_renderer = MessageRenderer()
+
+        # The following attribute(s) are essentially private and constant,
         # but defined as "protected" so that test code can customize them.
         # They should not be overridden for any other purposes.
         #
@@ -244,12 +248,12 @@ class DDNSServer:
         # or dropped by the sender, so if such error is detected we treat it
         # as an internal error and don't bother to respond.
         try:
-            msg = Message(Message.PARSE)
-            msg.from_wire(req_data)
-            if msg.get_opcode() != Opcode.UPDATE():
+            self.__request_msg.clear(Message.PARSE)
+            self.__request_msg.from_wire(req_data)
+            if self.__request_msg.get_opcode() != Opcode.UPDATE():
                 raise SessionError('Update request has unexpected opcode: ' +
-                                   str(msg.get_opcode()))
-            tsig_ctx = self.__check_request_tsig(msg, req_data)
+                                   str(self.__request_msg.get_opcode()))
+            tsig_ctx = self.__check_request_tsig(self.__request_msg, req_data)
         except Exception as ex:
             logger.error(DDNS_REQUEST_PARSE_FAIL, ex)
             return False
@@ -258,7 +262,8 @@ class DDNSServer:
         # just drop the packet.
 
         # Let an update session object handle the request.
-        update_session = self._UpdateSessionClass(msg, remote_addr, None)
+        update_session = self._UpdateSessionClass(self.__request_msg,
+                                                  remote_addr, None)
         result, zname, zclass = update_session.handle()
 
         # If the request should be dropped, we're done; otherwise, send the
@@ -266,12 +271,12 @@ class DDNSServer:
         if result == isc.ddns.session.UPDATE_DROP:
             return False
         msg = update_session.get_message()
-        renderer = MessageRenderer()
+        self.__response_renderer.clear()
         if tsig_ctx is not None:
-            msg.to_wire(renderer, tsig_ctx)
+            msg.to_wire(self.__response_renderer, tsig_ctx)
         else:
-            msg.to_wire(renderer)
-        sock.sendto(renderer.get_data(), remote_addr)
+            msg.to_wire(self.__response_renderer)
+        sock.sendto(self.__response_renderer.get_data(), remote_addr)
 
         return True