Add TCP socket servers

Project: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/commit/498fdda5
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/tree/498fdda5
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/diff/498fdda5

Branch: refs/heads/master
Commit: 498fdda5b3155d8d9a7c7d2d9c850d22826d942b
Parents: 1ceb438
Author: Thomas Jackson <[email protected]>
Authored: Wed Jan 21 18:54:50 2015 -0800
Committer: Thomas Jackson <[email protected]>
Committed: Wed Jan 21 18:54:50 2015 -0800

----------------------------------------------------------------------
 tsqa/endpoint.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 86 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/498fdda5/tsqa/endpoint.py
----------------------------------------------------------------------
diff --git a/tsqa/endpoint.py b/tsqa/endpoint.py
index 1d18325..80ff841 100644
--- a/tsqa/endpoint.py
+++ b/tsqa/endpoint.py
@@ -4,7 +4,8 @@ import os
 import threading
 import requests
 import flask
-
+import SocketServer
+import ssl
 
 from collections import defaultdict
 from wsgiref.simple_server import make_server
@@ -153,3 +154,87 @@ class DynamicHTTPEndpoint(threading.Thread):
         self.ready.set()
         # serve it
         self.server.serve_forever()
+
+
+class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
+    pass
+
+
+class SocketServerDaemon(threading.Thread):
+    '''
+    A daemon thread to run a socketserver
+    '''
+    def __init__(self, handler, port=0):
+        threading.Thread.__init__(self)
+        self.port = port
+        self.handler = handler
+        self.ready = threading.Event()
+        self.daemon = True
+
+    def run(self):
+        self.server = ThreadedTCPServer(('0.0.0.0', self.port), self.handler)
+        self.server.allow_reuse_address = True
+        self.port = self.server.socket.getsockname()[1]
+
+        self.ready.set()
+
+        # Activate the server; this will keep running until you
+        # interrupt the program with Ctrl-C
+        self.server.serve_forever()
+
+
+class ThreadedSSLTCPServer(SocketServer.ThreadingMixIn, 
SocketServer.TCPServer):
+    def __init__(self,
+                 server_address,
+                 RequestHandlerClass,
+                 certfile,
+                 keyfile,
+                 ssl_version=ssl.PROTOCOL_TLSv1,
+                 bind_and_activate=True):
+        SocketServer.TCPServer.__init__(self, server_address, 
RequestHandlerClass, bind_and_activate)
+        self.certfile = certfile
+        self.keyfile = keyfile
+        self.ssl_version = ssl_version
+
+    def get_request(self):
+        newsocket, fromaddr = self.socket.accept()
+        connstream = ssl.wrap_socket(newsocket,
+                                     server_side=True,
+                                     certfile=self.certfile,
+                                     keyfile=self.keyfile,
+                                     ssl_version=self.ssl_version,
+                                     )
+        return connstream, fromaddr
+
+class SSLSocketServerDaemon(threading.Thread):
+    '''
+    A daemon thread to run a socketserver
+    '''
+    def __init__(self, handler, cert, key, port=0):
+        # TODO: nicer import?
+        import requests
+        requests.packages.urllib3.disable_warnings()
+
+        threading.Thread.__init__(self)
+        self.handler = handler
+        self.cert = cert
+        self.key = key
+        self.port = port
+
+        self.ready = threading.Event()
+        self.daemon = True
+
+    def run(self):
+        self.server = ThreadedSSLTCPServer(('0.0.0.0', self.port),
+                                           self.handler,
+                                           self.cert,
+                                           self.key,
+                                           )
+        self.server.allow_reuse_address = True
+        self.port = self.server.socket.getsockname()[1]
+
+        self.ready.set()
+
+        # Activate the server; this will keep running until you
+        # interrupt the program with Ctrl-C
+        self.server.serve_forever()

Reply via email to