/** * <code>VARIANT</code> for <code>([out] IDispatch*)</code>. This is not Thread Safe , hence a new instance must be taken each time. * <br/>Note that this must also be used when the interface pointer is a subclass of <code>IDispatch</code> i.e. supports automation (or is a * <code>dispinterface</code>). */ public static JIVariant OUT_IDISPATCH() { JIVariant retval = new JIVariant(new JIComObjectImpl(null, new JIInterfacePointer(null,-1,null)),true); retval.setFlag(JIFlags.FLAG_REPRESENTATION_IDISPATCH_NULL_FOR_OUT | JIFlags.FLAG_REPRESENTATION_SET_JIINTERFACEPTR_NULL_FOR_VARIANT); return retval; }
/** * @exclude */ void setAssociatedInterfacePointer(JIInterfacePointer interfacePointer) { isAlreadyExported = true; this.interfacePointer = new WeakReference(interfacePointer); String ipid = interfacePointer.getIPID().toUpperCase(); String iid = interfacePointer.getIID().toUpperCase(); IIDvsIpid.put(iid,ipid); ipidVsIID.put(ipid,iid); }
@Override public int getLengthInBytes ( final Object value, final int FLAG ) { return ( (JIInterfacePointer)value ).getLength (); } }
public String toString() { String retVal = "JIInterfacePointer[IID:" + getIID() + " , ObjRef: " + getObjectReference(JIInterfacePointer.OBJREF_STANDARD) + "]"; return retVal; }
JIInterfacePointerBody(String iid, JIInterfacePointer interfacePointer) { this.iid = iid; stdObjRef = (JIStdObjRef)interfacePointer.getObjectReference(JIInterfacePointer.OBJREF_STANDARD); resolverAddr = interfacePointer.getStringBindings(); length = 40 + 4 + 4 + 16 + resolverAddr.getLength(); }
super.getProperties().setProperty("rpc.socketTimeout", new Integer(session.getGlobalSocketTimeout()).toString()); JIStringBinding[] addressBindings = interfacePointer.getStringBindings().getStringBindings(); this.session = session; this.session.setTargetServer(getAddress().substring(getAddress().indexOf(":") + 1,getAddress().indexOf("["))); oxidResolver = new JIOxidResolver(((JIStdObjRef)interfacePointer.getObjectReference(JIInterfacePointer.OBJREF_STANDARD)).getOxid()); try { syntax = interfacePointer.getIID() + ":0.0";
@Override public String getIpid () { return this.ptr.getIPID (); }
this.dispIpid = ptr.getIPID (); this.dispOid = ptr.getOID (); this.dispRefs = ( (JIStdObjRef)ptr.getObjectReference ( JIInterfacePointer.OBJREF_STANDARD ) ).getPublicRefs ();
if ( !listOfFreeIPIDs.contains ( session.stub.getServerInterfacePointer ().getIPID () ) ) list.add ( session.prepareForReleaseRef ( session.stub.getServerInterfacePointer ().getIPID (), ( (JIStdObjRef)session.stub.getServerInterfacePointer ().getObjectReference ( JIInterfacePointer.OBJREF_STANDARD ) ).getPublicRefs () ) ); listOfFreeIPIDs.add ( session.stub.getServerInterfacePointer ().getIPID () ); mapOfOxidsVsJISessions.remove ( new JIOxid ( session.stub.getServerInterfacePointer ().getOXID () ) );
if (!JIInterfacePointer.isOxidEqual(stubPtr, ptr)) JISession newsession = JIFrameworkHelper.resolveSessionForOXID(ptr.getOXID()); if (newsession == null)
/** * Returns an Interface Pointer representation from raw bytes. * * @exclude * @param session * @param rawBytes * @return * @throws JIException */ public static IJIComObject instantiateComObject ( final JISession session, final byte[] rawBytes, final String ipAddress ) throws JIException { final NetworkDataRepresentation ndr = new NetworkDataRepresentation (); final NdrBuffer ndrBuffer = new NdrBuffer ( rawBytes, 0 ); ndr.setBuffer ( ndrBuffer ); ndrBuffer.length = rawBytes.length; //this is a brand new session. if ( session.getStub () == null ) { final JIComServer comServer = new JIComServer ( session, JIInterfacePointer.decode ( ndr, new ArrayList (), JIFlags.FLAG_REPRESENTATION_INTERFACEPTR_DECODE2, new HashMap () ), ipAddress ); return comServer.getInstance (); } else { final IJIComObject retval = instantiateComObject ( session, JIInterfacePointer.decode ( ndr, new ArrayList (), JIFlags.FLAG_REPRESENTATION_INTERFACEPTR_DECODE2, new HashMap () ) ); //increasing the reference count. retval.addRef (); return retval; } }
session.releaseRef(dispatch.getInterfacePointer().getIPID(),((JIStdObjRef)dispatch.getInterfacePointer().getObjectReference(JIInterfacePointer.OBJREF_STANDARD)).getPublicRefs());
if (!listOfFreeIPIDs.contains(session.stub.getServerInterfacePointer().getIPID())) list.add(session.prepareForReleaseRef(session.stub.getServerInterfacePointer().getIPID())); listOfFreeIPIDs.add(session.stub.getServerInterfacePointer().getIPID()); mapOfOxidsVsJISessions.remove(new JIOxid(session.stub.getServerInterfacePointer().getOXID()));
public String getInterfaceIdentifier() { return ptr.getIID(); }
static void addComObjectToSession(JISession session,IJIComObject comObject) { session.addToSession(comObject,comObject.internal_getInterfacePointer().getOID()); }
((JIInterfacePointer)value).encode(ndr,defferedPointers,FLAG); return;
/** * @exclude * @param IPID */ void addToSession ( final IJIComObject comObject, final byte[] oid ) { //nothing will be done if the session is being destroyed. if ( this.sessionInDestroy ) { return; } final IPID_SessionID_Holder holder = new IPID_SessionID_Holder ( comObject.getIpid (), getSessionIdentifier (), false, oid ); //mapOfObjects.put(new WeakReference(comObject,referenceQueueOfCOMObjects),holder); synchronized ( mapOfObjects ) { mapOfObjects.put ( new WeakReference ( comObject, referenceQueueOfCOMObjects ), holder ); } //setting if NO PING flag has been set to true. addToSession ( comObject.getIpid (), oid, ( (JIStdObjRef)comObject.internal_getInterfacePointer ().getObjectReference ( JIInterfacePointer.OBJREF_STANDARD ) ).getFlags () == 0x00001000 ); logger.info ( "for IID: {}", comObject.getInterfaceIdentifier () ); // Integer value = (Integer)mapOfIPIDSvsCount.get(comObject.getIpid()); // if (value == null) // { // mapOfIPIDSvsCount.put(comObject.getIpid(), new Integer(0)); // } // debug_addIpids(comObject.getIpid(),((JIStdObjRef)comObject.internal_getInterfacePointer().getObjectReference(JIInterfacePointer.OBJREF_STANDARD)).getPublicRefs()); }
JIStringBinding[] addressBindings = interfacePointer.getStringBindings().getStringBindings(); this.session = session; this.session.setTargetServer(getAddress().substring(getAddress().indexOf(":") + 1,getAddress().indexOf("["))); oxidResolver = new JIOxidResolver(((JIStdObjRef)interfacePointer.getObjectReference(JIInterfacePointer.OBJREF_STANDARD)).getOxid()); try { syntax = interfacePointer.getIID() + ":0.0";