| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package sun.rmi.transport;  | 
 | 
 | 
 | 
import sun.rmi.transport.tcp.TCPConnection;  | 
 | 
 | 
 | 
import java.io.IOException;  | 
 | 
import java.rmi.dgc.Lease;  | 
 | 
import java.rmi.dgc.VMID;  | 
 | 
import java.rmi.server.UID;  | 
 | 
import java.util.ArrayList;  | 
 | 
 | 
 | 
import sun.misc.ObjectInputFilter;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
@SuppressWarnings({"deprecation", "serial"}) | 
 | 
public final class DGCImpl_Stub  | 
 | 
        extends java.rmi.server.RemoteStub  | 
 | 
        implements java.rmi.dgc.DGC { | 
 | 
    private static final java.rmi.server.Operation[] operations = { | 
 | 
            new java.rmi.server.Operation("void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean)"), | 
 | 
            new java.rmi.server.Operation("java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)") | 
 | 
    };  | 
 | 
 | 
 | 
    private static final long interfaceHash = -669196253586618813L;  | 
 | 
 | 
 | 
      | 
 | 
    private static int DGCCLIENT_MAX_DEPTH = 6;  | 
 | 
 | 
 | 
      | 
 | 
    private static int DGCCLIENT_MAX_ARRAY_SIZE = 10000;  | 
 | 
 | 
 | 
      | 
 | 
    public DGCImpl_Stub() { | 
 | 
        super();  | 
 | 
    }  | 
 | 
 | 
 | 
    public DGCImpl_Stub(java.rmi.server.RemoteRef ref) { | 
 | 
        super(ref);  | 
 | 
    }  | 
 | 
 | 
 | 
    // methods from remote interfaces  | 
 | 
 | 
 | 
      | 
 | 
    public void clean(java.rmi.server.ObjID[] $param_arrayOf_ObjID_1, long $param_long_2, java.rmi.dgc.VMID $param_VMID_3, boolean $param_boolean_4)  | 
 | 
            throws java.rmi.RemoteException { | 
 | 
        try { | 
 | 
            StreamRemoteCall call = (StreamRemoteCall)ref.newCall((java.rmi.server.RemoteObject) this,  | 
 | 
                    operations, 0, interfaceHash);  | 
 | 
            call.setObjectInputFilter(DGCImpl_Stub::leaseFilter);  | 
 | 
            try { | 
 | 
                java.io.ObjectOutput out = call.getOutputStream();  | 
 | 
                out.writeObject($param_arrayOf_ObjID_1);  | 
 | 
                out.writeLong($param_long_2);  | 
 | 
                out.writeObject($param_VMID_3);  | 
 | 
                out.writeBoolean($param_boolean_4);  | 
 | 
            } catch (java.io.IOException e) { | 
 | 
                throw new java.rmi.MarshalException("error marshalling arguments", e); | 
 | 
            }  | 
 | 
            ref.invoke(call);  | 
 | 
            ref.done(call);  | 
 | 
        } catch (java.lang.RuntimeException e) { | 
 | 
            throw e;  | 
 | 
        } catch (java.rmi.RemoteException e) { | 
 | 
            throw e;  | 
 | 
        } catch (java.lang.Exception e) { | 
 | 
            throw new java.rmi.UnexpectedException("undeclared checked exception", e); | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
    public java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[] $param_arrayOf_ObjID_1, long $param_long_2, java.rmi.dgc.Lease $param_Lease_3)  | 
 | 
            throws java.rmi.RemoteException { | 
 | 
        try { | 
 | 
            StreamRemoteCall call =  | 
 | 
                    (StreamRemoteCall)ref.newCall((java.rmi.server.RemoteObject) this,  | 
 | 
                            operations, 1, interfaceHash);  | 
 | 
            call.setObjectInputFilter(DGCImpl_Stub::leaseFilter);  | 
 | 
            try { | 
 | 
                java.io.ObjectOutput out = call.getOutputStream();  | 
 | 
                out.writeObject($param_arrayOf_ObjID_1);  | 
 | 
                out.writeLong($param_long_2);  | 
 | 
                out.writeObject($param_Lease_3);  | 
 | 
            } catch (java.io.IOException e) { | 
 | 
                throw new java.rmi.MarshalException("error marshalling arguments", e); | 
 | 
            }  | 
 | 
            ref.invoke(call);  | 
 | 
            java.rmi.dgc.Lease $result;  | 
 | 
            Connection connection = call.getConnection();  | 
 | 
            try { | 
 | 
                java.io.ObjectInput in = call.getInputStream();  | 
 | 
 | 
 | 
                $result = (java.rmi.dgc.Lease) in.readObject();  | 
 | 
            } catch (ClassCastException | IOException | ClassNotFoundException e) { | 
 | 
                if (connection instanceof TCPConnection) { | 
 | 
                      | 
 | 
                    ((TCPConnection) connection).getChannel().free(connection, false);  | 
 | 
                }  | 
 | 
                call.discardPendingRefs();  | 
 | 
                throw new java.rmi.UnmarshalException("error unmarshalling return", e); | 
 | 
            } finally { | 
 | 
                ref.done(call);  | 
 | 
            }  | 
 | 
            return $result;  | 
 | 
        } catch (java.lang.RuntimeException e) { | 
 | 
            throw e;  | 
 | 
        } catch (java.rmi.RemoteException e) { | 
 | 
            throw e;  | 
 | 
        } catch (java.lang.Exception e) { | 
 | 
            throw new java.rmi.UnexpectedException("undeclared checked exception", e); | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    private static ObjectInputFilter.Status leaseFilter(ObjectInputFilter.FilterInfo filterInfo) { | 
 | 
 | 
 | 
        if (filterInfo.depth() > DGCCLIENT_MAX_DEPTH) { | 
 | 
            return ObjectInputFilter.Status.REJECTED;  | 
 | 
        }  | 
 | 
        Class<?> clazz = filterInfo.serialClass();  | 
 | 
        if (clazz != null) { | 
 | 
            while (clazz.isArray()) { | 
 | 
                if (filterInfo.arrayLength() >= 0 && filterInfo.arrayLength() > DGCCLIENT_MAX_ARRAY_SIZE) { | 
 | 
                    return ObjectInputFilter.Status.REJECTED;  | 
 | 
                }  | 
 | 
                  | 
 | 
                clazz = clazz.getComponentType();  | 
 | 
            }  | 
 | 
            if (clazz.isPrimitive()) { | 
 | 
                  | 
 | 
                return ObjectInputFilter.Status.ALLOWED;  | 
 | 
            }  | 
 | 
            return (clazz == UID.class ||  | 
 | 
                    clazz == VMID.class ||  | 
 | 
                    clazz == Lease.class ||  | 
 | 
                    (Throwable.class.isAssignableFrom(clazz) &&  | 
 | 
                            clazz.getClassLoader() ==  | 
 | 
                            Object.class.getClassLoader()) ||  | 
 | 
                    clazz == StackTraceElement.class ||  | 
 | 
                    clazz == ArrayList.class ||       | 
 | 
                    clazz == Object.class ||  | 
 | 
                    clazz.getName().equals("java.util.Collections$UnmodifiableList") || | 
 | 
                    clazz.getName().equals("java.util.Collections$UnmodifiableCollection") || | 
 | 
                    clazz.getName().equals("java.util.Collections$UnmodifiableRandomAccessList")) | 
 | 
                    ? ObjectInputFilter.Status.ALLOWED  | 
 | 
                    : ObjectInputFilter.Status.REJECTED;  | 
 | 
        }  | 
 | 
          | 
 | 
        return ObjectInputFilter.Status.UNDECIDED;  | 
 | 
    }  | 
 | 
 | 
 | 
}  |