// ServeHTTP implements http.Handler's ServeHTTP func (h *rpcHandler) ServeHTTP(c http.ResponseWriter, req *http.Request) { if req.Method != "CONNECT" { c.Header().Set("Content-Type", "text/plain; charset=utf-8") c.WriteHeader(http.StatusMethodNotAllowed) io.WriteString(c, "405 must CONNECT\n") return } conn, _, err := c.(http.Hijacker).Hijack() if err != nil { log.Errorf("rpc hijacking %s: %v", req.RemoteAddr, err) return } io.WriteString(conn, "HTTP/1.0 "+connected+"\n\n") codec := h.cFactory(NewBufferedConnection(conn)) context := &proto.Context{RemoteAddr: req.RemoteAddr} if h.useAuth { if authenticated, err := auth.Authenticate(codec, context); !authenticated { if err != nil { log.Errorf("authentication erred at %s: %v", req.RemoteAddr, err) } codec.Close() return } } h.server.ServeCodecWithContext(codec, context) }
func (h *rpcHandler) ServeHTTP(c http.ResponseWriter, req *http.Request) { conn, _, err := c.(http.Hijacker).Hijack() if err != nil { log.Errorf("rpc hijacking %s: %v", req.RemoteAddr, err) return } io.WriteString(conn, "HTTP/1.0 "+connected+"\n\n") codec := h.cFactory(NewBufferedConnection(conn)) context := &proto.Context{RemoteAddr: req.RemoteAddr} if h.useAuth { if authenticated, err := auth.Authenticate(codec, context); !authenticated { if err != nil { log.Errorf("authentication erred at %s: %v", req.RemoteAddr, err) } codec.Close() return } } h.ServeCodecWithContext(codec, context) }