summaryrefslogtreecommitdiff
path: root/libjava/gnu/java/rmi/server/UnicastServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/gnu/java/rmi/server/UnicastServer.java')
-rw-r--r--libjava/gnu/java/rmi/server/UnicastServer.java17
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();