#!/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()
