void DviProviderSubscriptionLongPoll::Renew(IDvInvocation& aInvocation, const Brx& aSid, TUint aRequestedDuration, IDvInvocationResponseUint& aDuration) { DviSubscription* subscription = iDvStack.SubscriptionManager().Find(aSid); if (subscription == NULL) { aInvocation.Error(kErrorCodeBadSubscription, kErrorDescBadSubscription); } TUint timeout = aRequestedDuration; if (timeout > kTimeoutLongPollSecs) { timeout = kTimeoutLongPollSecs; } subscription->Renew(timeout); aInvocation.StartResponse(); aDuration.Write(timeout); aInvocation.EndResponse(); }
void DviSessionUpnp::Renew() { LOG(kDvEvent, "Renew subscription (request): "); LOG(kDvEvent, iHeaderSid.Sid()); LOG(kDvEvent, "for %u secs\n", iHeaderTimeout.Timeout()); if (iHeaderCallback.Received() || iHeaderNt.Received()) { Error(HttpStatus::kBadRequest); } DviDevice* device; DviService* service; ParseRequestUri(DviProtocolUpnp::kEventUrlTail, &device, &service); if (device == NULL || service == NULL) { Error(HttpStatus::kPreconditionFailed); } DviSubscription* subscription = DviSubscriptionManager::Find(iHeaderSid.Sid()); if (subscription == NULL) { Error(HttpStatus::kPreconditionFailed); } TUint duration = iHeaderTimeout.Timeout(); subscription->Renew(duration); iResponseStarted = true; iWriterResponse->WriteStatus(HttpStatus::kOk, Http::eHttp11); WriteServerHeader(*iWriterResponse); IWriterAscii& writerSid = iWriterResponse->WriteHeaderField(HeaderSid::kHeaderSid); writerSid.Write(HeaderSid::kFieldSidPrefix); writerSid.Write(iHeaderSid.Sid()); writerSid.WriteFlush(); IWriterAscii& writerTimeout = iWriterResponse->WriteHeaderField(HeaderTimeout::kHeaderTimeout); writerTimeout.Write(HeaderTimeout::kFieldTimeoutPrefix); writerTimeout.WriteUint(duration); writerTimeout.WriteFlush(); iWriterResponse->WriteHeader(Http::kHeaderConnection, Http::kConnectionClose); iWriterResponse->WriteFlush(); iResponseEnded = true; LOG(kDvEvent, "Renew subscription (complete): "); LOG(kDvEvent, iHeaderSid.Sid()); LOG(kDvEvent, "for %u secs\n", duration); }