MCPcopy
hub / github.com/cloudflare/cloudflared / ServeHTTP

Method ServeHTTP

connection/http2.go:99–166  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

97}
98
99func (c *HTTP2Connection) ServeHTTP(w http.ResponseWriter, r *http.Request) {
100 c.activeRequestsWG.Add(1)
101 defer c.activeRequestsWG.Done()
102
103 connType := determineHTTP2Type(r)
104 handleMissingRequestParts(connType, r)
105
106 respWriter, err := NewHTTP2RespWriter(r, w, connType, c.log)
107 if err != nil {
108 c.observer.log.Error().Msg(err.Error())
109 return
110 }
111
112 originProxy, err := c.orchestrator.GetOriginProxy()
113 if err != nil {
114 c.observer.log.Error().Msg(err.Error())
115 return
116 }
117
118 var requestErr error
119 switch connType {
120 case TypeControlStream:
121 requestErr = c.controlStreamHandler.ServeControlStream(r.Context(), respWriter, c.connOptions.ConnectionOptions(), c.orchestrator)
122 if requestErr != nil {
123 c.controlStreamErr = requestErr
124 }
125
126 case TypeConfiguration:
127 requestErr = c.handleConfigurationUpdate(respWriter, r)
128
129 case TypeWebsocket, TypeHTTP:
130 stripWebsocketUpgradeHeader(r)
131 // Check for tracing on request
132 tr := tracing.NewTracedHTTPRequest(r, c.connIndex, c.log)
133 if err := originProxy.ProxyHTTP(respWriter, tr, connType == TypeWebsocket); err != nil {
134 requestErr = fmt.Errorf("Failed to proxy HTTP: %w", err)
135 }
136
137 case TypeTCP:
138 host, err := getRequestHost(r)
139 if err != nil {
140 requestErr = fmt.Errorf(`cloudflared received a warp-routing request with an empty host value: %w`, err)
141 break
142 }
143
144 rws := NewHTTPResponseReadWriterAcker(respWriter, respWriter, r)
145 requestErr = originProxy.ProxyTCP(r.Context(), rws, &TCPRequest{
146 Dest: host,
147 CFRay: FindCfRayHeader(r),
148 LBProbe: IsLBProbeRequest(r),
149 CfTraceID: r.Header.Get(tracing.TracerContextName),
150 ConnIndex: c.connIndex,
151 })
152
153 default:
154 requestErr = fmt.Errorf("Received unknown connection type: %s", connType)
155 }
156

Callers 1

TestServeWSFunction · 0.45

Calls 15

NewTracedHTTPRequestFunction · 0.92
determineHTTP2TypeFunction · 0.85
NewHTTP2RespWriterFunction · 0.85
getRequestHostFunction · 0.85
FindCfRayHeaderFunction · 0.85
IsLBProbeRequestFunction · 0.85
ConnectionOptionsMethod · 0.80
ErrorfMethod · 0.80

Tested by 1

TestServeWSFunction · 0.36