void CpiDeviceLpec::Invocable::InvokeAction(Invocation& aInvocation) { AutoMutex a(iDevice.iLock); iDevice.iResponseHandler = this; iInvocation = &aInvocation; iDevice.iWriteBuffer->Write(Lpec::kMethodAction); iDevice.iWriteBuffer->Write(' '); iDevice.iWriteBuffer->Write(iDevice.iLpecName); iDevice.iWriteBuffer->Write('/'); iDevice.iWriteBuffer->Write(aInvocation.ServiceType().Name()); iDevice.iWriteBuffer->Write(' '); Bws<Ascii::kMaxUintStringBytes> verBuf; (void)Ascii::AppendDec(verBuf, aInvocation.ServiceType().Version()); iDevice.iWriteBuffer->Write(verBuf); iDevice.iWriteBuffer->Write(' '); iDevice.iWriteBuffer->Write(aInvocation.Action().Name()); std::vector<Argument*> inputArgs = aInvocation.InputArguments(); for (TUint i=0; i<inputArgs.size(); i++) { inputArgs[i]->ProcessInput(*this); } iDevice.iWriteBuffer->Write(Lpec::kMsgTerminator); iDevice.iWriteBuffer->WriteFlush(); iSem.Wait(); // wait for response iInvocation = NULL; iDevice.iResponseHandler = NULL; }
void CpiDeviceUpnp::GetControlUri(const Invocation& aInvocation, Uri& aUri) { AutoMutex a(iLock); if (iControlUrl.Bytes() != 0) { aUri.Replace(iControlUrl); } else { GetServiceUri(aUri, "controlURL", aInvocation.ServiceType()); iControlUrl.Set(aUri.AbsoluteUri()); } }
void CpiDeviceUpnp::Invocable::InvokeAction(Invocation& aInvocation) { try { Uri uri; iDevice.GetServiceUri(uri, "controlURL", aInvocation.ServiceType()); InvocationUpnp invoker(iDevice.Device().GetCpStack(), aInvocation); invoker.Invoke(uri); } catch (XmlError&) { THROW(ReaderError); } }
void CpiDeviceDv::InvokeAction(Invocation& aInvocation) { const OpenHome::Net::ServiceType& serviceType = aInvocation.ServiceType(); DviService* service = iDeviceDv.ServiceReference(serviceType); if (service == NULL) { const HttpStatus& err = HttpStatus::kNotFound; aInvocation.SetError(Error::eUpnp, err.Code(), err.Reason()); } else { InvocationDv stream(aInvocation, *service); stream.Start(); service->RemoveRef(); } aInvocation.SignalCompleted(); }
void CpiDeviceDv::Invocable::InvokeAction(Invocation& aInvocation) { const OpenHome::Net::ServiceType& serviceType = aInvocation.ServiceType(); DviService* service = iDevice.iDeviceDv.ServiceReference(serviceType); if (service == NULL) { LOG2(kCpDeviceDv, kError, "CpiDeviceDv::Invocable::InvokeAction failed lookup for service %.*s:%.*s:%u\n", PBUF(serviceType.Domain()), PBUF(serviceType.Name()), serviceType.Version()); const HttpStatus& err = HttpStatus::kNotFound; aInvocation.SetError(Error::eUpnp, err.Code(), err.Reason()); } else { InvocationDv stream(aInvocation, *service); stream.Start(); service->RemoveRef(); } }
void InvocationUpnp::WriteServiceType(IWriterAscii& aWriter, const Invocation& aInvocation) { const ServiceType& serviceType = aInvocation.ServiceType(); aWriter.Write(serviceType.FullName()); }