3.2.4.1.2.3.2 Updating the OID/IPID/Resolver Tables After Unmarshaling

  • The client MUST look up the IPID entry in the IPID table using the IPID contained in the STDOBJREF of the object reference.

    • If the entry is found, the client MUST add the public reference count from the STDOBJREF to the public reference count in the IPID entry.

      • If the STDOBJREF contains a public reference count of 0, the client MUST obtain additional references on the interface using the steps specified in section 3.2.4.4.1.

    • If the entry is not found, the client MUST add an entry to the IPID table as follows:

      • The client MUST set the IPID, OXID, and OID in the IPID entry to the corresponding values contained in the STDOBJREF.

      • The client MUST set the IID to the IID in the OBJREF.

      • The client MUST set the public reference count to that contained in the STDOBJREF.

      • If the STDOBJREF contains a public reference count of zero, the client MUST obtain additional references on the interface using the steps specified in section 3.2.4.4.1.

      • The client MUST set the private reference counts to zero.

  • The client MUST look up the OID entry in the OID table using the OID contained in the STDOBJREF of the object reference.

    • If the OID entry is found, and if the IPID is not present in the IPID list of the OID entry, the client MUST add the IPID to the IPID list of the OID entry.

    • If the OID entry is not found, the client MUST add an entry to the OID table as follows:

      • The client MUST set the OID to the value of the OID contained in the STDOBJREF of the object reference.

      • The client MUST add the IPID contained in the STDOBJREF of the object reference to the IPID list.

      • The client MUST set the garbage_collection flag to True if STDOBJREF does not contain the SORF_NOPING flag.

      • The client MUST store the STRINGBINDING hash of the saResAddr field in the STDOBJREF to the OID entry.

      • The client MUST look up the STRINGBINDING hash in the Resolver table. If the table entry is not found, the client MUST add an entry to the Resolver table, including the hash key and the RPC binding information used for the activation request or the OXID resolution request. The client MUST set the SETID to 0 in the Resolver table entry.