Exemple #1
0
void InvocationBodyWriter::Write(const Invocation& aInvocation)
{
    const Brn kXmlVers("<?xml version=\"1.0\"?>");
    const Brn kEnvelopeOpen("<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/"
                            "\" s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">");
    const Brn kEnvelopeClose("</s:Envelope>");
    const Brn kBodyOpen("<s:Body>");
    const Brn kBodyClose("</s:Body>");
    const Brn kActionOpenStart("<u:");
    const Brn kActionNs(" xmlns:u=\"");
    const Brn kActionCloseStart("</u:");

    iWriteBuffer.Write(kXmlVers);
    iWriterAscii.WriteNewline();
    iWriteBuffer.Write(kEnvelopeOpen);
    iWriterAscii.WriteNewline();
    iWriteBuffer.Write(kBodyOpen);
    iWriterAscii.WriteNewline();
    iWriteBuffer.Write(kActionOpenStart);
    iWriteBuffer.Write(aInvocation.Action().Name());
    iWriteBuffer.Write(kActionNs);
    InvocationUpnp::WriteServiceType(iWriterAscii, aInvocation);
    iWriteBuffer.Write('\"');
    iWriteBuffer.Write('>');
    iWriterAscii.WriteNewline();
    const Invocation::VectorArguments& inArgs = aInvocation.InputArguments();
    const TUint count = (TUint)inArgs.size();
    for (TUint i=0; i<count; i++) {
        iWriteBuffer.Write('<');
        const Brx& argName = inArgs[i]->Parameter().Name();
        iWriteBuffer.Write(argName);
        iWriteBuffer.Write('>');
        inArgs[i]->ProcessInput(*this);
        iWriteBuffer.Write('<');
        iWriteBuffer.Write('/');
        iWriteBuffer.Write(argName);
        iWriteBuffer.Write('>');
        iWriterAscii.WriteNewline();
    }
    iWriteBuffer.Write(kActionCloseStart);
    iWriteBuffer.Write(aInvocation.Action().Name());
    iWriteBuffer.Write('>');
    iWriterAscii.WriteNewline();
    iWriteBuffer.Write(kBodyClose);
    iWriterAscii.WriteNewline();
    iWriteBuffer.Write(kEnvelopeClose);
    iWriterAscii.WriteNewline();
    iWriteBuffer.WriteFlush();
}
Exemple #2
0
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;
}