コード例 #1
0
ファイル: CpiDeviceLpec.cpp プロジェクト: Jacik/ohNet
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;
}
コード例 #2
0
ファイル: CpiDeviceUpnp.cpp プロジェクト: wifigeek/ohNet
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());
    }
}
コード例 #3
0
ファイル: CpiDeviceUpnp.cpp プロジェクト: DoomHammer/ohNet
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);
    }
}
コード例 #4
0
ファイル: CpiDeviceDv.cpp プロジェクト: DoomHammer/ohNet
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();
}
コード例 #5
0
ファイル: CpiDeviceDv.cpp プロジェクト: Montellese/ohNet
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();
    }
}
コード例 #6
0
ファイル: ProtocolUpnp.cpp プロジェクト: fuzzy01/ohNet
void InvocationUpnp::WriteServiceType(IWriterAscii& aWriter, const Invocation& aInvocation)
{
    const ServiceType& serviceType = aInvocation.ServiceType();
    aWriter.Write(serviceType.FullName());
}