X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/e7975918f1449b68443974aa64db31b40230a681..bdc7c3f6286c768cf683b78dfb5576c733121a8b:/pymin/services/nat/__init__.py diff --git a/pymin/services/nat/__init__.py b/pymin/services/nat/__init__.py index 63fdd32..a30f4c7 100644 --- a/pymin/services/nat/__init__.py +++ b/pymin/services/nat/__init__.py @@ -6,20 +6,9 @@ from pymin.seqtools import Sequence from pymin.dispatcher import Handler, handler, HandlerError from pymin.services.util import Restorable, ConfigWriter, RestartHandler, \ ReloadHandler, TransactionalHandler, \ - ListSubHandler, call + ServiceHandler, ListSubHandler, call -__ALL__ = ('NatHandler', 'Error') - -class Error(HandlerError): - r""" - Error(command) -> Error instance :: Base NatHandler exception class. - - All exceptions raised by the NatHandler inherits from this one, so you can - easily catch any NatHandler exception. - - message - A descriptive error message. - """ - pass +__ALL__ = ('NatHandler',) class PortForward(Sequence): r"""PortForward(dev, protocol, port, dst[, dst_port[, ...]]) -> PortForward. @@ -57,10 +46,6 @@ class PortForward(Sequence): if src_net is not None: self.src_net = src_net if dst_net is not None: self.dst_net = dst_net - def __cmp__(self, other): - r"Compares two PortForward objects." - return cmp(self.as_tuple(), other.as_tuple()) - def as_tuple(self): r"Return a tuple representing the port forward." return (self.dev, self.protocol, self.port, self.dst, self.dst_port, @@ -195,8 +180,8 @@ class MasqHandler(ListSubHandler): _cont_subhandler_attr = 'masqs' _cont_subhandler_class = Masq -class NatHandler(Restorable, ConfigWriter, RestartHandler, ReloadHandler, - TransactionalHandler): +class NatHandler(Restorable, ConfigWriter, ReloadHandler, ServiceHandler, + TransactionalHandler): r"""NatHandler([pickle_dir[, config_dir]]) -> NatHandler instance. Handles NAT commands using iptables. @@ -218,8 +203,8 @@ class NatHandler(Restorable, ConfigWriter, RestartHandler, ReloadHandler, masqs=list(), ) - @handler(u'Start the service.') - def start(self): + def _service_start(self): + call(('iptables', '-t', 'nat', '-F')) for (index, port) in enumerate(self.ports): call(['iptables'] + port.as_call_list(index+1)) for (index, snat) in enumerate(self.snats): @@ -227,14 +212,15 @@ class NatHandler(Restorable, ConfigWriter, RestartHandler, ReloadHandler, for (index, masq) in enumerate(self.masqs): call(['iptables'] + masq.as_call_list(index+1)) - @handler(u'Stop the service.') - def stop(self): + def _service_stop(self): call(('iptables', '-t', 'nat', '-F')) + _service_restart = _service_start + def __init__(self, pickle_dir='.'): r"Initialize the object, see class documentation for details." self._persistent_dir = pickle_dir - self._restore() + ServiceHandler.__init__(self) self.forward = PortForwardHandler(self) self.snat = SNatHandler(self) self.masq = MasqHandler(self)