aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfangyuanziti <tiziyuanfang@gmail.com>2015-02-22 20:22:38 +0800
committerPřemysl Janouch <p@janouch.name>2018-09-08 16:49:23 +0200
commita1d1151017ada36a0431969e3e05f35f1dd6204f (patch)
tree0c39192812e08bccc6878dd59353cdc71cee9b9b
parentef8155bf17787473a58f00d54cfc8a7e16ee8708 (diff)
downloadhaven-a1d1151017ada36a0431969e3e05f35f1dd6204f.tar.gz
haven-a1d1151017ada36a0431969e3e05f35f1dd6204f.tar.xz
haven-a1d1151017ada36a0431969e3e05f35f1dd6204f.zip
add a new api: NewConnNet
-rw-r--r--nexgb/conn.go11
-rw-r--r--nexgb/xgb.go20
2 files changed, 31 insertions, 0 deletions
diff --git a/nexgb/conn.go b/nexgb/conn.go
index 41ba5a8..1b7d838 100644
--- a/nexgb/conn.go
+++ b/nexgb/conn.go
@@ -29,6 +29,17 @@ func (c *Conn) connect(display string) error {
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
authName, authData, err := readAuthority(c.host, c.display)
noauth := false
diff --git a/nexgb/xgb.go b/nexgb/xgb.go
index 3c7964c..4403ea0 100644
--- a/nexgb/xgb.go
+++ b/nexgb/xgb.go
@@ -98,6 +98,26 @@ func NewConnDisplay(display string) (*Conn, error) {
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.cookieChan = make(chan *Cookie, cookieBuffer)