diff options
Diffstat (limited to 'libjava/gnu/java/rmi/server/UnicastServer.java')
| -rw-r--r-- | libjava/gnu/java/rmi/server/UnicastServer.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libjava/gnu/java/rmi/server/UnicastServer.java b/libjava/gnu/java/rmi/server/UnicastServer.java index fb6ec1f35a5..ace43f01861 100644 --- a/libjava/gnu/java/rmi/server/UnicastServer.java +++ b/libjava/gnu/java/rmi/server/UnicastServer.java @@ -99,13 +99,19 @@ public static void dispatch(UnicastConnection conn) throws Exception { case MESSAGE_CALL: incomingMessageCall(conn); break; + case MESSAGE_PING: + // jdk sends a ping before each method call -> answer it! + DataOutputStream out = conn.getDataOutputStream(); + out.writeByte(MESSAGE_PING_ACK); + out.flush(); + break; default: throw new Exception("bad method type"); } } private static void incomingMessageCall(UnicastConnection conn) throws IOException { - ObjectInputStream in = conn.getObjectInputStream(); + ObjectInputStream in = conn.startObjectInputStream(); // (re)start ObjectInputStream ObjID objid = ObjID.read(in); int method = in.readInt(); @@ -138,13 +144,18 @@ private static void incomingMessageCall(UnicastConnection conn) throws IOExcepti conn.getDataOutputStream().writeByte(MESSAGE_CALL_ACK); - ObjectOutputStream out = conn.getObjectOutputStream(); + ObjectOutputStream out = conn.startObjectOutputStream(); // (re)start ObjectOutputStream out.writeByte(returncode); (new UID()).write(out); + + //System.out.println("returnval=" + returnval + " returncls=" + returncls); + if(returnval != null && returncls != null) ((RMIObjectOutputStream)out).writeValue(returnval, returncls); - else if (!(returnval instanceof RMIVoidValue)) + + // 1.1/1.2 void return type detection: + else if (!(returnval instanceof RMIVoidValue || returncls == Void.TYPE)) out.writeObject(returnval); out.flush(); |
