add a new api: NewConnNet

This commit is contained in:
fangyuanziti 2015-02-22 20:22:38 +08:00 committed by Přemysl Janouch
parent ef8155bf17
commit a1d1151017
Signed by: p
GPG Key ID: A0420B94F92B9493
2 changed files with 31 additions and 0 deletions

View File

@ -29,6 +29,17 @@ func (c *Conn) connect(display string) error {
return err return err
} }
return c.postConnect()
}
// connect init from to the net.Conn,
func (c *Conn) connectNet(netConn net.Conn) error {
c.conn = netConn
return c.postConnect()
}
// do the postConnect action after Conn get it's underly net.Conn
func (c *Conn) postConnect() error {
// Get authentication data // Get authentication data
authName, authData, err := readAuthority(c.host, c.display) authName, authData, err := readAuthority(c.host, c.display)
noauth := false noauth := false

View File

@ -98,6 +98,26 @@ func NewConnDisplay(display string) (*Conn, error) {
return nil, err return nil, err
} }
return postNewConn(conn)
}
// NewConnDisplay is just like NewConn, but allows a specific net.Conn
// to be used.
func NewConnNet(netConn net.Conn) (*Conn, error) {
conn := &Conn{}
// First connect. This reads authority, checks DISPLAY environment
// variable, and loads the initial Setup info.
err := conn.connectNet(netConn)
if err != nil {
return nil, err
}
return postNewConn(conn)
}
func postNewConn(conn *Conn) (*Conn, error) {
conn.Extensions = make(map[string]byte) conn.Extensions = make(map[string]byte)
conn.cookieChan = make(chan *Cookie, cookieBuffer) conn.cookieChan = make(chan *Cookie, cookieBuffer)