| | 43 | typedef enum { |
| | 44 | COMMAND_HELP, |
| | 45 | COMMAND_SSH, |
| | 46 | COMMAND_VNC, |
| | 47 | COMMAND_SHELL |
| | 48 | } Command; |
| | 49 | |
| | 50 | typedef struct Config { |
| | 51 | char *domain; |
| | 52 | Command command; |
| | 53 | } Config; |
| | 54 | |
| | 55 | static void help(FILE *f, const char *argv0) { |
| | 56 | fprintf(f, "%s [options]\n", argv0); |
| | 57 | fprintf(f, "%s", |
| | 58 | _(" -h --help Show this help\n" |
| | 59 | " -s --ssh Browse SSH servers\n" |
| | 60 | " -v --vnc Browse VNC servers\n" |
| | 61 | " -S --shell Browse both SSH and VNC\n" |
| | 62 | " -d --domain=DOMAIN The domain to browse in\n") |
| | 63 | ); |
| | 64 | } |
| | 65 | |
| | 66 | static int parse_command_line(Config *c, int argc, char *argv[]) { |
| | 67 | int o; |
| | 68 | |
| | 69 | static const struct option long_options[] = { |
| | 70 | { "help", no_argument, NULL, 'h' }, |
| | 71 | { "ssh", no_argument, NULL, 's' }, |
| | 72 | { "vnc", no_argument, NULL, 'v' }, |
| | 73 | { "shell", no_argument, NULL, 'S' }, |
| | 74 | { "domain", required_argument, NULL, 'd' }, |
| | 75 | { NULL, 0, NULL, 0 } |
| | 76 | }; |
| | 77 | |
| | 78 | while ((o = getopt_long(argc, argv, "hVd:svS", long_options, NULL)) >= 0) { |
| | 79 | |
| | 80 | switch(o) { |
| | 81 | case 'h': |
| | 82 | c->command = COMMAND_HELP; |
| | 83 | break; |
| | 84 | case 's': |
| | 85 | c->command = COMMAND_SSH; |
| | 86 | break; |
| | 87 | case 'v': |
| | 88 | c->command = COMMAND_VNC; |
| | 89 | break; |
| | 90 | case 'S': |
| | 91 | c->command = COMMAND_SHELL; |
| | 92 | break; |
| | 93 | case 'd': |
| | 94 | avahi_free(c->domain); |
| | 95 | c->domain = avahi_strdup(optarg); |
| | 96 | break; |
| | 97 | default: |
| | 98 | return -1; |
| | 99 | } |
| | 100 | } |
| | 101 | |
| | 102 | if (optind < argc) { |
| | 103 | fprintf(stderr, _("Too many arguments\n")); |
| | 104 | return -1; |
| | 105 | } |
| | 106 | |
| | 107 | return 0; |
| | 108 | } |
| | 109 | |
| 51 | | d = aui_service_dialog_new(_("Choose Shell Server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); |
| 52 | | aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", "_ssh._tcp", NULL); |
| 53 | | aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_rfb._tcp", _("Desktop")); |
| 54 | | aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_ssh._tcp", _("Terminal")); |
| | 124 | config.command = COMMAND_SHELL; |
| 59 | | d = aui_service_dialog_new(_("Choose SSH server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); |
| 60 | | aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_ssh._tcp", NULL); |
| | 128 | config.command = COMMAND_SSH; |
| | 129 | } |
| | 130 | |
| | 131 | /* defaults to local */ |
| | 132 | config.domain = NULL; |
| | 133 | |
| | 134 | if (parse_command_line(&config, argc, argv) < 0) { |
| | 135 | help(stderr, argv0); |
| | 136 | return 1; |
| | 137 | } |
| | 138 | |
| | 139 | gtk_init(&argc, &argv); |
| | 140 | |
| | 141 | switch (config.command) { |
| | 142 | case COMMAND_HELP: |
| | 143 | help(stdout, argv0); |
| | 144 | return 0; |
| | 145 | break; |
| | 146 | case COMMAND_SHELL: |
| | 147 | d = aui_service_dialog_new(_("Choose Shell Server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); |
| | 148 | aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", "_ssh._tcp", NULL); |
| | 149 | aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_rfb._tcp", _("Desktop")); |
| | 150 | aui_service_dialog_set_service_type_name(AUI_SERVICE_DIALOG(d), "_ssh._tcp", _("Terminal")); |
| | 151 | break; |
| | 152 | case COMMAND_VNC: |
| | 153 | d = aui_service_dialog_new(_("Choose VNC server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); |
| | 154 | aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", NULL); |
| | 155 | break; |
| | 156 | case COMMAND_SSH: |
| | 157 | d = aui_service_dialog_new(_("Choose SSH server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); |
| | 158 | aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_ssh._tcp", NULL); |
| | 159 | break; |