start by reading
[zanchey/dispense2.git] / sql-edition / servers / LATClient.py
index 7c21d0d..ffa8963 100644 (file)
@@ -1,6 +1,6 @@
 from socket import *
 from select import select
 from socket import *
 from select import select
-from os import popen
+from os import popen4
 from time import sleep
 
 LATCP_SOCKET = '/var/run/latlogin'
 from time import sleep
 
 LATCP_SOCKET = '/var/run/latlogin'
@@ -12,6 +12,28 @@ LATCP_CMD_ERRORMSG = 99
 
 class LATClientException(Exception): pass
 
 
 class LATClientException(Exception): pass
 
+def read_for_a_bit(rfh):
+       message = ''
+       while 1:
+               r = select([rfh], [], [], 5.0)[0]
+               if r:
+                       message = message + rfh.read(1)
+               else:
+                       break
+       print "Received message: ", repr(message)
+       return message
+
+def write_expecting_echo(rfh, wfh, message):
+       print "Writing message:", repr(message)
+       while len(message) > 0:
+               wfh.write(message[0])
+               wfh.flush()
+               echo = rfh.read(1)
+               if echo != message[0]:
+                       print "Gah, expected echo when writing", message[0]
+               message = message[1:]
+       print "  --> Sent and echoed."
+
 class LATClient:
        def __init__(self, service = None, node = None, port = None,
                     localport = None, password = None, is_queued = False,
 class LATClient:
        def __init__(self, service = None, node = None, port = None,
                     localport = None, password = None, is_queued = False,
@@ -70,14 +92,22 @@ class LATClient:
        def reboot_server(self):
                self.sock.shutdown(2)
                self.sock.close()
        def reboot_server(self):
                self.sock.shutdown(2)
                self.sock.close()
-               mop = popen('/usr/sbin/moprc '+self.server_name, 'w')
-               mop.write('\n')
-               mop.write(self.connect_password+'\n')
-               mop.write('grim reaper\n')
-               mop.write('set priv\n')
-               mop.write(self.priv_password+'\n')
-               mop.write('init del 0\n')
-               mop.close()
+               mopw, mopr = popen4('/usr/sbin/moprc '+self.server_name)
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, '\n')
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, self.connect_password+'\n')
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, 'grim reaper\n')
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, 'set priv\n')
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, self.priv_password+'\n')
+               read_for_a_bit(mopr)
+               write_expecting_echo(mopr, mopw, 'init del 0\n')
+               read_for_a_bit(mopr)
+               mopr.close()
+               mopw.close()
                print
                print "Waiting 10 seconds for DEC server to come back to life..."
                sleep(10)
                print
                print "Waiting 10 seconds for DEC server to come back to life..."
                sleep(10)

UCC git Repository :: git.ucc.asn.au