MCPcopy Create free account
hub / github.com/Monibuca/engine / ReceiveRequest

Method ReceiveRequest

config/remote.go:118–165  ·  view source on GitHub ↗
(s quic.Stream, conn quic.Connection)

Source from the content-addressed store, hash-verified

116}
117
118func (cfg *Engine) ReceiveRequest(s quic.Stream, conn quic.Connection) error {
119 defer s.Close()
120 wr := &myResponseWriter2{Stream: s}
121 reader := bufio.NewReader(s)
122 var req *http.Request
123 url, _, err := reader.ReadLine()
124 if err == nil {
125 ctx, cancel := context.WithCancel(s.Context())
126 defer cancel()
127 req, err = http.NewRequestWithContext(ctx, "GET", string(url), reader)
128 for err == nil {
129 var h []byte
130 if h, _, err = reader.ReadLine(); len(h) > 0 {
131 if b, a, f := strings.Cut(string(h), ": "); f {
132 req.Header.Set(b, a)
133 }
134 } else {
135 break
136 }
137 }
138
139 if err == nil {
140 h, _ := cfg.mux.Handler(req)
141 if req.Header.Get("Accept") == "text/event-stream" {
142 go h.ServeHTTP(wr, req)
143 } else if req.Header.Get("Upgrade") == "websocket" {
144 var writer myResponseWriter3
145 writer.Stream = s
146 writer.Connection = conn
147 req.Host = req.Header.Get("Host")
148 if req.Host == "" {
149 req.Host = req.URL.Host
150 }
151 if req.Host == "" {
152 req.Host = "m7s.live"
153 }
154 h.ServeHTTP(&writer, req) //建立websocket连接,握手
155 } else {
156 h.ServeHTTP(wr, req)
157 }
158 }
159 io.ReadAll(s)
160 }
161 if err != nil {
162 log.Error("read console server error:", err)
163 }
164 return err
165}

Callers 1

RemoteMethod · 0.95

Calls 7

ErrorFunction · 0.92
SetMethod · 0.80
ServeHTTPMethod · 0.80
CloseMethod · 0.65
HandlerMethod · 0.65
NewReaderMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected