|
- #!/usr/bin/env python
-
- import alarmdecoder
- import sys, select
- import termios, tty
- import time
-
- def main():
- if len(sys.argv) != 5:
- print "Syntax: {0} [host:port] [ca cert] [client cert] [client key]\r".format(sys.argv[0])
- return 1
-
- host, port = sys.argv[1].split(':')
- ca_cert = sys.argv[2]
- client_cert = sys.argv[3]
- client_key = sys.argv[4]
-
- running = True
-
- old_term_settings = termios.tcgetattr(sys.stdin.fileno())
- tty.setraw(sys.stdin.fileno())
-
- try:
- print "Opening connection to {0}:{1}\r".format(host, port)
-
- dev = alarmdecoder.devices.SocketDevice(interface=(host, int(port)))
- dev.ssl = True
- dev.ssl_certificate = client_cert
- dev.ssl_key = client_key
- dev.ssl_ca = ca_cert
-
- dev.open(no_reader_thread=True)
- dev.write("\r") # HACK: Prime the pump. This likely has to do with the SSL handshake
- # not being completed when we get down to the select.
-
- while running:
- ifh, ofh, efh = select.select([sys.stdin, dev._device], [], [], 0)
-
- for h in ifh:
- if h == sys.stdin:
- data = h.read(1)
-
- # Break out if we get a CTRL-C
- if data == "\x03":
- print "Exiting..\r"
- running = False
- break
-
- else:
- dev.write(data)
-
- else:
- data = h.read(100)
-
- sys.stdout.write(data)
- sys.stdout.flush()
-
- dev.close()
- print "Connection closed.\r"
-
- finally:
- termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, old_term_settings)
-
-
- if __name__ == '__main__':
- main()
|