aboutsummaryrefslogtreecommitdiff
path: root/xP
diff options
context:
space:
mode:
Diffstat (limited to 'xP')
-rw-r--r--xP/xP.go17
1 files changed, 13 insertions, 4 deletions
diff --git a/xP/xP.go b/xP/xP.go
index 20117b2..3effaf0 100644
--- a/xP/xP.go
+++ b/xP/xP.go
@@ -16,6 +16,7 @@ import (
"net"
"net/http"
"os"
+ "strings"
"time"
"nhooyr.io/websocket"
@@ -159,13 +160,21 @@ func clientWriteError(ctx context.Context, ws *websocket.Conn, err error) bool {
}
func handleWS(w http.ResponseWriter, r *http.Request) {
- ws, err := websocket.Accept(w, r, &websocket.AcceptOptions{
+ opts := &websocket.AcceptOptions{
InsecureSkipVerify: true,
- // Note that Safari can be broken with compression.
- CompressionMode: websocket.CompressionContextTakeover,
+ CompressionMode: websocket.CompressionContextTakeover,
// This is for the payload; set higher to avoid overhead.
CompressionThreshold: 64 << 10,
- })
+ }
+
+ // AppleWebKit can be broken with compression.
+ if agent := r.UserAgent(); strings.Contains(agent, " Version/") &&
+ (strings.HasPrefix(agent, "Mozilla/5.0 (Macintosh; ") ||
+ strings.HasPrefix(agent, "Mozilla/5.0 (iPhone; ")) {
+ opts.CompressionMode = websocket.CompressionDisabled
+ }
+
+ ws, err := websocket.Accept(w, r, opts)
if err != nil {
log.Println("Client rejected: " + err.Error())
return