in websocketserver/websocketserver.go [68:118]
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
u, err := url.Parse(r.Header.Get("Origin"))
if err != nil || !s.isValidOrigin(u.Host) {
message := u.Host
if err != nil {
message = err.Error()
}
logrus.Error("invalid origin: ", message)
http.Error(w, "invalid origin", http.StatusBadRequest)
return
}
if s.conn != nil {
http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests)
return
}
conn, err := handleConnection(w, r)
if err != nil {
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
return
}
s.setupConnection(conn)
s.startPolling()
defer s.Close()
for {
if s.conn == nil {
break
}
msg, err := s.readMessage()
if err != nil {
break
}
rsp, err := s.processMessage(msg)
if err != nil {
break
}
if rsp != nil {
if err := s.WriteMessage(*rsp); err != nil {
logrus.Error("error writing message: ", err)
break
}
}
}
}