Ticket #197: avahi-0.6.22-bssh-options.patch

File avahi-0.6.22-bssh-options.patch, 5.5 KB (added by lkundrak, 4 years ago)
  • avahi-ui/bssh.c

    This patch adds a couple of command lines to bssh/bvnc/bshell.
    Their meanings are documented in the patch.
    
    diff -urp avahi-0.6.22.orig/avahi-ui/bssh.c avahi-0.6.22/avahi-ui/bssh.c
    old new  
    2828#include <errno.h> 
    2929#include <stdlib.h> 
    3030#include <locale.h> 
     31#include <getopt.h> 
    3132 
    3233#include <gtk/gtk.h> 
    3334 
     
    3940 
    4041#include "avahi-ui.h" 
    4142 
     43typedef enum { 
     44    COMMAND_HELP, 
     45    COMMAND_SSH, 
     46    COMMAND_VNC, 
     47    COMMAND_SHELL 
     48} Command; 
     49 
     50typedef struct Config { 
     51    char *domain; 
     52    Command command; 
     53} Config; 
     54 
     55static 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 
     66static 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 
    42110int main(int argc, char*argv[]) { 
    43111    GtkWidget *d; 
     112    Config config; 
     113    const char *argv0; 
    44114 
    45115    avahi_init_i18n(); 
    46116    setlocale(LC_ALL, ""); 
    47117 
    48     gtk_init(&argc, &argv); 
     118    if ((argv0 = strrchr(argv[0], '/'))) 
     119        argv0++; 
     120    else 
     121        argv0 = argv[0]; 
    49122 
    50123    if (g_str_has_suffix(argv[0], "bshell")) { 
    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; 
    55125    } else if (g_str_has_suffix(argv[0], "bvnc")) { 
    56         d = aui_service_dialog_new(_("Choose VNC server"), NULL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CONNECT, GTK_RESPONSE_ACCEPT, NULL); 
    57         aui_service_dialog_set_browse_service_types(AUI_SERVICE_DIALOG(d), "_rfb._tcp", NULL); 
     126        config.command = COMMAND_VNC; 
    58127    } else { 
    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; 
    61160    } 
    62161 
     162    aui_service_dialog_set_domain (AUI_SERVICE_DIALOG(d), config.domain); 
    63163    aui_service_dialog_set_resolve_service(AUI_SERVICE_DIALOG(d), TRUE); 
    64164    aui_service_dialog_set_resolve_host_name(AUI_SERVICE_DIALOG(d), !avahi_nss_support()); 
    65165