X-Git-Url: https://git.distorted.org.uk/~mdw/termux-packages/blobdiff_plain/df38a35b07180e235dec9ffca3d434aa4e7e27c9..02baa030aa6273c97592f6790499f8892cb59223:/packages/mosh/mosh.cc diff --git a/packages/mosh/mosh.cc b/packages/mosh/mosh.cc index 9c306a22..33e0b583 100644 --- a/packages/mosh/mosh.cc +++ b/packages/mosh/mosh.cc @@ -85,6 +85,7 @@ static const char *usage_format = " --predict=adaptive local echo for slower links [default]\n" "-a --predict=always use local echo even on fast links\n" "-n --predict=never never use local echo\n" +"-6 use IPv6 only\n" "\n" "-p NUM --port=NUM server-side UDP port\n" "\n" @@ -95,6 +96,8 @@ static const char *usage_format = " (example: \"ssh -p 2222\")\n" " (default: \"ssh\")\n" "\n" +" --no-init do not send terminal initialization string\n" +"\n" " --help this message\n" " --version version and copyright information\n" "\n" @@ -162,24 +165,26 @@ int main( int argc, char *argv[] ) string server = "mosh-server"; string ssh = "ssh"; string predict, port_request, ssh_port; - int help=0, version=0, fake_proxy=0; + int help=0, version=0, fake_proxy=0, term_init=1; + int force_ipv6 = 0; static struct option long_options[] = { { "client", required_argument, 0, 'c' }, { "server", required_argument, 0, 's' }, + { "no-init", no_argument, &term_init, 0 }, { "predict", required_argument, 0, 'r' }, { "port", required_argument, 0, 'p' }, { "ssh-port", required_argument, 0, 'P' }, { "ssh", required_argument, 0, 'S' }, { "help", no_argument, &help, 1 }, { "version", no_argument, &version, 1 }, - { "fake-proxy!", no_argument, &fake_proxy, 1 }, + { "fake-proxy", no_argument, &fake_proxy, 1 }, { 0, 0, 0, 0 } }; while ( 1 ) { int option_index = 0; - int c = getopt_long( argc, argv, "anp:P:", + int c = getopt_long( argc, argv, "6anp:P:", long_options, &option_index ); if ( c == -1 ) { break; @@ -213,6 +218,9 @@ int main( int argc, char *argv[] ) case 'n': predict = "never"; break; + case '6': + force_ipv6 = true; + break; default: die( usage_format, argv[0] ); } @@ -259,6 +267,9 @@ int main( int argc, char *argv[] ) memset( &hints, 0, sizeof( hints ) ); hints.ai_socktype = SOCK_STREAM; + if (force_ipv6) { + hints.ai_family = AF_INET6; + } if ( ( rv = getaddrinfo( host.c_str(), port.c_str(), @@ -271,6 +282,9 @@ int main( int argc, char *argv[] ) } int try_family = AF_INET; + if (force_ipv6) { + try_family = AF_INET6; + } // loop through all the results and connect to the first we can for ( p = servinfo; p != NULL || try_family == AF_INET; p = p->ai_next ) { if(p == NULL && try_family == AF_INET) { // start over and try AF_INET6 @@ -365,9 +379,9 @@ int main( int argc, char *argv[] ) vector server_args; server_args.push_back( "new" ); - server_args.push_back( "-s" ); server_args.push_back( "-c" ); server_args.push_back( "256" ); + server_args.push_back( "-s" ); if ( port_request.size() ) { server_args.push_back( "-p" ); server_args.push_back( port_request ); @@ -386,26 +400,36 @@ int main( int argc, char *argv[] ) } if ( commands ) { + server_args.push_back( "--" ); server_args.insert( server_args.end(), command, command + commands ); } + string quoted_self = shell_quote_string( string( argv[0] ) ); string quoted_server_args = shell_quote( server_args ); fflush( stdout ); - string proxy_arg = "ProxyCommand=" + quoted_self + " --fake-proxy -- %h %p"; + string proxy_arg = "ProxyCommand=" + quoted_self; + if (force_ipv6) { + proxy_arg += " -6"; + } + proxy_arg += " --fake-proxy -- %h %p"; string ssh_remote_command = server + " " + quoted_server_args; vector ssh_args; + ssh_args.push_back( "-n" ); + ssh_args.push_back( "-tt" ); ssh_args.push_back( "-S" ); ssh_args.push_back( "none" ); ssh_args.push_back( "-o" ); ssh_args.push_back( proxy_arg ); - ssh_args.push_back( "-t" ); ssh_args.push_back( userhost ); if ( ssh_port.size() ) { ssh_args.push_back( "-p" ); ssh_args.push_back( ssh_port ); } + if ( force_ipv6 ) { + ssh_args.push_back( "-6" ); + } ssh_args.push_back( "--" ); ssh_args.push_back( ssh_remote_command ); @@ -459,5 +483,6 @@ int main( int argc, char *argv[] ) setenv( "MOSH_KEY", key.c_str(), 1 ); setenv( "MOSH_PREDICTION_DISPLAY", predict.c_str(), 1 ); + if (!term_init) setenv( "MOSH_NO_TERM_INIT", "1", 1 ); execlp( client.c_str(), client.c_str(), ip.c_str(), port.c_str(), (char *)NULL ); }