X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=gui%2Ftinc-gui;h=65e8b144671828324c839bd70e1576351478e1e0;hp=f135a0127ff054e2b2c5f764e16388d287084f98;hb=b6ed5c134fc43d438c622d24f949c240632f5e67;hpb=53333d6d0d870de6801352bda106286255f14319 diff --git a/gui/tinc-gui b/gui/tinc-gui index f135a012..65e8b144 100755 --- a/gui/tinc-gui +++ b/gui/tinc-gui @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 # tinc-gui -- GUI for controlling a running tincd # Copyright (C) 2009-2014 Guus Sliepen @@ -20,11 +20,12 @@ import string import socket -import wx -import sys import os import platform import time +from argparse import ArgumentParser + +import wx from wx.lib.mixins.listctrl import ColumnSorterMixin from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin @@ -32,7 +33,6 @@ if platform.system() == 'Windows': import _winreg # Classes to interface with a running tinc daemon - REQ_STOP = 0 REQ_RELOAD = 1 REQ_RESTART = 2 @@ -120,12 +120,51 @@ class Connection(object): self.socket = int(args[5]) self.status = int(args[6], 0x10) - self.weight = 123 + self.weight = 'n/a' -class VPN: - confdir = '/etc/tinc' - piddir = '/var/run' +class VPN(object): + def __init__(self, netname=None, pidfile=None, confdir='/etc/tinc', piddir='/run'): + if platform.system() == 'Windows': + sam = _winreg.KEY_READ + if platform.machine().endswith('64'): + sam = sam | _winreg.KEY_WOW64_64KEY + try: + reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) + try: + key = _winreg.OpenKey(reg, "SOFTWARE\\tinc", 0, sam) + except WindowsError: + key = _winreg.OpenKey(reg, "SOFTWARE\\Wow6432Node\\tinc", 0, sam) + confdir = _winreg.QueryValue(key, None) + except WindowsError: + pass + + if netname: + self.netname = netname + self.confbase = os.path.join(confdir, netname) + else: + self.confbase = confdir + + self.tincconf = os.path.join(self.confbase, 'tinc.conf') + + if pidfile is not None: + self.pidfile = pidfile + else: + if platform.system() == 'Windows': + self.pidfile = os.path.join(self.confbase, 'pid') + else: + if netname: + self.pidfile = os.path.join(piddir, 'tinc.' + netname + '.pid') + else: + self.pidfile = os.path.join(piddir, 'tinc.pid') + + self.sf = None + self.name = None + self.port = None + self.nodes = {} + self.edges = {} + self.subnets = {} + self.connections = {} def connect(self): # read the pidfile @@ -162,14 +201,11 @@ class VPN: self.sf.flush() resp = string.split(self.sf.readline()) self.port = info[4] - self.nodes = {} - self.edges = {} - self.subnets = {} - self.connections = {} self.refresh() def refresh(self): - self.sf.write('18 3\r\n18 4\r\n18 5\r\n18 6\r\n') + for request in (REQ_DUMP_NODES, REQ_DUMP_EDGES, REQ_DUMP_SUBNETS, REQ_DUMP_CONNECTIONS): + self.sf.write('{} {}\r\n'.format(CONTROL, request)) self.sf.flush() for node in self.nodes.values(): @@ -251,82 +287,6 @@ class VPN: resp = string.split(self.sf.readline()) return int(resp[2]) - def __init__(self, netname=None, pidfile=None): - if platform.system() == 'Windows': - sam = _winreg.KEY_READ - if platform.machine().endswith('64'): - sam = sam | _winreg.KEY_WOW64_64KEY - try: - reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) - try: - key = _winreg.OpenKey(reg, "SOFTWARE\\tinc", 0, sam) - except WindowsError: - key = _winreg.OpenKey(reg, "SOFTWARE\\Wow6432Node\\tinc", 0, sam) - VPN.confdir = _winreg.QueryValue(key, None) - except WindowsError: - pass - - if netname: - self.netname = netname - self.confbase = os.path.join(VPN.confdir, netname) - else: - self.confbase = VPN.confdir - - self.tincconf = os.path.join(self.confbase, 'tinc.conf') - - if pidfile is not None: - self.pidfile = pidfile - else: - if platform.system() == 'Windows': - self.pidfile = os.path.join(self.confbase, 'pid') - else: - if netname: - self.pidfile = os.path.join(VPN.piddir, 'tinc.' + netname + '.pid') - else: - self.pidfile = os.path.join(VPN.piddir, 'tinc.pid') - - -# GUI starts here - -argv0 = sys.argv[0] -del sys.argv[0] -netname = None -pidfile = None - - -def usage(exitcode=0): - print('Usage: ' + argv0 + ' [options]') - print('\nValid options are:') - print(' -n, --net=NETNAME Connect to net NETNAME.') - print(' --pidfile=FILENAME Read control cookie from FILENAME.') - print(' --help Display this help and exit.') - print('\nReport bugs to tinc@tinc-vpn.org.') - sys.exit(exitcode) - - -while sys.argv: - if sys.argv[0] in ('-n', '--net'): - del sys.argv[0] - netname = sys.argv[0] - elif sys.argv[0] in '--pidfile': - del sys.argv[0] - pidfile = sys.argv[0] - elif sys.argv[0] in '--help': - usage(0) - else: - print(argv0 + ': unrecognized option \'' + sys.argv[0] + '\'') - usage(1) - - del sys.argv[0] - -if netname is None: - netname = os.getenv('NETNAME') -elif netname == '.': - netname = None - -vpn = VPN(netname, pidfile) -vpn.connect() - class SuperListCtrl(wx.ListCtrl, ColumnSorterMixin, ListCtrlAutoWidthMixin): def __init__(self, parent, style): @@ -334,7 +294,7 @@ class SuperListCtrl(wx.ListCtrl, ColumnSorterMixin, ListCtrlAutoWidthMixin): ListCtrlAutoWidthMixin.__init__(self) ColumnSorterMixin.__init__(self, 16) - def get_list_ctrl(self): + def GetListCtrl(self): return self @@ -603,16 +563,6 @@ class NetPage(wx.Notebook): class MainWindow(wx.Frame): - def on_quit(self, event): - app.ExitMainLoop() - - def on_timer(self, event): - vpn.refresh() - self.np.nodes.refresh() - self.np.subnets.refresh() - self.np.edges.refresh() - self.np.connections.refresh() - def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title) @@ -634,21 +584,51 @@ class MainWindow(wx.Frame): self.SetMenuBar(menubar) self.Show() + def on_quit(self, event): + app.ExitMainLoop() + + def on_timer(self, event): + vpn.refresh() + self.np.nodes.refresh() + self.np.subnets.refresh() + self.np.edges.refresh() + self.np.connections.refresh() + + +def main(netname, pidfile): + global vpn, app + + if netname is None: + netname = os.getenv('NETNAME') + + vpn = VPN(netname, pidfile) + vpn.connect() + + app = wx.App() + mw = MainWindow(None, -1, 'Tinc GUI') + + """ + def OnTaskBarIcon(event): + mw.Raise() + """ + + """ + icon = wx.Icon("tincgui.ico", wx.BITMAP_TYPE_PNG) + taskbaricon = wx.TaskBarIcon() + taskbaricon.SetIcon(icon, 'Tinc GUI') + wx.EVT_TASKBAR_RIGHT_UP(taskbaricon, OnTaskBarIcon) + """ + + app.MainLoop() + vpn.close() + -app = wx.App() -mw = MainWindow(None, -1, 'Tinc GUI') +if __name__ == '__main__': + argparser = ArgumentParser(epilog='Report bugs to tinc@tinc-vpn.org.') -""" -def OnTaskBarIcon(event): - mw.Raise() -""" + argparser.add_argument('-n', '--net', metavar='NETNAME', dest='netname', help='Connect to net NETNAME') + argparser.add_argument('-p', '--pidfile', help='Path to the pid file (containing the controlcookie)') -""" -icon = wx.Icon("tincgui.ico", wx.BITMAP_TYPE_PNG) -taskbaricon = wx.TaskBarIcon() -taskbaricon.SetIcon(icon, 'Tinc GUI') -wx.EVT_TASKBAR_RIGHT_UP(taskbaricon, OnTaskBarIcon) -""" + options = argparser.parse_args() -app.MainLoop() -vpn.close() + main(options.netname, options.pidfile)