X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fpython%2Fdolcon%2F__init__.py;h=c007e0123b4b67a2fc1e4077e4be8c9a001ac7e0;hb=2ce95e0eff284afcecc86359b2d585b657c26d5a;hp=8675b38b0cf67b061979987cf0782bc3e4800deb;hpb=17537706a99e4baf6ceca6e66df520f2b675a775;p=doldaconnect.git diff --git a/lib/python/dolcon/__init__.py b/lib/python/dolcon/__init__.py index 8675b38..c007e01 100644 --- a/lib/python/dolcon/__init__.py +++ b/lib/python/dolcon/__init__.py @@ -1,3 +1,20 @@ +# Dolda Connect - Modular multiuser Direct Connect-style client +# Copyright (C) 2007 Fredrik Tolf +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + from dolmod import * import os @@ -25,7 +42,7 @@ def login(useauthless = True, **kw): select() return result[0] -def mustconnect(host, port = -1): +def mustconnect(host, revision = latest): """A convenience function for connect. This function will connect to the given host, perform a select @@ -33,29 +50,29 @@ def mustconnect(host, port = -1): any of these steps fail, an exception is raised. If successful, the file descriptor for the server connection is returned. """ - fd = connect(host, port) + if host is None: + fd = connect() + else: + fd = connect(host) while True: resp = getresp() if resp is not None and resp.getcmd() == u".connect": break select() - if resp.getcode() != 200: + if resp.getcode() != 201: raise RuntimeError, resp.intresp()[0][0] + if not checkproto(resp, revision): + raise RuntimeError, resp return fd -def cnl(host = None, port = -1, useauthless = True, **kw): +def cnl(host = None, useauthless = True, revision = latest, **kw): """A convenience function for connect and loginasync. - This function will connect to the given server, or the server in - the environment variable $DCSERVER if none is given, or, if that - fails, localhost, and authenticate to the server. If any of the - steps fail, an exception is raised. + This function will connect to the given server, or try the default + servers if none given, and authenticate to the server. If any of + the steps fail, an exception is raised. """ - if host is None: - host = os.getenv("DCSERVER") - if host is None: - host = "localhost" - fd = mustconnect(host, port) + fd = mustconnect(host, revision) err, reason = login(useauthless, **kw) if err != "success": raise RuntimeError, (err, reason) @@ -99,3 +116,14 @@ def ecmds(*args): if resp.getcode() >= 500 and resp.getcode() < 600: raise ValueError, tuple(resp.extract()[0]) return resp + +def getresps(): + """A generator function which will iterate over all responses from + getresp. + """ + while True: + resp = getresp() + if resp is None: + break + else: + yield resp