mirror of https://gogs.blitter.com/RLabs/xs
Cleaned up/added commenting (hkexsh/, hkexnet/)
Signed-off-by: Russ Magee <rmagee@gmail.com>
This commit is contained in:
parent
7e60a395ad
commit
cbf3c77342
|
@ -7,6 +7,10 @@
|
||||||
// golang implementation by Russ Magee (rmagee_at_gmail.com)
|
// golang implementation by Russ Magee (rmagee_at_gmail.com)
|
||||||
package hkexnet
|
package hkexnet
|
||||||
|
|
||||||
|
// KEX algorithm values
|
||||||
|
//
|
||||||
|
// Specified (in string form) as the extensions parameter
|
||||||
|
// to hkexnet.Dial()
|
||||||
const (
|
const (
|
||||||
KEX_HERRADURA256 = iota // this MUST be first for default if omitted in ctor
|
KEX_HERRADURA256 = iota // this MUST be first for default if omitted in ctor
|
||||||
KEX_HERRADURA512
|
KEX_HERRADURA512
|
||||||
|
@ -27,7 +31,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Sent from client to server in order to specify which
|
// Sent from client to server in order to specify which
|
||||||
// algo shall be used (eg., HerraduraKEx, [TODO: others...])
|
// algo shall be used (see hkexnet.KEX_HERRADURA256, ...)
|
||||||
type KEXAlg uint8
|
type KEXAlg uint8
|
||||||
|
|
||||||
// Extended exit status codes - indicate comm/pty issues
|
// Extended exit status codes - indicate comm/pty issues
|
||||||
|
@ -63,8 +67,8 @@ const (
|
||||||
CSOTunHangup // client -> server: tunnel lport hung up
|
CSOTunHangup // client -> server: tunnel lport hung up
|
||||||
)
|
)
|
||||||
|
|
||||||
// TunEndpoint.tunCtl control values - used to control workers for client or server tunnels
|
// TunEndpoint.tunCtl control values - used to control workers for client
|
||||||
// depending on the code
|
// or server tunnels depending on the code
|
||||||
const (
|
const (
|
||||||
TunCtl_Client_Listen = 'a'
|
TunCtl_Client_Listen = 'a'
|
||||||
// [CSOTunAccept]
|
// [CSOTunAccept]
|
||||||
|
@ -77,12 +81,13 @@ const (
|
||||||
// action:server side should dial() rport on client's behalf
|
// action:server side should dial() rport on client's behalf
|
||||||
)
|
)
|
||||||
|
|
||||||
// Channel status Op byte type
|
// Channel status Op byte type (see CSONone, ... and CSENone, ...)
|
||||||
type CSOType uint32
|
type CSOType uint32
|
||||||
|
|
||||||
//TODO: this should be small (max unfragmented packet size?)
|
//TODO: this should be small (max unfragmented packet size?)
|
||||||
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
|
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
|
||||||
|
|
||||||
|
// Session symmetric crypto algs
|
||||||
const (
|
const (
|
||||||
CAlgAES256 = iota
|
CAlgAES256 = iota
|
||||||
CAlgTwofish128 // golang.org/x/crypto/twofish
|
CAlgTwofish128 // golang.org/x/crypto/twofish
|
||||||
|
@ -94,11 +99,12 @@ const (
|
||||||
// Available ciphers for hkex.Conn
|
// Available ciphers for hkex.Conn
|
||||||
type CSCipherAlg uint32
|
type CSCipherAlg uint32
|
||||||
|
|
||||||
|
// Session packet auth HMAC algs
|
||||||
const (
|
const (
|
||||||
HmacSHA256 = iota
|
HmacSHA256 = iota
|
||||||
HmacSHA512
|
HmacSHA512
|
||||||
HmacNoneDisallowed
|
HmacNoneDisallowed
|
||||||
)
|
)
|
||||||
|
|
||||||
// Available HMACs for hkex.Conn (TODO: not currently used)
|
// Available HMACs for hkex.Conn
|
||||||
type CSHmacAlg uint32
|
type CSHmacAlg uint32
|
||||||
|
|
|
@ -9,13 +9,12 @@
|
||||||
|
|
||||||
package hkexnet
|
package hkexnet
|
||||||
|
|
||||||
// TODO:
|
// Implementation of HKEx-wrapped versions of the golang standard
|
||||||
// If key exchange algs other than the experimental HerraduraKEx are to
|
// net package interfaces, allowing clients and servers to simply replace
|
||||||
// be supported, the Dial() and Accept() methods should take a kex param,
|
// 'net.Dial' and 'net.Listen' with 'hkex.Dial' and 'hkex.Listen'
|
||||||
// specifying which to use; and the client/server negotiation must then
|
// (though some extra methods are implemented and must be used
|
||||||
// prefix the channel setup with this param over the wire in order to decide
|
// for things outside of the scope of plain sockets).
|
||||||
// which is in use.
|
|
||||||
//
|
|
||||||
// DESIGN PRINCIPLE: There shall be no protocol features which enable
|
// DESIGN PRINCIPLE: There shall be no protocol features which enable
|
||||||
// downgrade attacks. The server shall have final authority to accept or
|
// downgrade attacks. The server shall have final authority to accept or
|
||||||
// reject any and all proposed KEx and connection parameters proposed by
|
// reject any and all proposed KEx and connection parameters proposed by
|
||||||
|
@ -23,11 +22,6 @@ package hkexnet
|
||||||
// with possibly a status code sent so client can determine why connection
|
// with possibly a status code sent so client can determine why connection
|
||||||
// was denied (compare to how failed auth is communicated to client).
|
// was denied (compare to how failed auth is communicated to client).
|
||||||
|
|
||||||
// Implementation of HKEx-wrapped versions of the golang standard
|
|
||||||
// net package interfaces, allowing clients and servers to simply replace
|
|
||||||
// 'net.Dial' and 'net.Listen' with 'hkex.Dial' and 'hkex.Listen'
|
|
||||||
// (though some extra methods are implemented and must be used
|
|
||||||
// for things outside of the scope of plain sockets).
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/cipher"
|
"crypto/cipher"
|
||||||
|
@ -173,42 +167,6 @@ func (hc *Conn) SetOpts(opts uint32) {
|
||||||
hc.opts = opts
|
hc.opts = opts
|
||||||
}
|
}
|
||||||
|
|
||||||
func getkexalgnum(extensions ...string) (k KEXAlg) {
|
|
||||||
k = KEX_HERRADURA256 // default
|
|
||||||
for _, s := range extensions {
|
|
||||||
switch s {
|
|
||||||
case "KEX_HERRADURA256":
|
|
||||||
k = KEX_HERRADURA256
|
|
||||||
break //out of for
|
|
||||||
case "KEX_HERRADURA512":
|
|
||||||
k = KEX_HERRADURA512
|
|
||||||
break //out of for
|
|
||||||
case "KEX_HERRADURA1024":
|
|
||||||
k = KEX_HERRADURA1024
|
|
||||||
break //out of for
|
|
||||||
case "KEX_HERRADURA2048":
|
|
||||||
k = KEX_HERRADURA2048
|
|
||||||
break //out of for
|
|
||||||
case "KEX_KYBER512":
|
|
||||||
k = KEX_KYBER512
|
|
||||||
break //out of for
|
|
||||||
case "KEX_KYBER768":
|
|
||||||
k = KEX_KYBER768
|
|
||||||
break //out of for
|
|
||||||
case "KEX_KYBER1024":
|
|
||||||
k = KEX_KYBER1024
|
|
||||||
break //out of for
|
|
||||||
case "KEX_NEWHOPE":
|
|
||||||
k = KEX_NEWHOPE
|
|
||||||
break //out of for
|
|
||||||
case "KEX_NEWHOPE_SIMPLE":
|
|
||||||
k = KEX_NEWHOPE_SIMPLE
|
|
||||||
break //out of for
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return a new hkexnet.Conn
|
// Return a new hkexnet.Conn
|
||||||
//
|
//
|
||||||
// Note this is internal: use Dial() or Accept()
|
// Note this is internal: use Dial() or Accept()
|
||||||
|
@ -253,6 +211,26 @@ func _new(kexAlg KEXAlg, conn *net.Conn) (hc *Conn, e error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// applyConnExtensions processes optional Dial() negotiation
|
||||||
|
// parameters. See also getkexalgnum().
|
||||||
|
//
|
||||||
|
// Currently defined extension values
|
||||||
|
//
|
||||||
|
// KEx algs
|
||||||
|
//
|
||||||
|
// KEX_HERRADURA256 KEX_HERRADURA512 KEX_HERRADURA1024 KEX_HERRADURA2048
|
||||||
|
//
|
||||||
|
// KEX_KYBER512 KEX_KYBER768 KEX_KYBER1024
|
||||||
|
//
|
||||||
|
// KEX_NEWHOPE KEX_NEWHOPE_SIMPLE
|
||||||
|
//
|
||||||
|
// Session (symmetric) crypto
|
||||||
|
//
|
||||||
|
// C_AES_256 C_TWOFISH_128 C_BLOWFISH_128 C_CRYPTMT1
|
||||||
|
//
|
||||||
|
// Session HMACs
|
||||||
|
//
|
||||||
|
// H_SHA256 H_SHA512
|
||||||
func (hc *Conn) applyConnExtensions(extensions ...string) {
|
func (hc *Conn) applyConnExtensions(extensions ...string) {
|
||||||
for _, s := range extensions {
|
for _, s := range extensions {
|
||||||
switch s {
|
switch s {
|
||||||
|
@ -286,6 +264,42 @@ func (hc *Conn) applyConnExtensions(extensions ...string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getkexalgnum(extensions ...string) (k KEXAlg) {
|
||||||
|
k = KEX_HERRADURA256 // default
|
||||||
|
for _, s := range extensions {
|
||||||
|
switch s {
|
||||||
|
case "KEX_HERRADURA256":
|
||||||
|
k = KEX_HERRADURA256
|
||||||
|
break //out of for
|
||||||
|
case "KEX_HERRADURA512":
|
||||||
|
k = KEX_HERRADURA512
|
||||||
|
break //out of for
|
||||||
|
case "KEX_HERRADURA1024":
|
||||||
|
k = KEX_HERRADURA1024
|
||||||
|
break //out of for
|
||||||
|
case "KEX_HERRADURA2048":
|
||||||
|
k = KEX_HERRADURA2048
|
||||||
|
break //out of for
|
||||||
|
case "KEX_KYBER512":
|
||||||
|
k = KEX_KYBER512
|
||||||
|
break //out of for
|
||||||
|
case "KEX_KYBER768":
|
||||||
|
k = KEX_KYBER768
|
||||||
|
break //out of for
|
||||||
|
case "KEX_KYBER1024":
|
||||||
|
k = KEX_KYBER1024
|
||||||
|
break //out of for
|
||||||
|
case "KEX_NEWHOPE":
|
||||||
|
k = KEX_NEWHOPE
|
||||||
|
break //out of for
|
||||||
|
case "KEX_NEWHOPE_SIMPLE":
|
||||||
|
k = KEX_NEWHOPE_SIMPLE
|
||||||
|
break //out of for
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// randReader wraps rand.Read() in a struct that implements io.Reader
|
// randReader wraps rand.Read() in a struct that implements io.Reader
|
||||||
// for use by the Kyber and NEWHOPE/NEWHOPE_SIMPLE KEM methods.
|
// for use by the Kyber and NEWHOPE/NEWHOPE_SIMPLE KEM methods.
|
||||||
type randReader struct {
|
type randReader struct {
|
||||||
|
@ -316,7 +330,7 @@ func NewHopeDialSetup(c io.ReadWriter, hc *Conn) (err error) {
|
||||||
publicKeyBob := big.NewInt(0)
|
publicKeyBob := big.NewInt(0)
|
||||||
fmt.Fscanf(c, "0x%x\n", publicKeyBob)
|
fmt.Fscanf(c, "0x%x\n", publicKeyBob)
|
||||||
var pubKeyBob newhope.PublicKeyBob
|
var pubKeyBob newhope.PublicKeyBob
|
||||||
for i := range(pubKeyBob.Send) {
|
for i := range pubKeyBob.Send {
|
||||||
pubKeyBob.Send[i] = publicKeyBob.Bytes()[i]
|
pubKeyBob.Send[i] = publicKeyBob.Bytes()[i]
|
||||||
}
|
}
|
||||||
log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob)
|
log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob)
|
||||||
|
@ -360,7 +374,7 @@ func NewHopeSimpleDialSetup(c io.ReadWriter, hc *Conn) (err error) {
|
||||||
publicKeyBob := big.NewInt(0)
|
publicKeyBob := big.NewInt(0)
|
||||||
fmt.Fscanf(c, "0x%x\n", publicKeyBob)
|
fmt.Fscanf(c, "0x%x\n", publicKeyBob)
|
||||||
var pubKeyBob newhope.PublicKeySimpleBob
|
var pubKeyBob newhope.PublicKeySimpleBob
|
||||||
for i := range(pubKeyBob.Send) {
|
for i := range pubKeyBob.Send {
|
||||||
pubKeyBob.Send[i] = publicKeyBob.Bytes()[i]
|
pubKeyBob.Send[i] = publicKeyBob.Bytes()[i]
|
||||||
}
|
}
|
||||||
log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob)
|
log.Printf("[Got server pubKey[]:%v]\n", pubKeyBob)
|
||||||
|
@ -491,7 +505,7 @@ func NewHopeAcceptSetup(c *net.Conn, hc *Conn) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var pubKeyAlice newhope.PublicKeyAlice
|
var pubKeyAlice newhope.PublicKeyAlice
|
||||||
for i := range(pubKeyAlice.Send) {
|
for i := range pubKeyAlice.Send {
|
||||||
pubKeyAlice.Send[i] = alicePublicKey.Bytes()[i]
|
pubKeyAlice.Send[i] = alicePublicKey.Bytes()[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,7 +544,7 @@ func NewHopeSimpleAcceptSetup(c *net.Conn, hc *Conn) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var pubKeyAlice newhope.PublicKeySimpleAlice
|
var pubKeyAlice newhope.PublicKeySimpleAlice
|
||||||
for i := range(pubKeyAlice.Send) {
|
for i := range pubKeyAlice.Send {
|
||||||
pubKeyAlice.Send[i] = alicePublicKey.Bytes()[i]
|
pubKeyAlice.Send[i] = alicePublicKey.Bytes()[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -654,11 +668,13 @@ func HKExAcceptSetup(c *net.Conn, hc *Conn) (err error) {
|
||||||
// channel on connect
|
// channel on connect
|
||||||
//
|
//
|
||||||
// Can be called like net.Dial(), defaulting to C_AES_256/H_SHA256,
|
// Can be called like net.Dial(), defaulting to C_AES_256/H_SHA256,
|
||||||
// or additional option arguments can be passed amongst the following:
|
// or additional extensions can be passed amongst the following:
|
||||||
//
|
//
|
||||||
// "C_AES_256" | "C_TWOFISH_128"
|
// "C_AES_256" | "C_TWOFISH_128" | ...
|
||||||
//
|
//
|
||||||
// "H_SHA256"
|
// "H_SHA256" | "H_SHA512" | ...
|
||||||
|
//
|
||||||
|
// See go doc -u hkexnet.applyConnExtensions
|
||||||
func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err error) {
|
func Dial(protocol string, ipport string, extensions ...string) (hc Conn, err error) {
|
||||||
if Log == nil {
|
if Log == nil {
|
||||||
Init(false, "client", logger.LOG_DAEMON|logger.LOG_DEBUG)
|
Init(false, "client", logger.LOG_DAEMON|logger.LOG_DEBUG)
|
||||||
|
|
|
@ -14,43 +14,43 @@ digraph gocallvis {
|
||||||
edge [minlen="2"]
|
edge [minlen="2"]
|
||||||
|
|
||||||
subgraph "cluster_focus" {
|
subgraph "cluster_focus" {
|
||||||
bgcolor="#e6ecfa";
|
label="main";
|
||||||
label="main";
|
|
||||||
labelloc="t";
|
labelloc="t";
|
||||||
labeljust="c";
|
labeljust="c";
|
||||||
fontsize="18";
|
fontsize="18";
|
||||||
|
bgcolor="#e6ecfa";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexpasswd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexpasswd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh" {
|
subgraph "cluster_blitter.com/go/hkexsh" {
|
||||||
style="filled";
|
label="[hkexsh]";
|
||||||
rank="sink";
|
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
rank="sink";
|
||||||
|
URL="/?f=blitter.com/go/hkexsh";
|
||||||
|
tooltip="package: blitter.com/go/hkexsh";
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
fillcolor="lightyellow";
|
||||||
fontname="bold";
|
fontname="bold";
|
||||||
label="[hkexsh]";
|
|
||||||
URL="/?f=blitter.com/go/hkexsh";
|
|
||||||
tooltip="package: blitter.com/go/hkexsh";
|
|
||||||
|
|
||||||
"blitter.com/go/hkexsh.ReadPassword" [ label="ReadPassword" penwidth="1.5" fillcolor="moccasin" ]
|
"blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_github.com/jameskeane/bcrypt" {
|
subgraph "cluster_github.com/jameskeane/bcrypt" {
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
|
||||||
fontname="bold";
|
|
||||||
rank="sink";
|
rank="sink";
|
||||||
label="[bcrypt]";
|
label="[bcrypt]";
|
||||||
URL="/?f=github.com/jameskeane/bcrypt";
|
URL="/?f=github.com/jameskeane/bcrypt";
|
||||||
tooltip="package: github.com/jameskeane/bcrypt";
|
tooltip="package: github.com/jameskeane/bcrypt";
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
style="filled";
|
style="filled";
|
||||||
|
fillcolor="lightyellow";
|
||||||
|
fontname="bold";
|
||||||
|
|
||||||
"github.com/jameskeane/bcrypt.Salt" [ fillcolor="moccasin" label="Salt" penwidth="1.5" ]
|
"github.com/jameskeane/bcrypt.Salt" [ fillcolor="moccasin" label="Salt" penwidth="1.5" ]
|
||||||
"github.com/jameskeane/bcrypt.Hash" [ fillcolor="moccasin" label="Hash" penwidth="1.5" ]
|
"github.com/jameskeane/bcrypt.Hash" [ fillcolor="moccasin" label="Hash" penwidth="1.5" ]
|
||||||
"github.com/jameskeane/bcrypt.Match" [ penwidth="1.5" fillcolor="moccasin" label="Match" ]
|
"github.com/jameskeane/bcrypt.Match" [ fillcolor="moccasin" label="Match" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 693 KiB After Width: | Height: | Size: 681 KiB |
|
@ -14,52 +14,52 @@ digraph gocallvis {
|
||||||
edge [minlen="2"]
|
edge [minlen="2"]
|
||||||
|
|
||||||
subgraph "cluster_focus" {
|
subgraph "cluster_focus" {
|
||||||
label="main";
|
bgcolor="#e6ecfa";
|
||||||
|
label="main";
|
||||||
labelloc="t";
|
labelloc="t";
|
||||||
labeljust="c";
|
labeljust="c";
|
||||||
fontsize="18";
|
fontsize="18";
|
||||||
bgcolor="#e6ecfa";
|
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" [ label="doCopyMode" penwidth="0.5" fillcolor="lightblue" ]
|
"blitter.com/go/hkexsh/hkexsh.reqTunnel" [ penwidth="0.5" fillcolor="lightblue" label="reqTunnel" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.reqTunnel" [ fillcolor="lightblue" label="reqTunnel" penwidth="0.5" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.launchTuns" [ penwidth="0.5" fillcolor="lightblue" label="launchTuns" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ penwidth="0.5" fillcolor="lightblue" label="rejectUserMsg" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.GetSize" [ fillcolor="lightblue" label="GetSize" penwidth="1.5" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1$1" [ style="dotted,filled" fillcolor="lightblue" label="doShellMode$1$1" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1$1" [ fillcolor="lightblue" label="doShellMode$1$1" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode" [ fillcolor="lightblue" label="doShellMode" penwidth="0.5" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.GetSize" [ label="GetSize" penwidth="1.5" fillcolor="lightblue" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ penwidth="0.5" fillcolor="lightblue" label="handleTermResizes" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer" [ fillcolor="lightblue" label="copyBuffer" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer" [ fillcolor="lightblue" label="copyBuffer" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer$1" [ fillcolor="lightblue" label="copyBuffer$1" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer$1" [ fillcolor="lightblue" label="copyBuffer$1" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer$2" [ fillcolor="lightblue" label="copyBuffer$2" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer$2" [ fillcolor="lightblue" label="copyBuffer$2" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer$3" [ fillcolor="lightblue" label="copyBuffer$3" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer$3" [ style="dotted,filled" fillcolor="lightblue" label="copyBuffer$3" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.Copy" [ fillcolor="lightblue" label="Copy" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexsh.Copy" [ fillcolor="lightblue" label="Copy" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ style="dotted,filled" fillcolor="lightblue" label="shellStdinToRemote" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ fillcolor="lightblue" label="shellStdinToRemote" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexsh.main$1" [ label="deferRestore" style="dotted,filled" fillcolor="lightblue" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.launchTuns" [ penwidth="0.5" fillcolor="lightblue" label="launchTuns" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ label="rejectUserMsg" penwidth="0.5" fillcolor="lightblue" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" [ fillcolor="lightblue" label="doCopyMode" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.usageShell" [ fillcolor="lightblue" label="usageShell" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.usageShell" [ fillcolor="lightblue" label="usageShell" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.usageCp" [ fillcolor="lightblue" label="usageCp" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexsh.usageCp" [ fillcolor="lightblue" label="usageCp" penwidth="0.5" ]
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh" {
|
subgraph "cluster_blitter.com/go/hkexsh" {
|
||||||
fontsize="16";
|
style="filled";
|
||||||
fontname="bold";
|
fillcolor="lightyellow";
|
||||||
rank="sink";
|
rank="sink";
|
||||||
label="[hkexsh]";
|
label="[hkexsh]";
|
||||||
URL="/?f=blitter.com/go/hkexsh";
|
|
||||||
tooltip="package: blitter.com/go/hkexsh";
|
tooltip="package: blitter.com/go/hkexsh";
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
fillcolor="lightyellow";
|
fontsize="16";
|
||||||
style="filled";
|
fontname="bold";
|
||||||
|
URL="/?f=blitter.com/go/hkexsh";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" ]
|
"blitter.com/go/hkexsh.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh.MakeRaw" [ fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ]
|
"blitter.com/go/hkexsh.MakeRaw" [ fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
|
"blitter.com/go/hkexsh.ReadPassword" [ penwidth="1.5" fillcolor="moccasin" label="ReadPassword" ]
|
||||||
"blitter.com/go/hkexsh.NewSession" [ fillcolor="moccasin" label="NewSession" penwidth="1.5" ]
|
"blitter.com/go/hkexsh.NewSession" [ label="NewSession" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
|
||||||
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
|
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
|
@ -71,26 +71,26 @@ fontsize="15";
|
||||||
fontcolor="#222222";
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
|
|
||||||
"(*blitter.com/go/hkexsh.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).SetStatus" [ label="SetStatus" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh.Session" {
|
subgraph "cluster_blitter.com/go/hkexsh.Session" {
|
||||||
label="(Session)";
|
fillcolor="wheat2";
|
||||||
|
label="(Session)";
|
||||||
tooltip="type: blitter.com/go/hkexsh.Session";
|
tooltip="type: blitter.com/go/hkexsh.Session";
|
||||||
penwidth="0.5";
|
penwidth="0.5";
|
||||||
fontsize="15";
|
fontsize="15";
|
||||||
fontcolor="#222222";
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
|
||||||
|
|
||||||
"(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).Status" [ label="Status" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"(blitter.com/go/hkexsh.Session).Status" [ fillcolor="moccasin" label="Status" penwidth="1.5" ]
|
|
||||||
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).Who" [ label="Who" penwidth="1.5" fillcolor="moccasin" ]
|
"(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).TermType" [ penwidth="1.5" fillcolor="moccasin" label="TermType" ]
|
||||||
|
"(blitter.com/go/hkexsh.Session).Cmd" [ label="Cmd" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -98,67 +98,67 @@ fillcolor="wheat2";
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
|
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
|
||||||
rank="sink";
|
fontname="bold";
|
||||||
label="[hkexnet]";
|
label="[hkexnet]";
|
||||||
URL="/?f=blitter.com/go/hkexsh/hkexnet";
|
URL="/?f=blitter.com/go/hkexsh/hkexnet";
|
||||||
penwidth="0.8";
|
|
||||||
style="filled";
|
|
||||||
fontname="bold";
|
|
||||||
tooltip="package: blitter.com/go/hkexsh/hkexnet";
|
tooltip="package: blitter.com/go/hkexsh/hkexnet";
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
fillcolor="lightyellow";
|
||||||
|
rank="sink";
|
||||||
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexnet.Dial" [ penwidth="1.5" fillcolor="moccasin" label="Dial" ]
|
||||||
|
|
||||||
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
|
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
|
||||||
labelloc="b";
|
penwidth="0.5";
|
||||||
|
fontsize="15";
|
||||||
|
fontcolor="#222222";
|
||||||
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(*Conn)";
|
label="(*Conn)";
|
||||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
|
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
|
||||||
penwidth="0.5";
|
|
||||||
fontsize="15";
|
|
||||||
fontcolor="#222222";
|
|
||||||
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ penwidth="1.5" fillcolor="moccasin" label="WritePacket" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ penwidth="1.5" fillcolor="moccasin" label="Close" ]
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ label="EnableChaff" penwidth="1.5" fillcolor="moccasin" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ penwidth="1.5" fillcolor="moccasin" label="DisableChaff" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ penwidth="1.5" fillcolor="moccasin" label="ShutdownChaff" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ label="ShutdownChaff" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ penwidth="1.5" fillcolor="moccasin" label="SetStatus" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
|
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
|
||||||
fontsize="15";
|
labelloc="b";
|
||||||
fontcolor="#222222";
|
|
||||||
labelloc="b";
|
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(Conn)";
|
label="(Conn)";
|
||||||
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
|
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
|
||||||
penwidth="0.5";
|
penwidth="0.5";
|
||||||
|
fontsize="15";
|
||||||
|
fontcolor="#222222";
|
||||||
|
|
||||||
"(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" ]
|
|
||||||
"(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
|
||||||
|
"(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/logger" {
|
subgraph "cluster_blitter.com/go/hkexsh/logger" {
|
||||||
style="filled";
|
fillcolor="lightyellow";
|
||||||
fillcolor="lightyellow";
|
|
||||||
URL="/?f=blitter.com/go/hkexsh/logger";
|
|
||||||
penwidth="0.8";
|
|
||||||
fontsize="16";
|
|
||||||
fontname="bold";
|
fontname="bold";
|
||||||
rank="sink";
|
|
||||||
label="[logger]";
|
label="[logger]";
|
||||||
tooltip="package: blitter.com/go/hkexsh/logger";
|
tooltip="package: blitter.com/go/hkexsh/logger";
|
||||||
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
rank="sink";
|
||||||
|
URL="/?f=blitter.com/go/hkexsh/logger";
|
||||||
|
fontsize="16";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ]
|
||||||
|
@ -167,29 +167,29 @@ tooltip="package: blitter.com/go/hkexsh/logger";
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/spinsult" {
|
subgraph "cluster_blitter.com/go/hkexsh/spinsult" {
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
rank="sink";
|
||||||
|
tooltip="package: blitter.com/go/hkexsh/spinsult";
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
fillcolor="lightyellow";
|
||||||
rank="sink";
|
|
||||||
label="[spinsult]";
|
|
||||||
style="filled";
|
|
||||||
fontname="bold";
|
fontname="bold";
|
||||||
|
label="[spinsult]";
|
||||||
URL="/?f=blitter.com/go/hkexsh/spinsult";
|
URL="/?f=blitter.com/go/hkexsh/spinsult";
|
||||||
tooltip="package: blitter.com/go/hkexsh/spinsult";
|
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_github.com/mattn/go-isatty" {
|
subgraph "cluster_github.com/mattn/go-isatty" {
|
||||||
penwidth="0.8";
|
tooltip="package: github.com/mattn/go-isatty";
|
||||||
URL="/?f=github.com/mattn/go-isatty";
|
penwidth="0.8";
|
||||||
tooltip="package: github.com/mattn/go-isatty";
|
|
||||||
fontsize="16";
|
|
||||||
style="filled";
|
|
||||||
fillcolor="lightyellow";
|
fillcolor="lightyellow";
|
||||||
fontname="bold";
|
|
||||||
rank="sink";
|
rank="sink";
|
||||||
label="[isatty]";
|
label="[isatty]";
|
||||||
|
URL="/?f=github.com/mattn/go-isatty";
|
||||||
|
fontsize="16";
|
||||||
|
style="filled";
|
||||||
|
fontname="bold";
|
||||||
|
|
||||||
"github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" ]
|
"github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" ]
|
||||||
|
|
||||||
|
@ -197,25 +197,17 @@ label="[isatty]";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "blitter.com/go/hkexsh/logger.LogDebug" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "blitter.com/go/hkexsh/logger.LogDebug" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.launchTuns" -> "blitter.com/go/hkexsh/hkexsh.reqTunnel" [ ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" -> "blitter.com/go/hkexsh/spinsult.GetSentence" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "blitter.com/go/hkexsh/hkexsh.GetSize" [ ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ arrowhead="normalnoneodot" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1$1" [ arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1$1" [ arrowhead="normalnoneodiamond" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ arrowhead="normalnoneodot" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ arrowhead="normalnoneodot" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "blitter.com/go/hkexsh/hkexsh.GetSize" [ ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.handleTermResizes" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ arrowhead="normalnoneodot" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ style="dashed" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ style="dashed" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.copyBuffer" -> "blitter.com/go/hkexsh/hkexsh.copyBuffer$1" [ style="dashed" ]
|
"blitter.com/go/hkexsh/hkexsh.copyBuffer" -> "blitter.com/go/hkexsh/hkexsh.copyBuffer$1" [ style="dashed" ]
|
||||||
|
@ -226,6 +218,7 @@ label="[isatty]";
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ arrowhead="normalnoneodot" ]
|
"blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ arrowhead="normalnoneodot" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).Op" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).Op" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).Who" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).Who" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).ConnHost" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).ConnHost" [ color="saddlebrown" ]
|
||||||
|
@ -234,11 +227,13 @@ label="[isatty]";
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).AuthCookie" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh.Session).AuthCookie" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ style="dashed" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.sendSessionParams" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ style="dashed" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.launchTuns" -> "blitter.com/go/hkexsh/hkexsh.reqTunnel" [ ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.rejectUserMsg" -> "blitter.com/go/hkexsh/spinsult.GetSentence" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Dial" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Dial" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.MakeRaw" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.MakeRaw" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$1" [ arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$1" [ arrowhead="normalnoneodiamond" ]
|
||||||
|
@ -250,12 +245,17 @@ label="[isatty]";
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$2" [ arrowhead="normalnoneodot" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$2" [ arrowhead="normalnoneodot" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.launchTuns" [ ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.launchTuns" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doShellMode" [ ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doShellMode" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doCopyMode" [ ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doCopyMode" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.usageShell" [ style="dashed" ]
|
"blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.usageShell" [ style="dashed" ]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// hkexsh client
|
// hkexsh client
|
||||||
//
|
//
|
||||||
// Copyright (c) 2017-2018 Russell Magee
|
// Copyright (c) 2017-2019 Russell Magee
|
||||||
// Licensed under the terms of the MIT license (see LICENSE.mit in this
|
// Licensed under the terms of the MIT license (see LICENSE.mit in this
|
||||||
// distribution)
|
// distribution)
|
||||||
//
|
//
|
||||||
|
@ -36,6 +36,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// wg controls when the goroutines handling client I/O complete
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
// Log defaults to regular syslog output (no -d)
|
// Log defaults to regular syslog output (no -d)
|
||||||
Log *logger.Writer
|
Log *logger.Writer
|
||||||
|
@ -43,6 +44,7 @@ var (
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// Praise Bob. Do not remove, lest ye lose Slack.
|
||||||
const bob = string("\r\n\r\n" +
|
const bob = string("\r\n\r\n" +
|
||||||
"@@@@@@@^^~~~~~~~~~~~~~~~~~~~~^@@@@@@@@@\r\n" +
|
"@@@@@@@^^~~~~~~~~~~~~~~~~~~~~^@@@@@@@@@\r\n" +
|
||||||
"@@@@@@^ ~^ @ @@ @ @ @ I ~^@@@@@@\r\n" +
|
"@@@@@@^ ~^ @ @@ @ @ @ I ~^@@@@@@\r\n" +
|
||||||
|
@ -70,7 +72,9 @@ const bob = string("\r\n\r\n" +
|
||||||
"\r\n")
|
"\r\n")
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
// Handler for special functions invoked by escSeqs
|
||||||
escHandler func(io.Writer)
|
escHandler func(io.Writer)
|
||||||
|
// escSeqs is a map of special keystroke sequences to trigger escHandlers
|
||||||
escSeqs map[byte]escHandler
|
escSeqs map[byte]escHandler
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -91,6 +95,8 @@ type (
|
||||||
// calls a client-custom version of copyBuffer(), which allows
|
// calls a client-custom version of copyBuffer(), which allows
|
||||||
// some client escape sequences to trigger special actions during
|
// some client escape sequences to trigger special actions during
|
||||||
// interactive sessions.
|
// interactive sessions.
|
||||||
|
//
|
||||||
|
// (See go doc hkexsh/hkexsh.{escSeqs,escHandler})
|
||||||
func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
|
func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
|
||||||
written, err = copyBuffer(dst, src, nil)
|
written, err = copyBuffer(dst, src, nil)
|
||||||
return
|
return
|
||||||
|
@ -102,9 +108,13 @@ func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
|
||||||
// This private version of copyBuffer is derived from the
|
// This private version of copyBuffer is derived from the
|
||||||
// go stdlib pkg/io, with escape sequence interpretation to trigger
|
// go stdlib pkg/io, with escape sequence interpretation to trigger
|
||||||
// some special client-side actions.
|
// some special client-side actions.
|
||||||
|
//
|
||||||
|
// (See go doc hkexsh/hkexsh.{escSeqs,escHandler})
|
||||||
func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) {
|
func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) {
|
||||||
// NOTE: using dst.Write() in these esc funcs will cause the output
|
// NOTE: using dst.Write() in these esc funcs will cause the output
|
||||||
// to function as a 'macro', outputting as if user typed the sequence.
|
// to function as a 'macro', outputting as if user typed the sequence
|
||||||
|
// (that is, the client 'sees' the user type it, and the server 'sees'
|
||||||
|
// it as well).
|
||||||
//
|
//
|
||||||
// Using os.Stdout outputs to the client's term w/o it or the server
|
// Using os.Stdout outputs to the client's term w/o it or the server
|
||||||
// 'seeing' the output.
|
// 'seeing' the output.
|
||||||
|
@ -156,7 +166,7 @@ func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err er
|
||||||
if buf[0] == 0x1d {
|
if buf[0] == 0x1d {
|
||||||
seqPos++
|
seqPos++
|
||||||
}
|
}
|
||||||
} else /* seqPos > 0 */ {
|
} else {
|
||||||
if v, ok := escs[buf[0]]; ok {
|
if v, ok := escs[buf[0]]; ok {
|
||||||
v(dst)
|
v(dst)
|
||||||
nr--
|
nr--
|
||||||
|
@ -185,13 +195,14 @@ func copyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err er
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//_,_ = dst.Write([]byte{0x2f})
|
|
||||||
return written, err
|
return written, err
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
|
|
||||||
// GetSize gets the terminal size using 'stty' command
|
// GetSize gets the terminal size using 'stty' command
|
||||||
|
//
|
||||||
|
// TODO: do in code someday instead of using external 'stty'
|
||||||
func GetSize() (cols, rows int, err error) {
|
func GetSize() (cols, rows int, err error) {
|
||||||
cmd := exec.Command("stty", "size") // #nosec
|
cmd := exec.Command("stty", "size") // #nosec
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
|
@ -216,6 +227,7 @@ func GetSize() (cols, rows int, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// doCopyMode begins a secure hkexsh local<->remote file copy operation.
|
// doCopyMode begins a secure hkexsh local<->remote file copy operation.
|
||||||
|
//
|
||||||
// TODO: reduce gocyclo
|
// TODO: reduce gocyclo
|
||||||
func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.Session) (exitStatus uint32, err error) {
|
func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.Session) (exitStatus uint32, err error) {
|
||||||
if remoteDest {
|
if remoteDest {
|
||||||
|
@ -256,7 +268,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
// NOTE the lack of quotes around --xform option's sed expression.
|
// NOTE the lack of quotes around --xform option's sed expression.
|
||||||
// When args are passed in exec() format, no quoting is required
|
// When args are passed in exec() format, no quoting is required
|
||||||
// (as this isn't input from a shell) (right? -rlm 20180823)
|
// (as this isn't input from a shell) (right? -rlm 20180823)
|
||||||
//cmdArgs := []string{"-xvz", "-C", files, `--xform=s#.*/\(.*\)#\1#`}
|
|
||||||
c = exec.Command(cmdName, cmdArgs...) // #nosec
|
c = exec.Command(cmdName, cmdArgs...) // #nosec
|
||||||
c.Dir, _ = os.Getwd() // #nosec
|
c.Dir, _ = os.Getwd() // #nosec
|
||||||
log.Println("[wd:", c.Dir, "]")
|
log.Println("[wd:", c.Dir, "]")
|
||||||
|
@ -296,7 +307,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
|
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
|
||||||
exitStatus = uint32(status.ExitStatus())
|
exitStatus = uint32(status.ExitStatus())
|
||||||
fmt.Print(stdErrBuffer)
|
fmt.Print(stdErrBuffer)
|
||||||
//fmt.Printf("Exit Status: %d\n", exitStatus) //#
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -331,10 +341,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
log.Println("remote filepath:", string(rec.Cmd()), "local files:", files)
|
log.Println("remote filepath:", string(rec.Cmd()), "local files:", files)
|
||||||
var c *exec.Cmd
|
var c *exec.Cmd
|
||||||
|
|
||||||
//os.Clearenv()
|
|
||||||
//os.Setenv("HOME", u.HomeDir)
|
|
||||||
//os.Setenv("TERM", "vt102") // TODO: server or client option?
|
|
||||||
|
|
||||||
cmdName := "/bin/tar"
|
cmdName := "/bin/tar"
|
||||||
destPath := files
|
destPath := files
|
||||||
|
|
||||||
|
@ -353,7 +359,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
err = c.Start() // returns immediately
|
err = c.Start() // returns immediately
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
//log.Fatal(err)
|
|
||||||
} else {
|
} else {
|
||||||
if err = c.Wait(); err != nil {
|
if err = c.Wait(); err != nil {
|
||||||
if exiterr, ok := err.(*exec.ExitError); ok {
|
if exiterr, ok := err.(*exec.ExitError); ok {
|
||||||
|
@ -365,7 +370,6 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
// an ExitStatus() method with the same signature.
|
// an ExitStatus() method with the same signature.
|
||||||
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
|
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
|
||||||
exitStatus = uint32(status.ExitStatus())
|
exitStatus = uint32(status.ExitStatus())
|
||||||
//log.Printf("Exit Status: %d", exitStatus)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -380,7 +384,8 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// doShellMode begins an hkexsh shell session (one-shot command or interactive).
|
// doShellMode begins an hkexsh shell session (one-shot command or
|
||||||
|
// interactive).
|
||||||
func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State, rec *hkexsh.Session) {
|
func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State, rec *hkexsh.Session) {
|
||||||
//client reader (from server) goroutine
|
//client reader (from server) goroutine
|
||||||
//Read remote end's stdout
|
//Read remote end's stdout
|
||||||
|
@ -434,7 +439,6 @@ func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State,
|
||||||
// TODO:.gv:doShellMode:2:shellStdinToRemote
|
// TODO:.gv:doShellMode:2:shellStdinToRemote
|
||||||
shellStdinToRemote := func() {
|
shellStdinToRemote := func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
//!defer wg.Done()
|
|
||||||
_, outerr := func(conn *hkexnet.Conn, r io.Reader) (w int64, e error) {
|
_, outerr := func(conn *hkexnet.Conn, r io.Reader) (w int64, e error) {
|
||||||
// Copy() expects EOF so this will
|
// Copy() expects EOF so this will
|
||||||
// exit with outerr == nil
|
// exit with outerr == nil
|
||||||
|
@ -471,6 +475,10 @@ func usageCp() {
|
||||||
flag.PrintDefaults()
|
flag.PrintDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rejectUserMsg snarkily rebukes users giving incorrect
|
||||||
|
// credentials.
|
||||||
|
//
|
||||||
|
// TODO: do this from the server side and have client just emit that
|
||||||
func rejectUserMsg() string {
|
func rejectUserMsg() string {
|
||||||
return "Begone, " + spinsult.GetSentence() + "\r\n"
|
return "Begone, " + spinsult.GetSentence() + "\r\n"
|
||||||
}
|
}
|
||||||
|
@ -519,15 +527,9 @@ func parseNonSwitchArgs(a []string) (user, host, path string, isDest bool, other
|
||||||
}
|
}
|
||||||
fancyHost = fancyHostPath[0]
|
fancyHost = fancyHostPath[0]
|
||||||
|
|
||||||
//if fancyPath == "" {
|
|
||||||
// fancyPath = "."
|
|
||||||
//}
|
|
||||||
|
|
||||||
if i == len(a)-1 {
|
if i == len(a)-1 {
|
||||||
isDest = true
|
isDest = true
|
||||||
//fmt.Println("remote path isDest")
|
|
||||||
}
|
}
|
||||||
//fmt.Println("fancyArgs: user:", fancyUser, "host:", fancyHost, "path:", fancyPath)
|
|
||||||
} else {
|
} else {
|
||||||
otherArgs = append(otherArgs, a[i])
|
otherArgs = append(otherArgs, a[i])
|
||||||
}
|
}
|
||||||
|
@ -580,17 +582,6 @@ func sendSessionParams(conn io.Writer /* *hkexnet.Conn*/, rec *hkexsh.Session) (
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
// hkexsh - a client for secure shell and file copy operations.
|
|
||||||
//
|
|
||||||
// While conforming to the basic net.Conn interface HKex.Conn has extra
|
|
||||||
// capabilities designed to allow apps to define connection options,
|
|
||||||
// encryption/hmac settings and operations across the encrypted channel.
|
|
||||||
//
|
|
||||||
// Initial setup is the same as using plain net.Dial(), but one may
|
|
||||||
// specify extra extension tags (strings) to set the cipher and hmac
|
|
||||||
// setting desired; as well as the intended operation mode for the
|
|
||||||
// connection (app-specific, passed through to the server to use or
|
|
||||||
// ignore at its discretion).
|
|
||||||
// TODO: reduce gocyclo
|
// TODO: reduce gocyclo
|
||||||
func main() {
|
func main() {
|
||||||
version := hkexsh.Version
|
version := hkexsh.Version
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 574 KiB After Width: | Height: | Size: 586 KiB |
|
@ -14,171 +14,171 @@ digraph gocallvis {
|
||||||
edge [minlen="2"]
|
edge [minlen="2"]
|
||||||
|
|
||||||
subgraph "cluster_focus" {
|
subgraph "cluster_focus" {
|
||||||
labelloc="t";
|
bgcolor="#e6ecfa";
|
||||||
|
label="main";
|
||||||
|
labelloc="t";
|
||||||
labeljust="c";
|
labeljust="c";
|
||||||
fontsize="18";
|
fontsize="18";
|
||||||
bgcolor="#e6ecfa";
|
|
||||||
label="main";
|
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" [ fillcolor="lightblue" label="runShellAs" penwidth="0.5" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ fillcolor="lightblue" label="deferPtmxClose" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ fillcolor="lightblue" label="termResizeWatcher" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ fillcolor="lightblue" label="stdinToPtyWorker" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ fillcolor="lightblue" label="deferChaffShutdown" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$5" [ fillcolor="lightblue" label="ptyToStdoutWorker" style="dotted,filled" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$1" [ fillcolor="lightblue" label="main$1" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexshd.main$1" [ fillcolor="lightblue" label="main$1" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ fillcolor="lightblue" label="deferChaffShutdown" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ fillcolor="lightblue" label="GenAuthToken" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ fillcolor="lightblue" label="GenAuthToken" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" ]
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" [ fillcolor="lightblue" label="runShellAs" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ penwidth="0.5" fillcolor="lightblue" label="runClientToServerCopyAs" ]
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ label="deferPtmxClose" style="dotted,filled" fillcolor="lightblue" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ style="dotted,filled" fillcolor="lightblue" label="termResizeWatcher" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ fillcolor="lightblue" label="stdinToPtyWorker" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$5" [ fillcolor="lightblue" label="ptyToStdoutWorker" style="dotted,filled" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ fillcolor="lightblue" label="runClientToServerCopyAs" penwidth="0.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" ]
|
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" ]
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/goutmp" {
|
subgraph "cluster_blitter.com/go/goutmp" {
|
||||||
fontsize="16";
|
fontname="bold";
|
||||||
style="filled";
|
|
||||||
fillcolor="lightyellow";
|
|
||||||
rank="sink";
|
rank="sink";
|
||||||
label="[goutmp]";
|
|
||||||
tooltip="package: blitter.com/go/goutmp";
|
tooltip="package: blitter.com/go/goutmp";
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
fontname="bold";
|
fillcolor="lightyellow";
|
||||||
|
label="[goutmp]";
|
||||||
URL="/?f=blitter.com/go/goutmp";
|
URL="/?f=blitter.com/go/goutmp";
|
||||||
|
fontsize="16";
|
||||||
|
style="filled";
|
||||||
|
|
||||||
"blitter.com/go/goutmp.GetHost" [ penwidth="1.5" fillcolor="moccasin" label="GetHost" ]
|
"blitter.com/go/goutmp.Unput_utmp" [ label="Unput_utmp" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"blitter.com/go/goutmp.Put_utmp" [ fillcolor="moccasin" label="Put_utmp" penwidth="1.5" ]
|
"blitter.com/go/goutmp.GetHost" [ fillcolor="moccasin" label="GetHost" penwidth="1.5" ]
|
||||||
"blitter.com/go/goutmp.Unput_utmp" [ fillcolor="moccasin" label="Unput_utmp" penwidth="1.5" ]
|
"blitter.com/go/goutmp.Put_utmp" [ label="Put_utmp" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"blitter.com/go/goutmp.Put_lastlog_entry" [ label="Put_lastlog_entry" penwidth="1.5" fillcolor="moccasin" ]
|
"blitter.com/go/goutmp.Put_lastlog_entry" [ fillcolor="moccasin" label="Put_lastlog_entry" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh" {
|
subgraph "cluster_blitter.com/go/hkexsh" {
|
||||||
fontname="bold";
|
fillcolor="lightyellow";
|
||||||
rank="sink";
|
|
||||||
URL="/?f=blitter.com/go/hkexsh";
|
|
||||||
penwidth="0.8";
|
|
||||||
style="filled";
|
|
||||||
fillcolor="lightyellow";
|
|
||||||
fontsize="16";
|
|
||||||
label="[hkexsh]";
|
label="[hkexsh]";
|
||||||
tooltip="package: blitter.com/go/hkexsh";
|
tooltip="package: blitter.com/go/hkexsh";
|
||||||
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
fontname="bold";
|
||||||
|
rank="sink";
|
||||||
|
URL="/?f=blitter.com/go/hkexsh";
|
||||||
|
fontsize="16";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh.AuthUserByToken" [ penwidth="1.5" fillcolor="moccasin" label="AuthUserByToken" ]
|
"blitter.com/go/hkexsh.AuthUserByToken" [ label="AuthUserByToken" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"blitter.com/go/hkexsh.AuthUserByPasswd" [ fillcolor="moccasin" label="AuthUserByPasswd" penwidth="1.5" ]
|
"blitter.com/go/hkexsh.AuthUserByPasswd" [ fillcolor="moccasin" label="AuthUserByPasswd" penwidth="1.5" ]
|
||||||
|
|
||||||
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
|
subgraph "cluster_*blitter.com/go/hkexsh.Session" {
|
||||||
fontcolor="#222222";
|
fontsize="15";
|
||||||
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(*Session)";
|
label="(*Session)";
|
||||||
tooltip="type: *blitter.com/go/hkexsh.Session";
|
tooltip="type: *blitter.com/go/hkexsh.Session";
|
||||||
penwidth="0.5";
|
penwidth="0.5";
|
||||||
fontsize="15";
|
|
||||||
|
|
||||||
"(*blitter.com/go/hkexsh.Session).SetOp" [ penwidth="1.5" fillcolor="moccasin" label="SetOp" ]
|
"(*blitter.com/go/hkexsh.Session).SetOp" [ fillcolor="moccasin" label="SetOp" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).SetConnHost" [ fillcolor="moccasin" label="SetConnHost" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).SetConnHost" [ penwidth="1.5" fillcolor="moccasin" label="SetConnHost" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).SetTermType" [ fillcolor="moccasin" label="SetTermType" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).SetTermType" [ label="SetTermType" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).SetCmd" [ fillcolor="moccasin" label="SetCmd" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).SetCmd" [ fillcolor="moccasin" label="SetCmd" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ penwidth="1.5" fillcolor="moccasin" label="SetAuthCookie" ]
|
"(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ fillcolor="moccasin" label="SetAuthCookie" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ fillcolor="moccasin" label="ClearAuthCookie" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ label="ClearAuthCookie" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh.Session" {
|
subgraph "cluster_blitter.com/go/hkexsh.Session" {
|
||||||
labelloc="b";
|
fillcolor="wheat2";
|
||||||
style="rounded,filled";
|
|
||||||
fillcolor="wheat2";
|
|
||||||
label="(Session)";
|
label="(Session)";
|
||||||
tooltip="type: blitter.com/go/hkexsh.Session";
|
tooltip="type: blitter.com/go/hkexsh.Session";
|
||||||
penwidth="0.5";
|
penwidth="0.5";
|
||||||
fontsize="15";
|
fontsize="15";
|
||||||
fontcolor="#222222";
|
fontcolor="#222222";
|
||||||
|
labelloc="b";
|
||||||
|
style="rounded,filled";
|
||||||
|
|
||||||
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).ConnHost" [ label="ConnHost" penwidth="1.5" fillcolor="moccasin" ]
|
"(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).Cmd" [ penwidth="1.5" fillcolor="moccasin" label="Cmd" ]
|
||||||
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
|
||||||
"(blitter.com/go/hkexsh.Session).TermType" [ label="TermType" penwidth="1.5" fillcolor="moccasin" ]
|
"(blitter.com/go/hkexsh.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
|
subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
|
||||||
style="filled";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
|
||||||
fontname="bold";
|
|
||||||
rank="sink";
|
|
||||||
URL="/?f=blitter.com/go/hkexsh/hkexnet";
|
URL="/?f=blitter.com/go/hkexsh/hkexnet";
|
||||||
fontsize="16";
|
rank="sink";
|
||||||
label="[hkexnet]";
|
label="[hkexnet]";
|
||||||
tooltip="package: blitter.com/go/hkexsh/hkexnet";
|
tooltip="package: blitter.com/go/hkexsh/hkexnet";
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
|
style="filled";
|
||||||
|
fillcolor="lightyellow";
|
||||||
|
fontname="bold";
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/hkexnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/hkexnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" ]
|
||||||
|
|
||||||
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
|
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
|
||||||
penwidth="0.5";
|
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
|
||||||
|
penwidth="0.5";
|
||||||
fontsize="15";
|
fontsize="15";
|
||||||
fontcolor="#222222";
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(*Conn)";
|
label="(*Conn)";
|
||||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
|
|
||||||
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ]
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ]
|
||||||
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
|
||||||
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
|
||||||
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr" [ label="RemoteAddr" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ label="SetupChaff" penwidth="1.5" fillcolor="moccasin" ]
|
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ label="WritePacket" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ label="Close" penwidth="1.5" fillcolor="moccasin" ]
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr" [ fillcolor="moccasin" label="RemoteAddr" penwidth="1.5" ]
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" ]
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.HKExListener" {
|
subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.HKExListener" {
|
||||||
fontcolor="#222222";
|
tooltip="type: *blitter.com/go/hkexsh/hkexnet.HKExListener";
|
||||||
|
penwidth="0.5";
|
||||||
|
fontsize="15";
|
||||||
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(*HKExListener)";
|
label="(*HKExListener)";
|
||||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.HKExListener";
|
|
||||||
penwidth="0.5";
|
|
||||||
fontsize="15";
|
|
||||||
|
|
||||||
"(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ fillcolor="moccasin" label="Accept" penwidth="1.5" ]
|
"(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ fillcolor="moccasin" label="Accept" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
|
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
|
||||||
penwidth="0.5";
|
fontcolor="#222222";
|
||||||
fontsize="15";
|
|
||||||
fontcolor="#222222";
|
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
fillcolor="wheat2";
|
||||||
label="(Conn)";
|
label="(Conn)";
|
||||||
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
|
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
|
||||||
|
penwidth="0.5";
|
||||||
|
fontsize="15";
|
||||||
|
|
||||||
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ label="Write" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.HKExListener" {
|
subgraph "cluster_blitter.com/go/hkexsh/hkexnet.HKExListener" {
|
||||||
label="(HKExListener)";
|
fillcolor="wheat2";
|
||||||
|
label="(HKExListener)";
|
||||||
tooltip="type: blitter.com/go/hkexsh/hkexnet.HKExListener";
|
tooltip="type: blitter.com/go/hkexsh/hkexnet.HKExListener";
|
||||||
penwidth="0.5";
|
penwidth="0.5";
|
||||||
fontsize="15";
|
fontsize="15";
|
||||||
fontcolor="#222222";
|
fontcolor="#222222";
|
||||||
labelloc="b";
|
labelloc="b";
|
||||||
style="rounded,filled";
|
style="rounded,filled";
|
||||||
fillcolor="wheat2";
|
|
||||||
|
|
||||||
"(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
|
"(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
|
||||||
|
|
||||||
|
@ -188,53 +188,45 @@ fillcolor="wheat2";
|
||||||
|
|
||||||
subgraph "cluster_blitter.com/go/hkexsh/logger" {
|
subgraph "cluster_blitter.com/go/hkexsh/logger" {
|
||||||
penwidth="0.8";
|
penwidth="0.8";
|
||||||
rank="sink";
|
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
style="filled";
|
style="filled";
|
||||||
|
rank="sink";
|
||||||
fillcolor="lightyellow";
|
fillcolor="lightyellow";
|
||||||
fontname="bold";
|
fontname="bold";
|
||||||
label="[logger]";
|
label="[logger]";
|
||||||
URL="/?f=blitter.com/go/hkexsh/logger";
|
URL="/?f=blitter.com/go/hkexsh/logger";
|
||||||
tooltip="package: blitter.com/go/hkexsh/logger";
|
tooltip="package: blitter.com/go/hkexsh/logger";
|
||||||
|
|
||||||
|
"blitter.com/go/hkexsh/logger.LogNotice" [ fillcolor="moccasin" label="LogNotice" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ]
|
"blitter.com/go/hkexsh/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/logger.LogNotice" [ penwidth="1.5" fillcolor="moccasin" label="LogNotice" ]
|
"blitter.com/go/hkexsh/logger.LogErr" [ fillcolor="moccasin" label="LogErr" penwidth="1.5" ]
|
||||||
"blitter.com/go/hkexsh/logger.LogErr" [ penwidth="1.5" fillcolor="moccasin" label="LogErr" ]
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subgraph "cluster_github.com/kr/pty" {
|
subgraph "cluster_github.com/kr/pty" {
|
||||||
style="filled";
|
penwidth="0.8";
|
||||||
|
fillcolor="lightyellow";
|
||||||
|
tooltip="package: github.com/kr/pty";
|
||||||
label="[pty]";
|
label="[pty]";
|
||||||
URL="/?f=github.com/kr/pty";
|
URL="/?f=github.com/kr/pty";
|
||||||
penwidth="0.8";
|
|
||||||
fontsize="16";
|
fontsize="16";
|
||||||
fillcolor="lightyellow";
|
style="filled";
|
||||||
fontname="bold";
|
fontname="bold";
|
||||||
rank="sink";
|
rank="sink";
|
||||||
tooltip="package: github.com/kr/pty";
|
|
||||||
|
|
||||||
"github.com/kr/pty.Start" [ fillcolor="moccasin" label="Start" penwidth="1.5" ]
|
"github.com/kr/pty.Start" [ label="Start" penwidth="1.5" fillcolor="moccasin" ]
|
||||||
"github.com/kr/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" ]
|
"github.com/kr/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" ]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$1" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2$1" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ arrowhead="normalnoneodot" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ arrowhead="normalnoneodot" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$4" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ arrowhead="normalnoneodiamond" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$5" [ arrowhead="normalnoneodot" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$1" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$1" [ arrowhead="normalnoneodot" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$1" [ arrowhead="normalnoneodot" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Listen" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Listen" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
|
@ -261,20 +253,28 @@ tooltip="package: github.com/kr/pty";
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).TermType" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).TermType" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ arrowhead="normalnoneodiamond" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs$2" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ arrowhead="normalnoneodot" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ arrowhead="normalnoneodot" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ arrowhead="normalnoneodiamond" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$5" [ arrowhead="normalnoneodot" ]
|
||||||
|
"blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runShellAs" [ ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runShellAs" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/logger.LogErr" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/logger.LogErr" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2$1" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ]
|
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.main$2$1" [ arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.main$2$1" [ arrowhead="normalnoneodiamond" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
|
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
"blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ ]
|
"blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ ]
|
||||||
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$2" [ arrowhead="normalnoneodot" ]
|
"blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$2" [ arrowhead="normalnoneodot" ]
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 569 KiB After Width: | Height: | Size: 581 KiB |
Loading…
Reference in New Issue