View | Details | Raw Unified | Return to issue 116038
Collapse All | Expand All

(-)a/binaryurp/source/bridge.cxx (+11 lines)
Lines 556-561 Link Here
556
    bool setter, std::vector< BinaryAny > const & inArguments,
556
    bool setter, std::vector< BinaryAny > const & inArguments,
557
    BinaryAny * returnValue, std::vector< BinaryAny > * outArguments)
557
    BinaryAny * returnValue, std::vector< BinaryAny > * outArguments)
558
{
558
{
559
    if (member.get()->eTypeClass == typelib_TypeClass_INTERFACE_METHOD &&
560
        (reinterpret_cast< typelib_InterfaceMethodTypeDescription * >(
561
            member.get())->
562
         bOneWay))
563
    {
564
        AttachThread att(threadPool_);
565
        sendRequest(
566
            att.getTid(), oid, css::uno::TypeDescription(), member,
567
            inArguments);
568
        return false;
569
    }
559
    std::auto_ptr< IncomingReply > resp;
570
    std::auto_ptr< IncomingReply > resp;
560
    {
571
    {
561
        AttachThread att(threadPool_);
572
        AttachThread att(threadPool_);
(-)a/binaryurp/source/writer.cxx (-9 / +2 lines)
Lines 217-223 Link Here
217
    OSL_ASSERT(tid.getLength() != 0 && oid.getLength() != 0 && member.is());
217
    OSL_ASSERT(tid.getLength() != 0 && oid.getLength() != 0 && member.is());
218
    css::uno::TypeDescription t(type);
218
    css::uno::TypeDescription t(type);
219
    sal_Int32 functionId = 0;
219
    sal_Int32 functionId = 0;
220
    bool forceSynchronous = false;
221
    member.makeComplete();
220
    member.makeComplete();
222
    switch (member.get()->eTypeClass) {
221
    switch (member.get()->eTypeClass) {
223
    case typelib_TypeClass_INTERFACE_ATTRIBUTE:
222
    case typelib_TypeClass_INTERFACE_ATTRIBUTE:
Lines 249-256 Link Here
249
            t.makeComplete();
248
            t.makeComplete();
250
            functionId = mtd->pInterface->pMapMemberIndexToFunctionIndex[
249
            functionId = mtd->pInterface->pMapMemberIndexToFunctionIndex[
251
                mtd->aBase.nPosition];
250
                mtd->aBase.nPosition];
252
            forceSynchronous = mtd->bOneWay &&
253
                functionId != SPECIAL_FUNCTION_ID_RELEASE;
254
            break;
251
            break;
255
        }
252
        }
256
    default:
253
    default:
Lines 268-286 Link Here
268
    bool newType = !(lastType_.is() && t.equals(lastType_));
265
    bool newType = !(lastType_.is() && t.equals(lastType_));
269
    bool newOid = oid != lastOid_;
266
    bool newOid = oid != lastOid_;
270
    bool newTid = tid != lastTid_;
267
    bool newTid = tid != lastTid_;
271
    if (newType || newOid || newTid || forceSynchronous || functionId > 0x3FFF)
268
    if (newType || newOid || newTid || functionId > 0x3FFF)
272
        // > 14 bit function ID
269
        // > 14 bit function ID
273
    {
270
    {
274
        Marshal::write8(
271
        Marshal::write8(
275
            &buf,
272
            &buf,
276
            (0xC0 | (newType ? 0x20 : 0) | (newOid ? 0x10 : 0) |
273
            (0xC0 | (newType ? 0x20 : 0) | (newOid ? 0x10 : 0) |
277
             (newTid ? 0x08 : 0) | (functionId > 0xFF ? 0x04 : 0) |
274
             (newTid ? 0x08 : 0) | (functionId > 0xFF ? 0x04 : 0)));
278
             (forceSynchronous ? 0x01 : 0)));
279
            // bit 7: LONGHEADER, bit 6: REQUEST, bit 5: NEWTYPE, bit 4: NEWOID,
275
            // bit 7: LONGHEADER, bit 6: REQUEST, bit 5: NEWTYPE, bit 4: NEWOID,
280
            // bit 3: NEWTID, bit 2: FUNCTIONID16, bit 0: MOREFLAGS
276
            // bit 3: NEWTID, bit 2: FUNCTIONID16, bit 0: MOREFLAGS
281
        if (forceSynchronous) {
282
            Marshal::write8(&buf, 0xC0); // bit 7: MUSTREPLY, bit 6: SYNCHRONOUS
283
        }
284
        if (functionId <= 0xFF) {
277
        if (functionId <= 0xFF) {
285
            Marshal::write8(&buf, static_cast< sal_uInt8 >(functionId));
278
            Marshal::write8(&buf, static_cast< sal_uInt8 >(functionId));
286
        } else {
279
        } else {

Return to issue 116038