MCPcopy Index your code
hub / github.com/codegangsta/gin / proxyWebsocket

Function proxyWebsocket

lib/proxy.go:83–117  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request, host *url.URL)

Source from the content-addressed store, hash-verified

81}
82
83func proxyWebsocket(w http.ResponseWriter, r *http.Request, host *url.URL) {
84 d, err := net.Dial("tcp", host.Host)
85 if err != nil {
86 http.Error(w, "Error contacting backend server.", 500)
87 fmt.Errorf("Error dialing websocket backend %s: %v", host, err)
88 return
89 }
90 hj, ok := w.(http.Hijacker)
91 if !ok {
92 http.Error(w, "Not a hijacker?", 500)
93 return
94 }
95 nc, _, err := hj.Hijack()
96 if err != nil {
97 fmt.Errorf("Hijack error: %v", err)
98 return
99 }
100 defer nc.Close()
101 defer d.Close()
102
103 err = r.Write(d)
104 if err != nil {
105 fmt.Errorf("Error copying request to target: %v", err)
106 return
107 }
108
109 errc := make(chan error, 2)
110 cp := func(dst io.Writer, src io.Reader) {
111 _, err := io.Copy(dst, src)
112 errc <- err
113 }
114 go cp(d, nc)
115 go cp(nc, d)
116 <-errc
117}

Callers 1

defaultHandlerMethod · 0.85

Calls 1

CloseMethod · 0.80

Tested by

no test coverage detected