cmd/derper, derp/derphttp: add websocket support

Updates #3157

Change-Id: I337a919a3b350bc7bd9af567b49c4d5d6616abdd
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2021-10-21 10:12:51 -07:00
committed by Brad Fitzpatrick
parent 0b62f26349
commit 505f844a43
10 changed files with 302 additions and 5 deletions
+5 -1
View File
@@ -8,6 +8,7 @@ import (
"fmt"
"log"
"net/http"
"strings"
"tailscale.com/derp"
)
@@ -20,10 +21,13 @@ const fastStartHeader = "Derp-Fast-Start"
func Handler(s *derp.Server) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if p := r.Header.Get("Upgrade"); p != "WebSocket" && p != "DERP" {
up := strings.ToLower(r.Header.Get("Upgrade"))
if up != "websocket" && up != "derp" {
log.Printf("Weird upgrade: %q", up)
http.Error(w, "DERP requires connection upgrade", http.StatusUpgradeRequired)
return
}
fastStart := r.Header.Get(fastStartHeader) == "1"
h, ok := w.(http.Hijacker)