All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jinterop.dcom.core.JIOxidResolver Maven / Gradle / Ivy

There is a newer version: 3.5.1
Show newest version
/** j-Interop (Pure Java implementation of DCOM protocol)
 * Copyright (C) 2007  Vikram Roopchand
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3.0 of the License, or (at your option) any later version.
 *
 * Though a sincere effort has been made to deliver a professional,
 * quality product,the library itself is distributed WITHOUT ANY WARRANTY;
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 */
package org.jinterop.dcom.core;

import java.util.ArrayList;
import ndr.NdrException;
import ndr.NdrObject;
import ndr.NetworkDataRepresentation;
import org.jinterop.dcom.common.JIComVersion;
import org.jinterop.dcom.common.JIRuntimeException;
import org.jinterop.dcom.common.JISystem;
import rpc.core.UUID;

/**
 * Partially implements IOxidResolver interface, used only for ResolveOxid
 * calls.
 *
 *
 * @since 1.23
 *
 */
final class JIOxidResolver extends NdrObject {

    private final byte[] oxid;

    private JIDualStringArray oxidBindings = null;
    private String ipid = null;

    JIOxidResolver(final byte[] oxid) {
        this.oxid = oxid;
    }

    @Override
    public int getOpnum() {
        return 4;
    }

    @Override
    public void write(NetworkDataRepresentation ndr) {
        JIMarshalUnMarshalHelper.writeOctetArrayLE(ndr, oxid);
        JIMarshalUnMarshalHelper.serialize(ndr, Short.class, new Short((short) 1), new ArrayList(), JIFlags.FLAG_NULL);
        JIMarshalUnMarshalHelper.serialize(ndr, JIArray.class, new JIArray(new Short[]{new Short((short) 7)}, true), new ArrayList(), JIFlags.FLAG_REPRESENTATION_ARRAY);
    }

    @Override
    public void read(NetworkDataRepresentation ndr) {
        ndr.readUnsignedLong(); //pointer
        ndr.readUnsignedLong(); //some length component, irrelevant for us right now
        oxidBindings = JIDualStringArray.decode(ndr);
        try {
            UUID ipid2 = new UUID();
            ipid2.decode(ndr, ndr.getBuffer());
            ipid = (ipid2.toString());
        } catch (NdrException e) {

            JISystem.getLogger().throwing("JIRemActivation", "read", e);
        }

        //read the auth hint
        int authenticationHint = ndr.readUnsignedLong();

        JIComVersion comVersion = new JIComVersion();
        comVersion.setMajorVersion(ndr.readUnsignedShort());
        comVersion.setMinorVersion(ndr.readUnsignedShort());

        int hresult = ndr.readUnsignedLong();

        if (hresult != 0) {
            //System.out.println("EXCEPTION FROM SERVER ! --> " + "0x" + Long.toHexString(hresult).substring(8));
            throw new JIRuntimeException(hresult);
        }

    }

    JIDualStringArray getOxidBindings() {
        return oxidBindings;
    }

    String getIPID() {
        return ipid;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy