A mock origin that echos data by streaming like a tcpOverWSConnection https://github.com/cloudflare/cloudflared/blob/master/ingress/origin_connection.go
(w ResponseWriter, r *http.Request)
| 131 | // A mock origin that echos data by streaming like a tcpOverWSConnection |
| 132 | // https://github.com/cloudflare/cloudflared/blob/master/ingress/origin_connection.go |
| 133 | func wsEchoEndpoint(w ResponseWriter, r *http.Request) error { |
| 134 | resp := &http.Response{ |
| 135 | StatusCode: http.StatusSwitchingProtocols, |
| 136 | } |
| 137 | if err := w.WriteRespHeaders(resp.StatusCode, resp.Header); err != nil { |
| 138 | return err |
| 139 | } |
| 140 | wsCtx, cancel := context.WithCancel(r.Context()) |
| 141 | readPipe, writePipe := io.Pipe() |
| 142 | |
| 143 | wsConn := websocket.NewConn(wsCtx, NewHTTPResponseReadWriterAcker(w, w.(http.Flusher), r), &log) |
| 144 | go func() { |
| 145 | select { |
| 146 | case <-wsCtx.Done(): |
| 147 | case <-r.Context().Done(): |
| 148 | } |
| 149 | _ = readPipe.Close() |
| 150 | _ = writePipe.Close() |
| 151 | }() |
| 152 | |
| 153 | originConn := &echoPipe{reader: readPipe, writer: writePipe} |
| 154 | stream.Pipe(wsConn, originConn, &log) |
| 155 | cancel() |
| 156 | wsConn.Close() |
| 157 | return nil |
| 158 | } |
| 159 | |
| 160 | type flakyConn struct { |
| 161 | closeAt time.Time |
no test coverage detected