func (handler *PairSetup) ServeHTTP(response http.ResponseWriter, request *http.Request) { log.Printf("[VERB] %v POST /pair-setup", request.RemoteAddr) response.Header().Set("Content-Type", netio.HTTPContentTypePairingTLV8) key := handler.context.GetConnectionKey(request) session := handler.context.Get(key).(netio.Session) controller := session.PairSetupHandler() if controller == nil { log.Println("[VERB] Create new pair setup controller") var err error controller, err = pair.NewSetupServerController(handler.device, handler.database) if err != nil { log.Println(err) } session.SetPairSetupHandler(controller) } res, err := pair.HandleReaderForHandler(request.Body, controller) if err != nil { log.Println("[ERRO]", err) response.WriteHeader(http.StatusInternalServerError) } else { io.Copy(response, res) } }
func (endpoint *PairSetup) ServeHTTP(response http.ResponseWriter, request *http.Request) { log.Printf("[VERB] %v POST /pair-setup", request.RemoteAddr) response.Header().Set("Content-Type", netio.HTTPContentTypePairingTLV8) var err error var in util.Container var out util.Container key := endpoint.context.GetConnectionKey(request) session := endpoint.context.Get(key).(netio.Session) ctrl := session.PairSetupHandler() if ctrl == nil { log.Println("[VERB] Create new pair setup controller") if ctrl, err = pair.NewSetupServerController(endpoint.device, endpoint.database); err != nil { log.Println(err) } session.SetPairSetupHandler(ctrl) } if in, err = util.NewTLV8ContainerFromReader(request.Body); err == nil { out, err = ctrl.Handle(in) } if err != nil { log.Println("[ERRO]", err) response.WriteHeader(http.StatusInternalServerError) } else { io.Copy(response, out.BytesBuffer()) // Send event when key exchange is done b := out.GetByte(pair.TagSequence) switch pair.PairStepType(b) { case pair.PairStepKeyExchangeResponse: endpoint.emitter.Emit(event.DevicePaired{}) } } }