|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
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; |
|
} |
|
|
|
} |