func (handler *Characteristics) ServeHTTP(response http.ResponseWriter, request *http.Request) { var res io.Reader var err error handler.mutex.Lock() switch request.Method { case netio.MethodGET: log.Printf("[VERB] %v GET /characteristics", request.RemoteAddr) request.ParseForm() res, err = handler.controller.HandleGetCharacteristics(request.Form) case netio.MethodPUT: log.Printf("[VERB] %v PUT /characteristics", request.RemoteAddr) session := handler.context.GetSessionForRequest(request) conn := session.Connection() err = handler.controller.HandleUpdateCharacteristics(request.Body, conn) default: log.Println("[WARN] Cannot handle HTTP method", request.Method) } handler.mutex.Unlock() if err != nil { log.Println("[ERRO]", err) response.WriteHeader(http.StatusInternalServerError) } else { if res != nil { response.Header().Set("Content-Type", netio.HTTPContentTypeHAPJson) wr := netio.NewChunkedWriter(response, 2048) b, _ := ioutil.ReadAll(res) wr.Write(b) } else { response.WriteHeader(http.StatusNoContent) } } }
func (handler *Accessories) ServeHTTP(response http.ResponseWriter, request *http.Request) { log.Printf("[VERB] %v GET /accessories", request.RemoteAddr) response.Header().Set("Content-Type", netio.HTTPContentTypeHAPJson) handler.mutex.Lock() res, err := handler.controller.HandleGetAccessories(request.Body) handler.mutex.Unlock() if err != nil { log.Println("[ERRO]", err) response.WriteHeader(http.StatusInternalServerError) } else { // Write the data in chunks of 2048 bytes // http.ResponseWriter should do this already, but crashes because of an unkown reason wr := netio.NewChunkedWriter(response, 2048) b, _ := ioutil.ReadAll(res) log.Println("[VERB]", string(b)) _, err := wr.Write(b) if err != nil { log.Println("[ERRO]", err) } } }