Copyright 2013 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

package ssh

import (
	
	
)
OpenChannelError is returned if the other side rejects an OpenChannel request.
type OpenChannelError struct {
	Reason  RejectionReason
	Message string
}

func ( *OpenChannelError) () string {
	return fmt.Sprintf("ssh: rejected: %s (%s)", .Reason, .Message)
}
ConnMetadata holds metadata for the connection.
User returns the user ID for this connection.
	User() string
SessionID returns the session hash, also denoted by H.
	SessionID() []byte
ClientVersion returns the client's version string as hashed into the session ID.
	ClientVersion() []byte
ServerVersion returns the server's version string as hashed into the session ID.
	ServerVersion() []byte
RemoteAddr returns the remote address for this connection.
	RemoteAddr() net.Addr
LocalAddr returns the local address for this connection.
	LocalAddr() net.Addr
}
Conn represents an SSH connection for both server and client roles. Conn is the basis for implementing an application layer, such as ClientConn, which implements the traditional shell access for clients.
type Conn interface {
	ConnMetadata
SendRequest sends a global request, and returns the reply. If wantReply is true, it returns the response status and payload. See also RFC4254, section 4.
	SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error)
OpenChannel tries to open an channel. If the request is rejected, it returns *OpenChannelError. On success it returns the SSH Channel and a Go channel for incoming, out-of-band requests. The Go channel must be serviced, or the connection will hang.
	OpenChannel(name string, data []byte) (Channel, <-chan *Request, error)
Close closes the underlying network connection
	Close() error
Wait blocks until the connection has shut down, and returns the error causing the shutdown.
	Wait() error
TODO(hanwen): consider exposing: RequestKeyChange Disconnect
}
DiscardRequests consumes and rejects all requests from the passed-in channel.
func ( <-chan *Request) {
	for  := range  {
		if .WantReply {
			.Reply(false, nil)
		}
	}
}
A connection represents an incoming connection.
The connection protocol.
	*mux
}

func ( *connection) () error {
	return .sshConn.conn.Close()
}
sshconn provides net.Conn metadata, but disallows direct reads and writes.
type sshConn struct {
	conn net.Conn

	user          string
	sessionID     []byte
	clientVersion []byte
	serverVersion []byte
}

func ( []byte) []byte {
	 := make([]byte, len())
	copy(, )
	return 
}

func ( *sshConn) () string {
	return .user
}

func ( *sshConn) () net.Addr {
	return .conn.RemoteAddr()
}

func ( *sshConn) () error {
	return .conn.Close()
}

func ( *sshConn) () net.Addr {
	return .conn.LocalAddr()
}

func ( *sshConn) () []byte {
	return dup(.sessionID)
}

func ( *sshConn) () []byte {
	return dup(.clientVersion)
}

func ( *sshConn) () []byte {
	return dup(.serverVersion)