summaryrefslogtreecommitdiffstats
path: root/tester/rt/tftp.py
diff options
context:
space:
mode:
Diffstat (limited to 'tester/rt/tftp.py')
-rw-r--r--tester/rt/tftp.py41
1 files changed, 22 insertions, 19 deletions
diff --git a/tester/rt/tftp.py b/tester/rt/tftp.py
index d518036..7af3a62 100644
--- a/tester/rt/tftp.py
+++ b/tester/rt/tftp.py
@@ -43,7 +43,7 @@ import sys
from rtemstoolkit import error
from rtemstoolkit import reraise
-import tftpy
+import tftpserver
class tftp(object):
'''RTEMS Testing TFTP base.'''
@@ -88,7 +88,8 @@ class tftp(object):
def _stop(self):
try:
if self.server:
- self.server.stop(now = True)
+ self.server.stop()
+ self.finished = True
except:
pass
@@ -101,6 +102,10 @@ class tftp(object):
def _timeout(self):
self._stop()
+ while self.running or not self.finished:
+ self._unlock('_timeout')
+ time.sleep(0.1)
+ self._lock('_timeout')
if self.timeout is not None:
self.timeout()
@@ -119,22 +124,21 @@ class tftp(object):
return None
def _listener(self):
- tftpy_log = logging.getLogger('tftpy')
- tftpy_log.setLevel(100)
+ self._lock('_listener')
+ exe = self.exe
+ self.exe = None
+ self._unlock('_listener')
+ self.server = tftpserver.tftp_server(host = 'all',
+ port = self.port,
+ timeout = 1,
+ forced_file = exe,
+ sessions = 1)
try:
- self.server = tftpy.TftpServer(tftproot = '.',
- dyn_file_func = self._exe_handle)
- except tftpy.TftpException as te:
- raise error.general('tftp: %s' % (str(te)))
- if self.server is not None:
- try:
- self.server.listen('0.0.0.0', self.port, 0.5)
- except tftpy.TftpException as te:
- raise error.general('tftp: %s' % (str(te)))
- except IOError as ie:
- if ie.errno == errno.EACCES:
- raise error.general('tftp: permissions error: check tftp server port')
- raise error.general('tftp: io error: %s' % (str(ie)))
+ self.server.start()
+ self.server.run()
+ except:
+ self.server.stop()
+ raise
def _runner(self):
self._lock('_runner')
@@ -146,9 +150,7 @@ class tftp(object):
except:
caught = sys.exc_info()
self._lock('_runner')
- self._init()
self.running = False
- self.finished = True
self.caught = caught
self._unlock('_runner')
@@ -187,6 +189,7 @@ class tftp(object):
self._timeout()
caught = self.caught
self.caught = None
+ self._init()
self._unlock('_open')
if caught is not None:
reraise.reraise(*caught)