X-Git-Url: https://git.llucax.com/software/pymin.git/blobdiff_plain/865ddb235489f38afd7043ee269e4f958474bd5a..45d91d1b75b9aed9abbbae97ff962ab08f215177:/pymin/services/nat/__init__.py?ds=sidebyside diff --git a/pymin/services/nat/__init__.py b/pymin/services/nat/__init__.py index c22783f..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. @@ -191,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. @@ -214,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): @@ -223,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)