[Cryptech-Commits] [sw/libhal] 01/03: Refactor and simplify, whole program fits on one screen now.

git at cryptech.is git at cryptech.is
Fri Jan 13 01:21:56 UTC 2017


This is an automated email from the git hooks/post-receive script.

sra at hactrn.net pushed a commit to branch pymux
in repository sw/libhal.

commit 0f0ce51dc732bbcf5910b4ef576124b4c8a10ad1
Author: Rob Austein <sra at hactrn.net>
AuthorDate: Thu Jan 12 17:34:00 2017 -0500

    Refactor and simplify, whole program fits on one screen now.
---
 cryptech_console | 67 +++++++++++++++++++++++++-------------------------------
 1 file changed, 30 insertions(+), 37 deletions(-)

diff --git a/cryptech_console b/cryptech_console
index 6e0bc80..5ac12ba 100755
--- a/cryptech_console
+++ b/cryptech_console
@@ -37,17 +37,12 @@ import sys
 import socket
 import atexit
 import termios
-import logging
 import argparse
 
 import tornado.iostream
 import tornado.ioloop
 import tornado.gen
 
-
-logger = logging.getLogger("cryptech_console")
-
-
 class FemtoTerm(object):
 
     def __init__(self, s):
@@ -57,6 +52,17 @@ class FemtoTerm(object):
         self.socket_stream = tornado.iostream.IOStream(s)
         self.closed = False
 
+    def close(self):
+        self.termios_teardown()
+        self.stdin_stream.close()
+        self.stdout_stream.close()
+        self.socket_stream.close()
+        self.closed = True
+
+    @tornado.gen.coroutine
+    def run(self):
+        yield [self.stdout_loop(), self.stdin_loop()]
+
     def termios_setup(self):
         self.fd = sys.stdin.fileno()
         self.old_tcattr = termios.tcgetattr(self.fd)
@@ -72,52 +78,39 @@ class FemtoTerm(object):
             termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_tcattr)
             self.fd = None
 
-    def close_loops(self):
-        self.termios_teardown()
-        self.stdin_stream.close()
-        self.stdout_stream.close()
-        self.socket_stream.close()
-        self.closed = True
-
     @tornado.gen.coroutine
-    def stdin_loop(self):
+    def copy_loop(self, stream1, stream2, text1, text2, buffer_size = 1024):
         try:
             while not self.closed:
-                buffer = yield self.stdin_stream.read_bytes(1024, partial = True)
-                yield self.socket_stream.write(buffer.replace("\n", "\r"))
+                buffer = yield stream1.read_bytes(buffer_size, partial = True)
+                yield stream2.write(buffer.replace(text1, text2))
         except tornado.iostream.StreamClosedError:
-            self.close_loops()
+            self.close()
 
-    @tornado.gen.coroutine
-    def stdout_loop(self):
-        try:
-            while not self.closed:
-                buffer = yield self.socket_stream.read_bytes(1024, partial = True)
-                yield self.stdout_stream.write(buffer.replace("\r\n", "\n"))
-        except tornado.iostream.StreamClosedError:
-            self.close_loops()
+    def stdin_loop(self):
+        return self.copy_loop(self.stdin_stream, self.socket_stream, "\n", "\r")
 
+    def stdout_loop(self):
+        return self.copy_loop(self.socket_stream, self.stdout_stream, "\r\n", "\n")
 
- at tornado.gen.coroutine
 def main():
     parser = argparse.ArgumentParser(formatter_class = argparse.ArgumentDefaultsHelpFormatter)
-    parser.add_argument("-v", "--verbose",  action = "store_true",  help = "produce human-readable output")
-    parser.add_argument("-d", "--debug",    action = "store_true",  help = "blather about what we're doing")
-
-    parser.add_argument("--cty-socket",            help = "CTY PF_UNIX socket name",
-                        default = os.getenv("CRYPTECH_CTY_CLIENT_SOCKET_NAME", "/tmp/.cryptech_muxd.cty"))
-
+    parser.add_argument("cty_socket",
+                        nargs = "?",
+                        help = "CTY PF_UNIX socket name",
+                        default = os.getenv("CRYPTECH_CTY_CLIENT_SOCKET_NAME",
+                                            "/tmp/.cryptech_muxd.cty"))
     args = parser.parse_args()
 
     s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-    s.connect(args.cty_socket)
-
-    term = FemtoTerm(s)
-    yield [term.stdout_loop(), term.stdin_loop()]
+    try:
+        s.connect(args.cty_socket)
+    except socket.error:
+        sys.exit("Couldn't connect to socket {}".format(args.cty_socket))
+    tornado.ioloop.IOLoop.current().run_sync(FemtoTerm(s).run)
 
 if __name__ == "__main__":
     try:
-        #logging.basicConfig(level = logging.DEBUG)
-        tornado.ioloop.IOLoop.current().run_sync(main)
+        main()
     except KeyboardInterrupt:
         pass



More information about the Commits mailing list