# some state
self.prepared = False
self._terminate = [] # terminate signaller
+ self._suspend = [] # suspend signaller
self._exc = [] # exception store, to relay exceptions from the forwarder thread
self._connected = threading.Event()
self._forwarder_thread = None
self._terminate.append(None)
self._forwarder_thread.join()
+ def suspend(self):
+ if not self._suspend:
+ self._suspend.append(None)
+
+ def resume(self):
+ if self._suspend:
+ self._suspend.remove(None)
+
def _launch(self):
# Launch forwarder thread with a weak reference
# to self, so that we don't create any strong cycles
raise RuntimeError, "Misconfigured TUN: %s" % (self,)
TERMINATE = self._terminate
+ SUSPEND = self._suspend
cipher_key = self.tun_key
tun = self.tun_socket
udp = local_proto == 'udp'
cipher_key = cipher_key,
udp = udp,
TERMINATE = TERMINATE,
+ SUSPEND = SUSPEND,
stderr = stderr,
cipher = local_cipher
)