MCPcopy
hub / github.com/gorilla/websocket / echoCopy

Function echoCopy

examples/autobahn/server.go:30–76  ·  view source on GitHub ↗

echoCopy echoes messages from the client using io.Copy.

(w http.ResponseWriter, r *http.Request, writerOnly bool)

Source from the content-addressed store, hash-verified

28
29// echoCopy echoes messages from the client using io.Copy.
30func echoCopy(w http.ResponseWriter, r *http.Request, writerOnly bool) {
31 conn, err := upgrader.Upgrade(w, r, nil)
32 if err != nil {
33 log.Println("Upgrade:", err)
34 return
35 }
36 defer conn.Close()
37 for {
38 mt, r, err := conn.NextReader()
39 if err != nil {
40 if err != io.EOF {
41 log.Println("NextReader:", err)
42 }
43 return
44 }
45 if mt == websocket.TextMessage {
46 r = &validator{r: r}
47 }
48 w, err := conn.NextWriter(mt)
49 if err != nil {
50 log.Println("NextWriter:", err)
51 return
52 }
53 if mt == websocket.TextMessage {
54 r = &validator{r: r}
55 }
56 if writerOnly {
57 _, err = io.Copy(struct{ io.Writer }{w}, r)
58 } else {
59 _, err = io.Copy(w, r)
60 }
61 if err != nil {
62 if err == errInvalidUTF8 {
63 conn.WriteControl(websocket.CloseMessage,
64 websocket.FormatCloseMessage(websocket.CloseInvalidFramePayloadData, ""),
65 time.Time{})
66 }
67 log.Println("Copy:", err)
68 return
69 }
70 err = w.Close()
71 if err != nil {
72 log.Println("Close:", err)
73 return
74 }
75 }
76}
77
78func echoCopyWriterOnly(w http.ResponseWriter, r *http.Request) {
79 echoCopy(w, r, true)

Callers 2

echoCopyWriterOnlyFunction · 0.85
echoCopyFullFunction · 0.85

Calls 6

FormatCloseMessageFunction · 0.92
UpgradeMethod · 0.80
NextReaderMethod · 0.80
NextWriterMethod · 0.80
WriteControlMethod · 0.80
CloseMethod · 0.45

Tested by

no test coverage detected