[CalendarServer-changes] [14750] CalDAVClientLibrary/trunk

source_changes at macosforge.org source_changes at macosforge.org
Tue May 5 07:11:40 PDT 2015


Revision: 14750
          http://trac.calendarserver.org//changeset/14750
Author:   cdaboo at apple.com
Date:     2015-05-05 07:11:40 -0700 (Tue, 05 May 2015)
Log Message:
-----------
Allow connecting to a server via a unix socket (use --unix <<path>>).

Modified Paths:
--------------
    CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py
    CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py
    CalDAVClientLibrary/trunk/setup.py

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -27,7 +27,7 @@
 
 class Shell(BaseShell):
 
-    def __init__(self, server, path, user, pswd, logging):
+    def __init__(self, server, path, user, pswd, logging, afunix=None):
 
         super(Shell, self).__init__("caldav_client")
         self.prefix = self.wd = "/"
@@ -40,7 +40,7 @@
         # Create the account
         ssl = server.startswith("https://")
         server = server[8:] if ssl else server[7:]
-        self.account = CalDAVAccount(server, ssl=ssl, user=self.user, pswd=self.pswd, root=path, principal=None, logging=logging)
+        self.account = CalDAVAccount(server, ssl=ssl, afunix=afunix, user=self.user, pswd=self.pswd, root=path, principal=None, logging=logging)
 
         atexit.register(self.saveHistory)
 
@@ -78,6 +78,7 @@
 Options:
 -l              start with HTTP logging on.
 --server=HOST   url of the server include http/https scheme and port [REQUIRED].
+--unix=PATH     path to unix socket to connect to server [OPTIONAL]
 --user=USER     user name to login as - will be prompted if not prsent [OPTIONAL].
 --pswd=PSWD     password for user - will be prompted if not prsent [OPTIONAL].
 """
@@ -87,10 +88,11 @@
 def runit():
     logging = False
     server = None
+    afunix = None
     user = None
     pswd = None
 
-    opts, _ignore_args = getopt.getopt(sys.argv[1:], 'lh', ["help", "server=", "user=", "pswd="])
+    opts, _ignore_args = getopt.getopt(sys.argv[1:], 'lh', ["help", "server=", "unix=", "user=", "pswd="])
 
     for name, value in opts:
 
@@ -98,6 +100,8 @@
             logging = True
         elif name == "--server":
             server = value
+        elif name == "--unix":
+            afunix = value
         elif name == "--user":
             user = value
         elif name == "--pswd":
@@ -120,7 +124,7 @@
     if not pswd:
         pswd = getpass("Password: ")
 
-    shell = Shell(server, path, user, pswd, logging)
+    shell = Shell(server, path, user, pswd, logging, afunix=afunix)
     shell.run()
 
 

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -19,8 +19,8 @@
 
 class CalDAVAccount(object):
 
-    def __init__(self, server, port=None, ssl=False, user="", pswd="", principal=None, root=None, logging=False):
-        self.session = CalDAVSession(server, port, ssl, user, pswd, principal, root, logging)
+    def __init__(self, server, port=None, ssl=False, afunix=None, user="", pswd="", principal=None, root=None, logging=False):
+        self.session = CalDAVSession(server, port, ssl, afunix, user, pswd, principal, root, logging)
         self.principal = principalCache.getPrincipal(self.session, self.session.principalPath)
 
 

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -62,8 +62,8 @@
             print data.replace("\r\n", "\n"),
 
 
-    def __init__(self, server, port=None, ssl=False, user="", pswd="", principal=None, root=None, logging=False):
-        super(CalDAVSession, self).__init__(server, port, ssl, log=CalDAVSession.logger())
+    def __init__(self, server, port=None, ssl=False, afunix=None, user="", pswd="", principal=None, root=None, logging=False):
+        super(CalDAVSession, self).__init__(server, port, ssl, afunix, log=CalDAVSession.logger())
 
         self.loghttp = logging
 
@@ -960,7 +960,7 @@
 
     def openSession(self):
         # Create connection
-        self.connect = SmartHTTPConnection(self.server, self.port, self.ssl)
+        self.connect = SmartHTTPConnection(self.server, self.port, self.ssl, self.afunix)
 
         # Write to log file
         if self.loghttp and self.log:

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -19,7 +19,9 @@
 import ssl as sslmodule
 
 class HTTPSVersionConnection(httplib.HTTPSConnection):
-    "This class allows communication via SSL."
+    """
+    An L{httplib.HTTPSConnection} class that allows the TLS protocol version to be set.
+    """
 
     def __init__(self, host, port, ssl_version=sslmodule.PROTOCOL_TLSv1):
         httplib.HTTPSConnection.__init__(self, host, port)
@@ -39,14 +41,46 @@
     (set(), sslmodule.PROTOCOL_SSLv23),
 )
 
-def SmartHTTPConnection(host, port, ssl):
+class UnixSocketHTTPConnection(httplib.HTTPConnection):
+    """
+    An L{httplib.HTTPConnection} class that uses a unix socket rather than TCP.
+    """
 
+    def __init__(self, path):
+        httplib.HTTPConnection.__init__(self, "http.sock", port=None)
+        self.path = path
+
+
+    def connect(self):
+        """
+        Connect using the supplied unix socket file path
+        """
+        self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+        self.sock.connect(self.path)
+
+
+
+def SmartHTTPConnection(host, port, ssl, afunix):
+    """
+    Create the appropriate L{httplib.HTTPConnection} derived class for the supplied arguments.
+
+    @param host: TCP host name
+    @type host: L{str}
+    @param port: TCP port number
+    @type port: L{int}
+    @param ssl: indicates if SSL is to be used
+    @type ssl: L{bool}
+    @param afunix: unix socket to use or L{None}
+    @type afunix: L{str}
+    """
+
     def trySSL(version):
         connect = HTTPSVersionConnection(host, port, ssl_version=version)
         connect.connect()
         return connect
 
     if ssl:
+        # Iterate over the TL:S versions and find one that works and cache it for future use.
         for cached, connection_type in cached_types:
             if (host, port) in cached:
                 try:
@@ -62,7 +96,9 @@
                 cached.remove((host, port))
 
         raise RuntimeError("Cannot connect via with TLSv1, SSLv3 or SSLv23")
+    elif afunix is None:
+        connect = httplib.HTTPConnection(host, port)
     else:
-        connect = httplib.HTTPConnection(host, port)
-        connect.connect()
-        return connect
+        connect = UnixSocketHTTPConnection(afunix)
+    connect.connect()
+    return connect

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -21,7 +21,7 @@
 def run(session, request):
 
     # Create connection
-    connect = SmartHTTPConnection(session.server, session.port, session.ssl)
+    connect = SmartHTTPConnection(session.server, session.port, session.ssl, session.afunix)
     connect.set_debuglevel(1)
 
     # Do headers

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -22,11 +22,12 @@
     STATE_OPEN = 0
     STATE_CLOSED = 1
 
-    def __init__(self, server, port=None, ssl=False, log=None):
+    def __init__(self, server, port=None, ssl=False, afunix=None, log=None):
 
         self.server = server
         self.port = port
         self.ssl = ssl
+        self.afunix = afunix
         if not self.port:
             self.port = httplib.HTTPS_PORT if ssl else httplib.HTTP_PORT
         self.authorization = None

Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -23,8 +23,8 @@
 
 class Session(HTTPSession):
 
-    def __init__(self, server, port=None, ssl=False, log=None):
-        super(Session, self).__init__(server, port, ssl, log)
+    def __init__(self, server, port=None, ssl=False, afunix=None, log=None):
+        super(Session, self).__init__(server, port, ssl, afunix, log)
         self.initialised = False
         self.version = ()
 

Modified: CalDAVClientLibrary/trunk/setup.py
===================================================================
--- CalDAVClientLibrary/trunk/setup.py	2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/setup.py	2015-05-05 14:11:40 UTC (rev 14750)
@@ -33,7 +33,7 @@
     data_files.append("caldavclientlibrary/ui/WebDAVBrowser.nib")
     package_data['caldavclientlibrary'] = [
         'ui/WebDAVBrowser.nib/*',
-        ]
+    ]
 
 packages = []
 for dirpath, dirnames, filenames in os.walk('caldavclientlibrary'):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150505/ad084582/attachment-0001.html>


More information about the calendarserver-changes mailing list