###
### This file is part of Trivial IP Encryption (TrIPE).
###
-### TrIPE 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.
+### TrIPE 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 3 of the License, or (at your
+### option) any later version.
###
-### TrIPE 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.
+### TrIPE 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 TrIPE; if not, write to the Free Software Foundation,
-### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+### along with TrIPE. If not, see <https://www.gnu.org/licenses/>.
"""
This module provides classes and functions for connecting to a running tripe
try:
if OS.getenv('TRIPE_FORCE_RMCR') is not None:
- raise ImportError
+ raise ImportError()
from py.magic import greenlet as _Coroutine
except ImportError:
from rmcr import Coroutine as _Coroutine
"""
me.dcr = Coroutine.getcurrent().parent
if me.dcr is None:
- raise ValueError, 'must invoke from coroutine'
+ raise ValueError('must invoke from coroutine')
me.filter = filter or (lambda x: x)
if bg:
words = [words[0], '-background', dispatcher.bgtag()] + list(words[1:])
if code == 'INFO':
return me.filter(rest)
elif code == 'OK':
- raise StopIteration
+ raise StopIteration()
elif code == 'CONNERR':
if rest is None:
- raise TripeConnectionError, 'connection terminated by user'
+ raise TripeConnectionError('connection terminated by user')
else:
raise rest
elif code == 'FAIL':
raise TripeError(*rest)
else:
- raise TripeInternalError \
- ('unexpected tripe response %r' % ([code] + rest))
+ raise TripeInternalError('unexpected tripe response %r' %
+ ([code] + rest))
### Simple utility functions for the TripeCommandIterator convenience
### methods.
*['ADD'] +
_kwopts(kw, ['tunnel', 'keepalive',
'key', 'priv', 'cork',
- 'mobile']) +
+ 'mobile', 'knock',
+ 'ephemeral']) +
[peer] +
list(addr)))
def addr(me, peer):
return _simple(me.command('DAEMON'))
def eping(me, peer, **kw):
return _oneline(me.command(bg = True,
- *['PING'] +
+ *['EPING'] +
_kwopts(kw, ['timeout']) +
[peer]))
def forcekx(me, peer):
*['PING'] +
_kwopts(kw, ['timeout']) +
[peer]))
- def port(me):
- return _oneline(me.command('PORT', filter = _tokenjoin))
+ def port(me, af = None):
+ return _oneline(me.command('PORT',
+ *((af is not None) and [af] or []),
+ filter = _tokenjoin))
def quit(me):
return _simple(me.command('QUIT'))
def reload(me):
"""
if (me.min is not None and len(args) < me.min) or \
(me.max is not None and len(args) > me.max):
- raise TripeSyntaxError
+ raise TripeSyntaxError()
me.func(*args)
class TripeServiceJob (Coroutine):
if len(me.args) == 0 or \
len(me.args[0]) < 2 or \
not me.args[0].startswith('-'):
- raise StopIteration
+ raise StopIteration()
opt = me.args.pop(0)
if opt == '--':
- raise StopIteration
+ raise StopIteration()
if opt not in me.allowed:
- raise TripeSyntaxError
+ raise TripeSyntaxError()
return opt
def arg(me):
If none is available, raise `TripeSyntaxError'.
"""
if len(me.args) == 0:
- raise TripeSyntaxError
+ raise TripeSyntaxError()
return me.args.pop(0)
def rest(me, min = None, max = None):
"""
if (min is not None and len(me.args) < min) or \
(max is not None and len(me.args) > max):
- raise TripeSyntaxError
+ raise TripeSyntaxError()
return me.args
###----- That's all, folks --------------------------------------------------