code: func (g *GoHttpServer) handleMux(w http.ResponseWriter, r *http.Request) {
  	if maxRequestSize := int64(Config.IntDefault("http.maxrequestsize", 0)); maxRequestSize > 0 {
  		r.Body = http.MaxBytesReader(w, r.Body, maxRequestSize)
  	}
  
  	upgrade := r.Header.Get("Upgrade")
  	context := g.goContextStack.Pop().(*GoContext)
  	defer func() {
  		g.goContextStack.Push(context)
  	}()
  	context.Request.SetRequest(r)
  	context.Response.SetResponse(w)
  
  	if upgrade == "websocket" || upgrade == "Websocket" {
  		websocket.Handler(func(ws *websocket.Conn) {
  			//Override default Read/Write timeout with sane value for a web socket request
  			if err := ws.SetDeadline(time.Now().Add(time.Hour * 24)); err != nil {
  				serverLogger.Error("SetDeadLine failed:", err)
  			}
  			r.Method = "WS"
  			context.Request.WebSocket = ws
  			context.WebSocket = &GoWebSocket{Conn: ws, GoResponse: *context.Response}
  			g.ServerInit.Callback(context)
  		}).ServeHTTP(w, r)
  	} else {
  		g.ServerInit.Callback(context)
  	}
  }
docs: // Passes the server request to Revel