void ProviderTestBasic::EchoBinary(IDvInvocation& aInvocation, const Brx& aValue, IDvInvocationResponseBinary& aResult) { aInvocation.StartResponse(); aResult.Write(aValue); aResult.WriteFlush(); aInvocation.EndResponse(); }
void ProviderTestBasic::GetInt(IDvInvocation& aInvocation, IDvInvocationResponseInt& aValueInt) { aInvocation.StartResponse(); TInt val; GetPropertyVarInt(val); aValueInt.Write(val); aInvocation.EndResponse(); }
void ProviderTestBasic::GetBool(IDvInvocation& aInvocation, IDvInvocationResponseBool& aValueBool) { aInvocation.StartResponse(); TBool val; GetPropertyVarBool(val); aValueBool.Write(val); aInvocation.EndResponse(); }
void ProviderTestBasic::GetString(IDvInvocation& aInvocation, IDvInvocationResponseString& aValueStr) { aInvocation.StartResponse(); Brhz val; GetPropertyVarStr(val); aValueStr.Write(val); aValueStr.WriteFlush(); aInvocation.EndResponse(); }
void ProviderTestBasic::GetBinary(IDvInvocation& aInvocation, IDvInvocationResponseBinary& aValueBin) { aInvocation.StartResponse(); Brh val; GetPropertyVarBin(val); aValueBin.Write(val); aValueBin.WriteFlush(); aInvocation.EndResponse(); }
void ProviderTestBasic::SetMultiple(IDvInvocation& aInvocation, TUint aValueUint, TInt aValueInt, TBool aValueBool) { PropertiesLock(); SetPropertyVarUint(aValueUint); SetPropertyVarInt(aValueInt); SetPropertyVarBool(aValueBool); PropertiesUnlock(); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void ProviderTestBasic::EchoBinary(IDvInvocation& aInvocation, const Brx& aValue, IDvInvocationResponseBinary& aResult) { aInvocation.StartResponse(); // validate that binary response can be streamed over multiple calls Brn start(aValue); const TUint pos = start.Bytes() / 2; Brn end = start.Split(pos); start.Set(start.Ptr(), pos); aResult.Write(start); aResult.Write(end); aResult.WriteFlush(); aInvocation.EndResponse(); }
void ProviderTestBasic::WriteFile(IDvInvocation& aInvocation, const Brx& aData, const Brx& aFileFullName) { TUint len = aFileFullName.Bytes(); char* name = (char*)malloc(len+1); (void)memcpy(name, aFileFullName.Ptr(), aFileFullName.Bytes()); name[len] = 0; FILE* fp = fopen(name, "wb"); free(name); (void)fwrite(aData.Ptr(), aData.Bytes(), 1, fp); (void)fflush(fp); (void)fclose(fp); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void DviProviderSubscriptionLongPoll::StartGetPropertyUpdates(IDvInvocation& aInvocation) { AutoMutex a(iLock); if (iExit) { aInvocation.Error(501, Brx::Empty()); } if (iClientCount == iMaxClientCount) { aInvocation.Error(kErrorCodeTooManyRequests, kErrorDescTooManyRequests); } if (iClientCount == 0) { iShutdown.Wait(); } iClientCount++; }
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 DviProviderSubscriptionLongPoll::GetPropertyUpdates(IDvInvocation& aInvocation, const Brx& aClientId, IDvInvocationResponseString& aUpdates) { StartGetPropertyUpdates(aInvocation); AutoGetPropertyUpdatesComplete a(*this); Semaphore sem("PSLP", 0); UpdateReadySignal* updateReadySignal = NULL; Brh response; try { iPropertyUpdateCollection.SetClientSignal(aClientId, &sem); iLock.Wait(); for (TUint i=0; i<iMaxClientCount; i++) { if (iUpdateReady[i].IsFree()) { updateReadySignal = &iUpdateReady[i]; updateReadySignal->Set(sem); break; } } ASSERT(updateReadySignal != NULL); iLock.Signal(); sem.Wait(kGetUpdatesMaxDelay); iPropertyUpdateCollection.SetClientSignal(aClientId, NULL); if (!iExit) { WriterBwh writer(1024); iPropertyUpdateCollection.WriteUpdates(aClientId, writer); writer.TransferTo(response); } } catch (Timeout&) { iPropertyUpdateCollection.SetClientSignal(aClientId, NULL); } iLock.Wait(); updateReadySignal->Clear(); iLock.Signal(); aInvocation.StartResponse(); if (response.Bytes() > 0) { aUpdates.Write(response); } aUpdates.WriteFlush(); aInvocation.EndResponse(); }
void DviProviderSubscriptionLongPoll::Subscribe(IDvInvocation& aInvocation, const Brx& aClientId, const Brx& aUdn, const Brx& aService, TUint aRequestedDuration, IDvInvocationResponseString& aSid, IDvInvocationResponseUint& aDuration) { if (aRequestedDuration > kTimeoutLongPollSecs) { aRequestedDuration = kTimeoutLongPollSecs; } DviDevice* device = iDvStack.DeviceMap().Find(aUdn); if (device == NULL) { aInvocation.Error(kErrorCodeBadDevice, kErrorDescBadDevice); } DviService* service = NULL; const TUint serviceCount = device->ServiceCount(); for (TUint i=0; i<serviceCount; i++) { DviService* s = &device->Service(i); if (s->ServiceType().PathUpnp() == aService) { service = s; break; } } if (service == NULL) { aInvocation.Error(kErrorCodeBadService, kErrorDescBadService); } Brh sid; device->CreateSid(sid); TUint timeout = aRequestedDuration; DviSubscription* subscription = new DviSubscription(iDvStack, *device, iPropertyUpdateCollection, NULL, sid, timeout); aInvocation.StartResponse(); aSid.Write(subscription->Sid()); aSid.WriteFlush(); aDuration.Write(timeout); aInvocation.EndResponse(); // Start subscription, prompting availability of the first update (covering all state variables) iPropertyUpdateCollection.AddSubscription(aClientId, subscription); iDvStack.SubscriptionManager().AddSubscription(*subscription); service->AddSubscription(subscription); }
void ProviderTestBasic::Toggle(IDvInvocation& aInvocation, TBool aValue, IDvInvocationResponseBool& aResult) { aInvocation.StartResponse(); aResult.Write(!aValue); aInvocation.EndResponse(); }
void ProviderTestBasic::SetBinary(IDvInvocation& aInvocation, const Brx& aValueBin) { SetPropertyVarBin(aValueBin); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void ProviderTestBasic::SetString(IDvInvocation& aInvocation, const Brx& aValueStr) { SetPropertyVarStr(aValueStr); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void ProviderTestBasic::SetBool(IDvInvocation& aInvocation, TBool aValueBool) { SetPropertyVarBool(aValueBool); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void DviProviderSubscriptionLongPoll::Unsubscribe(IDvInvocation& aInvocation, const Brx& aSid) { iPropertyUpdateCollection.RemoveSubscription(aSid); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void ProviderTestBasic::SetInt(IDvInvocation& aInvocation, TInt aValueInt) { SetPropertyVarInt(aValueInt); aInvocation.StartResponse(); aInvocation.EndResponse(); }
void ProviderTestBasic::Shutdown(IDvInvocation& aInvocation) { aInvocation.StartResponse(); aInvocation.EndResponse(); putchar('q'); }
void ProviderTestBasic::Decrement(IDvInvocation& aInvocation, TInt aValue, IDvInvocationResponseInt& aResult) { aInvocation.StartResponse(); aResult.Write(--aValue); aInvocation.EndResponse(); }
void ProviderTestBasic::Increment(IDvInvocation& aInvocation, TUint aValue, IDvInvocationResponseUint& aResult) { aInvocation.StartResponse(); aResult.Write(++aValue); aInvocation.EndResponse(); }
void ProviderTestBasic::Shutdown(IDvInvocation& aInvocation) { aInvocation.StartResponse(); aInvocation.EndResponse(); putchar('q'); // assumes running under a console that is quit via 'q' }