1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#!/usr/bin/wish 2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc check_callback {} { 4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug 5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "." 7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 1000 check_callback 10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc getout {} { 13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh 14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set delay 50 16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {flush $client_fh} 17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $delay 18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $client_fh} 19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set client_fh "" 20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $delay 21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {flush $server_fh} 22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $delay 23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $server_fh} 24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set server_fh "" 25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $delay 26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global bmesg_cnt 28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists bmesg_cnt] { 29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {tkwait window .bmesg$bmesg_cnt} 30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc check_closed {} { 36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global got_connection debug 37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh 38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! $got_connection} { 40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$client_fh != ""} { 43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ef "" 44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set ef [eof $client_fh]} 45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$ef == 1} { 46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "client_fh EOF" 48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat getout 50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$server_fh != ""} { 53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ef "" 54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set ef [eof $server_fh]} 55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$ef == 1} { 56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "server_fh EOF" 58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat getout 60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc xfer_in_to_out {} { 65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh debug do_bridge 66a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$client_fh != "" && ![eof $client_fh]} { 67a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ef "" 68a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set ef [eof $client_fh]} 69a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$ef == 0} { 70a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str "" 71a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set str [read $client_fh 4096]} 72a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 73a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat #puts stderr "xfer_in_to_out: $str" 74a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "xfer_in_to_out: [string length $str]" 75a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 76a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$server_fh != "" && $str != ""} { 77a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {puts -nonewline $server_fh $str} 78a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {flush $server_fh} 79a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 80a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 81a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 82a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 83a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 84a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 85a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc xfer_out_to_in {} { 86a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh debug do_bridge 87a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$server_fh != ""} { 88a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ef "" 89a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set ef [eof $server_fh]} 90a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$ef == 0} { 91a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str "" 92a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set str [read $server_fh 4096]} 93a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 94a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat #puts stderr "xfer_out_to_in: $str" 95a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "xfer_out_to_in: [string length $str]" 96a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 97a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$client_fh != "" && $str != ""} { 98a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {puts -nonewline $client_fh $str} 99a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {flush $client_fh} 100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc bmesg {msg} { 107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global env 108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(BMESG)]} { 109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$env(BMESG) == 0} { 112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global bmesg_cnt 116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists bmesg_cnt]} { 117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set bmesg_cnt 0 118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr bmesg_cnt 120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set w .bmesg$bmesg_cnt 121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {destroy $w} 122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat toplevel $w 123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat label $w.l -width 70 -text "$msg" 124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack $w.l 125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$env(BMESG) > 1} { 127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $env(BMESG)} {incr i} { 128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 1000 129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect_http {sock hostport which} { 135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set con "" 137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append con "CONNECT $hostport HTTP/1.1\r\n" 138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append con "Host: $hostport\r\n" 139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append con "Connection: close\r\n\r\n" 140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which CONNECT $hostport HTTP/1.1 via $cur_proxy" 142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "H: $which CONNECT $hostport HTTP/1.1 $cur_proxy"; 143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $con 145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r "" 148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cnt 0 149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {1} { 150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append r $c 157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {[regexp "\r\n\r\n" $r] || [regexp "a--no--\n\n" $r]} { 158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break 159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$cnt > 30000} { 161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break 162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [regexp {HTTP/.* 200} $r]} { 165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "did not find HTTP 200 #1" 166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect_socks4 {sock hostport which} { 172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set host "" 175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set port "" 176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $hostport mvar host port] { 177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse host:port $hostport" 180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 "" 185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i2 "" 186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i3 "" 187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i4 "" 188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set socks4a 0 190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$host == "localhost" || $host == "127.0.0.1"} { 192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 127 193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i2 0 194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i3 0 195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i4 1 196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp {^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$} $host] { 198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n [split $host "."] 199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 [lindex $n 0] 200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i2 [lindex $n 1] 201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i3 [lindex $n 2] 202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i4 [lindex $n 3] 203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 0 205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i2 0 206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i3 0 207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i4 3 208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set socks4a 1 210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$socks4a} { 213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which socks4a connection to $host:$port via $cur_proxy" 214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which socks4 connection to $host:$port via $cur_proxy" 216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p1 [binary format ccScccc 4 1 $port $i1 $i2 $i3 $i4] 219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p2 "nobody" 220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p3 [binary format c 0] 221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p1 223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p2 224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p3 225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$socks4a} { 226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $host 227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p3 228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r ""; set s ""; set i 0; set cnt 0 232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 1 233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$cnt < 30000 && $i < 8} { 234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $c c s 243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i == 0 && $s != 0} { 244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks4: $i - $s" 245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 0 246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i == 1 && $s != 90} { 248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks4: $i - $s" 249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 0 250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r "$r,$s" 252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr i 253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! $ok} { 255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks4 failure: $r" 256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect_socks5 {sock hostport which} { 262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set host "" 265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set port "" 266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $hostport mvar host port] { 267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse host:port $hostport" 270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p1 [binary format ccc 5 1 0] 275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p1 276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r ""; set s ""; set i 0; set cnt 0 279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 1 280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$cnt < 30000 && $i < 2} { 281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 284a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 285a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 286a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 289a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $c c s 290a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i == 0 && $s != 5} { 291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "$i - $s" 292a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 0 293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i == 1 && $s != 0} { 295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "$i - $s" 296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 0 297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r "$r,$s" 299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr i 300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 301a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! $ok} { 302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks5 failure: $r" 303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 307a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set len [string length $host] 308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p1 [binary format ccccc 5 1 0 3 $len] 309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p2 $host 310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n1 [expr int($port/256)] 312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n2 [expr "$port - $n1 * 256"] 313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set p3 [binary format cc $n1 $n2] 314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which socks5 connection to $host:$port via $cur_proxy" 316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p1 318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p2 319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $p3 320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 ""; set i2 ""; set i3 ""; set i4 "" 323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r ""; set s ""; set i 0; set cnt 0 324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ok 1 325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$cnt < 30000 && $i < 4} { 326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $c c s 335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i == 0} { 336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i1 $s 337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$i == 1} { 338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i2 $s 339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$i == 2} { 340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i3 $s 341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$i == 3} { 342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i4 $s 343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr i 345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r "i1=$i1,i2=$i2,i3=$i3,i4=$i4" 347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i4 == 1} { 349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n 6 350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$i4 == 3} { 351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c "" 352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < 1000} {incr i} { 353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks5 failure c: $r" 363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $c c s 367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n [expr $s + 2] 368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$i4 == 4} { 369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set n 18 370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks5 failure x: $r" 372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat #puts "n=$n --- $r" 376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i 0; set cnt 0 378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$cnt < 30000 && $i < $n} { 379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr i 387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i1 != 5 || $i2 != 0 || $i3 != 0} { 389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socks failure $r" 390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect_repeater {sock hostport which repeater} { 396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # 250 is UltraVNC buffer size. 399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set con [binary format a250 $repeater] 400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which REPEATER $repeater via $cur_proxy" 402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "R: $which CONNECT $hostport | $repeater $cur_proxy"; 403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $con 405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set r "" 408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cnt 0 409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {1} { 410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 20 415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append r $c 417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {[string length $r] >= 12} { 418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "do_connect_repeater: $r" 419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break 420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$cnt > 30000} { 422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break 423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc vread {n sock} { 428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str "" 429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set max 3000 430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set dt 10 431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set i 0 432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cnt 0 433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$cnt < $max && $i < $n} { 434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr cnt 435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set c [read $sock 1] 436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$c == ""} { 437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat check_closed 438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $dt 439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat continue 440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat incr i 442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append str $c 443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$i != $n} { 445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vread failure $n $i" 446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return $str 449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc append_handshake {str} { 452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global env 453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists env(SSVNC_PREDIGESTED_HANDSHAKE)] { 454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set file $env(SSVNC_PREDIGESTED_HANDSHAKE) 455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fh "" 456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set fh [open $file a]} 457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$fh != ""} { 458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts $fh $str 459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $fh} 460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 463a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc vencrypt_bridge_connection {fh host port} { 465a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt_bridge_connection: got connection $fh $host $port" 466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "vencrypt_bridge_connection: got connection $fh $host $port" 467a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global viewer_sock 468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_sock $fh 469a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 470a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 471a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc center_win {w} { 472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set W [winfo screenwidth $w] 474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set W [expr $W + 1] 475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm geometry $w +$W+0 476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set x [expr [winfo screenwidth $w]/2 - [winfo width $w]/2] 478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set y [expr [winfo screenheight $w]/2 - [winfo height $w]/2] 479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm geometry $w +$x+$y 481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm deiconify $w 482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc get_user_pass {} { 487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global env 488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set up "" 489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists env(SSVNC_UNIXPW)] { 490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rm 0 491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set up $env(SSVNC_UNIXPW) 492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^rm:} $up] { 493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rm 1 494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub {^rm:} $up "" up 495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [file exists $up] { 497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fh "" 498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set f $up 499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set fh [open $up r]} 500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$fh != ""} { 501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat gets $fh u 502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat gets $fh p 503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $fh} 504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set up "$u@$p" 505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rm} { 507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {file delete $f} 508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists env(SSVNC_VENCRYPT_USERPASS)] { 511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set up $env(SSVNC_VENCRYPT_USERPASS) 512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$up != ""} { 514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return $up 515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat toplevel .t 518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm title .t {VeNCrypt Viewer Bridge User/Pass} 519a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global user pass 521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set user "" 522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set pass "" 523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat label .t.l -text {SSVNC VeNCrypt Viewer Bridge} 524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat frame .t.f0 526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat frame .t.f0.fL 527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat label .t.f0.fL.la -text {Username: } 528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat label .t.f0.fL.lb -text {Password: } 529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .t.f0.fL.la .t.f0.fL.lb -side top 531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat frame .t.f0.fR 533a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat entry .t.f0.fR.ea -width 24 -textvariable user 534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat entry .t.f0.fR.eb -width 24 -textvariable pass -show * 535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 536a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .t.f0.fR.ea .t.f0.fR.eb -side top -fill x 537a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .t.f0.fL -side left 539a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .t.f0.fR -side right -expand 1 -fill x 540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button .t.no -text Cancel -command {set user ""; set pass ""; destroy .t} 542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button .t.ok -text Done -command {destroy .t} 543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 544a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat center_win .t 545a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .t.l .t.f0 .t.no .t.ok -side top -fill x 546a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat update 547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm deiconify .t 548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 549a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bind .t.f0.fR.ea <Return> {focus .t.f0.fR.eb} 550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bind .t.f0.fR.eb <Return> {destroy .t} 551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat focus .t.f0.fR.ea 552a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm resizable .t 1 0 554a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm minsize .t [winfo reqwidth .t] [winfo reqheight .t] 555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat tkwait window .t 557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$user == "" || $pass == ""} { 558a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "" 559a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 560a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "$user@$pass" 561a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 563a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_vencrypt_viewer_bridge {listen connect} { 565a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global env 566a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat #set env(BMESG) 1 568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 569a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vencrypt_constants 570a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set backwards 0 572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_PREDIGESTED_HANDSHAKE)]} { 574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "no SSVNC_PREDIGESTED_HANDSHAKE filename in environment." 575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 576a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 577a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set handshake $env(SSVNC_PREDIGESTED_HANDSHAKE) 578a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg $handshake 579a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 580a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$listen < 0} { 581a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set backwards 1 582a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set listen [expr -$listen] 583a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 584a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # listen on $listen 586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global viewer_sock 587a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_sock "" 588a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set lsock "" 589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set lsock [socket -myaddr 127.0.0.1 -server vencrypt_bridge_connection $listen]}] 590a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error listening on 127.0.0.1:$listen" 592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "listen on $listen OK" 595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # accept 597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vwait viewer_sock 598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $lsock} 599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fconfigure $viewer_sock -translation binary -blocking 0 600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global got_connection 602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set got_connection 1 603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # connect to $connect 605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set server_sock "" 606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set server_sock [socket 127.0.0.1 $connect]}] 607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error connecting to 127.0.0.1:$connect" 609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "made connection to $connect" 612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fconfigure $server_sock -translation binary -blocking 0 613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$backwards} { 615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "reversing roles of viewer and server" 616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t $viewer_sock 617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_sock $server_sock 618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set server_sock $t 619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 620a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # wait for SSVNC_PREDIGESTED_HANDSHAKE "done", put in hash. 622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set dt 200 623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set slept 0 624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set maxwait 20000 625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set hs(mode) init 626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {$slept < $maxwait} { 627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after $dt 628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set slept [expr $slept + $dt] 629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set done 0 630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fh "" 631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {set fh [open $handshake r]} 632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str "" 633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$fh != ""} { 634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat array unset hs 635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while {[gets $fh line] > -1} { 636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set line [string trim $line] 637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str "$str$line\n"; 638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$line == "done"} { 639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set done 1 640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp {=} $line] { 641a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set s [split $line "="] 642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set key [lindex $s 0] 643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set val [lindex $s 1] 644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set hs($key) $val 645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 646a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 647a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $fh} 648a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 649a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$done} { 650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr $str 651a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "$str" 652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break 653a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 654a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 655a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 656a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch [file delete $handshake] 657a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 658a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists hs(sectype)]} { 659a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "no hs(sectype) found" 660a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 661a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 663a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # read viewer RFB 664a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists hs(server)]} { 665a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set hs(server) "RFB 003.008" 666a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 667a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $viewer_sock "$hs(server)\n" 668a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $viewer_sock 669a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "sent $hs(server) to viewer sock." 670a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 671a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_rfb [vread 12 $viewer_sock] 672a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "read viewer_rfb $viewer_rfb" 673a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 674a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_major 3 675a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_minor 8 676a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^RFB 003\.0*([0-9][0-9]*)} $viewer_rfb m v] { 677a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set viewer_minor $v 678a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 679a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 680a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$hs(sectype) == $rfbSecTypeAnonTls} { 681a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "handling rfbSecTypeAnonTls" 682a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$viewer_major > 3 || $viewer_minor >= 7} { 683a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "viewer >= 3.7, nothing to set up." 684a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 685a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "viewer <= 3.3, faking things up." 686a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $server_sock] 687a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c nsectypes 688a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "nsectypes=$nsectypes" 689a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $nsectypes} {incr i} { 690a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $server_sock] 691a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c st 692a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr " $i: $st" 693a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set types($st) $i 694a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 695a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set use 1 696a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists types(1)] { 697a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set use 1 698a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists types(2)] { 699a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set use 2 700a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 701a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "no valid sectypes" 702a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 703a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 704a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # this should be MSB: 705a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 706a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 707a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 708a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock $use 709a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 710a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock $use 711a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$use == 1} { 712a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 4 $server_sock] 713a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 714a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 715a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$hs(sectype) == $rfbSecTypeVencrypt} { 716a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "handling rfbSecTypeVencrypt" 717a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists hs(subtype)]} { 718a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "no subtype" 719a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 720a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 721a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "None" 722a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set plain 0 723a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 724a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set sub_type $hs(subtype) 725a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 726a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 727a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$sub_type == $rfbVencryptTlsNone} { 728a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "None" 729a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$sub_type == $rfbVencryptTlsVnc} { 730a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "VncAuth" 731a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$sub_type == $rfbVencryptTlsPlain} { 732a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "None" 733a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set plain 1 734a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$sub_type == $rfbVencryptX509None} { 735a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "None" 736a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$sub_type == $rfbVencryptX509Vnc} { 737a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "VncAuth" 738a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$sub_type == $rfbVencryptX509Plain} { 739a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set fake_type "None" 740a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set plain 1 741a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 742a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 743a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$plain} { 744a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set up [get_user_pass] 745a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {@} $up] { 746a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set user $up 747a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set pass $up 748a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub {@.*$} $user "" user 749a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub {^[^@]*@} $pass "" pass 750a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 751a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 752a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 753a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock [string length $user] 754a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 755a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 756a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock 0 757a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $server_sock [string length $pass] 758a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "sending VencryptPlain user and pass." 759a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $server_sock $user 760a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $server_sock $pass 761a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $server_sock 762a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 763a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 764a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ft 0 765a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$fake_type == "None"} { 766a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ft 1 767a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$fake_type == "VncAuth"} { 768a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set ft 2 769a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 770a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "no valid fake_type" 771a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 772a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 773a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 774a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$viewer_major > 3 || $viewer_minor >= 7} { 775a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 1 776a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock $ft 777a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $viewer_sock] 778a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c cr 779a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$cr != $ft} { 780a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "client selected wront type $cr $ft" 781a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 782a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 783a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 784a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "viewer <= 3.3, faking things up." 785a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat # this should be MSB: 786a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 787a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 788a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock 0 789a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $viewer_sock $ft 790a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 791a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$ft == 1} { 792a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 4 $server_sock] 793a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 794a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 795a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh 798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set client_fh $viewer_sock 799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set server_fh $server_sock 800a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 801a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fileevent $client_fh readable xfer_in_to_out 802a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fileevent $server_fh readable xfer_out_to_in 803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc vsend_uchar {sock n} { 806a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set s [binary format c $n] 807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $s 808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 811a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc vencrypt_constants {} { 812a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat uplevel { 813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbSecTypeAnonTls 18 814a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbSecTypeVencrypt 19 815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptPlain 256 817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptTlsNone 257 818a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptTlsVnc 258 819a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptTlsPlain 259 820a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptX509None 260 821a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptX509Vnc 261 822a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rfbVencryptX509Plain 262 823a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 824a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 825a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 826a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_vencrypt {sock which} { 827a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vencrypt_constants 829a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 830a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $sock] 831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c vs_major 832a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $sock] 833a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c vs_minor 834a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 835a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$vs_minor == "" || $vs_major == "" || $vs_major != 0 || $vs_minor < 2} { 836a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt failure bad vs version major=$major minor=$minor" 837a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 838a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 839a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "server vencrypt version $vs_major.$vs_minor" 840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "server vencrypt version $vs_major.$vs_minor" 841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "subversion=0.2" 843a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $sock 0 844a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $sock 2 845a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 846a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $sock] 847a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c result 848a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$result != 0} { 849a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt failed result: $result" 850a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "vencrypt failed result: $result" 851a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 853a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 854a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $sock] 855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c nsubtypes 856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "nsubtypes: $nsubtypes" 857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "nsubtypes: $nsubtypes" 858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 859a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $nsubtypes} {incr i} { 860a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 4 $sock] 861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t I stype 862a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "subtypes: $i: $stype" 863a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "sst$i=$stype" 864a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtypes($stype) $i 865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype 0 868a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists subtypes($rfbVencryptX509None)] { 869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptX509None 870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptX509None" 871a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists subtypes($rfbVencryptX509Vnc)] { 872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptX509Vnc 873a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptX509Vnc" 874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists subtypes($rfbVencryptX509Plain)] { 875a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptX509Plain 876a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptX509Plain" 877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists subtypes($rfbVencryptTlsNone)] { 878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptTlsNone 879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptTlsNone" 880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists subtypes($rfbVencryptTlsVnc)] { 881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptTlsVnc 882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptTlsVnc" 883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [info exists subtypes($rfbVencryptTlsPlain)] { 884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set subtype $rfbVencryptTlsPlain 885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "selected rfbVencryptTlsPlain" 886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "subtype=$subtype" 888a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set st [binary format I $subtype] 889a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $st 890a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 891a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$subtype == 0} { 893a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt could not find an acceptable subtype: $subtype" 894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 897a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set t [vread 1 $sock] 898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $t c result 899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "result=$result" 900a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 901a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "done" 902a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 903a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$result == 0} { 904a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt failure result: $result" 905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect_vencrypt {sock hostport which} { 911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vencrypt_constants 914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "pxy=$which vencrypt $hostport via $cur_proxy" 916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "V: $which vencrypt $hostport via $cur_proxy" 917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "mode=connect" 919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set srfb [vread 12 $sock] 921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "srfb: $srfb" 922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "srfb: $srfb" 923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set srfb [string trim $srfb] 924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "server=$srfb" 925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set minor "" 927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^RFB 00[456]\.} $srfb] { 928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set minor 8 929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp {^RFB 003\.0*([0-9][0-9]*)} $srfb mvar minor] { 930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 932a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$minor == "" || $minor < 7} { 933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "vencrypt failure bad minor=$minor" 934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set vrfb "RFB 003.008\n" 938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$minor == 7} { 939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set vrfb "RFB 003.007\n" 940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts -nonewline $sock $vrfb 942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat flush $sock 943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set vrfb [string trim $vrfb] 945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "viewer=$vrfb" 946a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "latency=0.10" 947a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 948a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str [vread 1 $sock] 949a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $str c nsec 950a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "nsec: $nsec" 951a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "nsec: $nsec" 952a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $nsec} {incr i} { 953a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set str [vread 1 $sock] 954a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat binary scan $str c sec 955a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "sec: $sec" 956a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "sec: $sec" 957a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set sectypes($i) $sec 958a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 959a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $nsec} {incr i} { 960a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$sectypes($i) == $rfbSecTypeVencrypt} { 961a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "sectype=$rfbSecTypeVencrypt" 962a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $sock $rfbSecTypeVencrypt 963a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 500 964a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "do_vencrypt $sock $which" 965a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_vencrypt $sock $which 966a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 967a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 968a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 969a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $nsec} {incr i} { 970a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$sectypes($i) == $rfbSecTypeAnonTls} { 971a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "sectype=$rfbSecTypeAnonTls" 972a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vsend_uchar $sock $rfbSecTypeAnonTls 973a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "rfbSecTypeAnonTls" 974a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 500 975a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat append_handshake "done" 976a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 977a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 979a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 980a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 981a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc do_connect {sock type hostport which} { 982a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$type == "http"} { 983a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect_http $sock $hostport $which 984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$type == "socks"} { 985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect_socks4 $sock $hostport $which 986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$type == "socks5"} { 987a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect_socks5 $sock $hostport $which 988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^repeater:} $type] { 989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub -nocase {^repeater:} $type "" repeater 990a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect_repeater $sock $hostport $which $repeater 991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif {$type == "vencrypt"} { 992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect_vencrypt $sock $hostport $which 993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 995a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 996a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc handle_connection {fh host port} { 997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global proxy1_host proxy1_port proxy1_type 998a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global proxy2_host proxy2_port proxy2_type 999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global proxy3_host proxy3_port proxy3_type 1000a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global proxy1 proxy2 proxy3 dest 1001a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global debug cur_proxy 1002a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global got_connection 1003a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1004a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$got_connection} { 1005a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $fh} 1006a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 1007a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1008a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set got_connection 1 1009a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1010a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 1011a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "connection from: $host $port" 1012a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "socket $proxy1_host $proxy1_port" 1013a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1014a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set sock [socket $proxy1_host $proxy1_port]}] 1016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 1017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error connecting" 1018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {close $sock} 1019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 1020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1023a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug} { 1024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "got sock: $sock" 1025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global client_fh server_fh 1028a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set client_fh $fh 1029a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set server_fh $sock 1030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fconfigure $fh -translation binary -blocking 0 1032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fconfigure $sock -translation binary -blocking 0 1033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cur_proxy $proxy1 1035a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$proxy2 != ""} { 1036a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect $sock $proxy1_type "$proxy2_host:$proxy2_port" 1 1037a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1038a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cur_proxy $proxy2 1039a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$proxy3 != ""} { 1040a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect $sock $proxy2_type "$proxy3_host:$proxy3_port" 2 1041a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1042a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set cur_proxy $proxy3 1043a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect $sock $proxy3_type $dest 3 1044a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1045a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1046a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect $sock $proxy2_type $dest 2 1047a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1048a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1049a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_connect $sock $proxy1_type $dest 1 1050a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1051a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1052a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fileevent $fh readable xfer_in_to_out 1053a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat fileevent $sock readable xfer_out_to_in 1054a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1055a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1056a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc proxy_type {proxy} { 1057a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp -nocase {^socks://} $proxy] { 1058a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "socks" 1059a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^socks4://} $proxy] { 1060a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "socks" 1061a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^socks4a://} $proxy] { 1062a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "socks" 1063a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^socks5://} $proxy] { 1064a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "socks5" 1065a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^http://} $proxy] { 1066a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "http" 1067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^https://} $proxy] { 1068a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "http" 1069a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^repeater://.*\+(.*)$} $proxy mat idstr] { 1070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "repeater:$idstr" 1071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } elseif [regexp -nocase {^vencrypt://} $proxy] { 1072a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "vencrypt" 1073a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1074a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "http" 1075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1077a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc proxy_hostport {proxy} { 1079a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub -nocase {^[a-z][a-z0-9]*://} $proxy "" hp 1080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat regsub {\+.*$} $hp "" hp 1081a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [regexp {:[0-9]} $hp] && [regexp {^repeater:} $proxy]} { 1082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set hp "$hp:5900" 1083a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1084a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return $hp 1085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1086a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1087a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc setb {} { 1088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat wm withdraw . 1089a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat catch {destroy .b} 1090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button .b -text "CONNECT_BR" -command {destroy .} 1091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pack .b 1092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 1000 check_callback 1093a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatproc connect_br_sleep {} { 1096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat global env 1097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists env(CONNECT_BR_SLEEP)] { 1098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^[0-9][0-9]*$} $env(CONNECT_BR_SLEEP)] { 1099a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setb 1100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for {set i 0} {$i < $env(CONNECT_BR_SLEEP)} {incr i} { 1101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "$i sleep" 1102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 1000 1103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatglobal env 1109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset got_connection 0 1111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset proxy1 "" 1112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset proxy2 "" 1113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset proxy3 "" 1114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset client_fh "" 1115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset server_fh "" 1116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset do_bridge 0 1117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatset debug 0 1118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatif [info exists env(CONNECT_BR_DEBUG)] { 1120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set debug 1 1121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatif [info exists env(SSVNC_VENCRYPT_VIEWER_BRIDGE)] { 1124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set s [split $env(SSVNC_VENCRYPT_VIEWER_BRIDGE) ","] 1125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set listen [lindex $s 0] 1126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set connect [lindex $s 1] 1127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setb 1129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do_vencrypt_viewer_bridge $listen $connect 1131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set do_bridge 1 1132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatif {$do_bridge} { 1135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 1136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} else { 1137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$debug && 0} { 1138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_DEST)]} { 1139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set env(SSVNC_DEST) "haystack:2037" 1140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_PROXY)]} { 1142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set env(SSVNC_PROXY) "haystack:2037" 1143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_LISTEN)]} { 1145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set env(SSVNC_LISTEN) "6789" 1146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_DEST)]} { 1149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit; 1150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_PROXY)]} { 1152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit; 1153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {! [info exists env(SSVNC_LISTEN)] && ! [info exists env(SSVNC_REVERSE)]} { 1155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit; 1156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat #set env(BMESG) 1 1160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set dest $env(SSVNC_DEST) 1162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {,} $env(SSVNC_PROXY)] { 1164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set s [split $env(SSVNC_PROXY) ","] 1165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1 [lindex $s 0] 1166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2 [lindex $s 1] 1167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3 [lindex $s 2] 1168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1 $env(SSVNC_PROXY) 1170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1_type [proxy_type $proxy1] 1173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1_hp [proxy_hostport $proxy1] 1174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1_host "" 1176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy1_port "" 1177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $proxy1_hp mvar proxy1_host proxy1_port] { 1178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 1179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse hp1 host:port $proxy1_hp" 1181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 1182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 1183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_type "" 1186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_host "" 1187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_port "" 1188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$proxy2 != ""} { 1190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_type [proxy_type $proxy2] 1191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_hp [proxy_hostport $proxy2] 1192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_host "" 1194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy2_port "" 1195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $proxy2_hp mvar proxy2_host proxy2_port] { 1196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 1197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse hp2 host:port $proxy2_hp" 1199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 1200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 1201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_type "" 1205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_host "" 1206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_port "" 1207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$proxy3 != ""} { 1209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_type [proxy_type $proxy3] 1210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_hp [proxy_hostport $proxy3] 1211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_host "" 1213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set proxy3_port "" 1214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $proxy3_hp mvar proxy3_host proxy3_port] { 1215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 1216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse hp3 host:port $proxy3_hp" 1218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 1219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 1220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "1: '$proxy1_host' '$proxy1_port' '$proxy1_type'"; 1224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "2: '$proxy2_host' '$proxy2_port' '$proxy2_type'"; 1225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "3: '$proxy3_host' '$proxy3_port' '$proxy3_type'"; 1226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 1227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [info exists env(SSVNC_REVERSE)] { 1228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rhost "" 1229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rport "" 1230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if [regexp {^(.*):([0-9][0-9]*)$} $env(SSVNC_REVERSE) mvar rhost rport] { 1231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ; 1232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "could not parse SSVNC_REVERSE host:port $env(SSVNC_REVERSE)" 1234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy . 1235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat exit 1 1236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setb 1238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set lsock [socket $rhost $rport]}] 1239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 1240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error reversing" 1241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "1 error reversing" 1242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 2000 1243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set lsock [socket $rhost $rport]}] 1244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 1246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error reversing" 1247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "2 error reversing" 1248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat after 2000 1249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set lsock [socket $rhost $rport]}] 1250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 1252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error reversing" 1253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "3 error reversing" 1254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 1255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "SSVNC_REVERSE to $rhost $rport OK"; 1257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat bmesg "SSVNC_REVERSE to $rhost $rport OK"; 1258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat connect_br_sleep 1259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat handle_connection $lsock $rhost $rport 1260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 1261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set lport $env(SSVNC_LISTEN) 1262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat connect_br_sleep 1263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat set rc [catch {set lsock [socket -myaddr 127.0.0.1 -server handle_connection $lport]}] 1264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if {$rc != 0} { 1265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "error listening" 1266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat destroy .; exit 1 1267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat puts stderr "SSVNC_LISTEN on $lport OK"; 1269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setb 1270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 1271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1272