INTEGRATION: CWS jl3 (1.11.88); FILE MERGED

2004/03/15 14:06:25 jl 1.11.88.2: RESYNC: (1.11-1.12); FILE MERGED
2003/12/10 14:10:02 sb 1.11.88.1: #114000# Fixed handling of method IDs (which are always unsigned).
This commit is contained in:
Kurt Zenker
2004-03-25 13:54:26 +00:00
parent 617e1a59d5
commit 800ef49ce3

View File

@@ -2,9 +2,9 @@
* *
* $RCSfile: urp.java,v $ * $RCSfile: urp.java,v $
* *
* $Revision: 1.12 $ * $Revision: 1.13 $
* *
* last change: $Author: hr $ $Date: 2004-02-03 13:12:36 $ * last change: $Author: kz $ $Date: 2004-03-25 14:54:26 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
@@ -97,7 +97,7 @@ import com.sun.star.uno.Type;
* from uno. The functionality is reachable through * from uno. The functionality is reachable through
* the <code>IProtocol</code> interface. * the <code>IProtocol</code> interface.
* <p> * <p>
* @version $Revision: 1.12 $ $ $Date: 2004-02-03 13:12:36 $ * @version $Revision: 1.13 $ $ $Date: 2004-03-25 14:54:26 $
* @author Kay Ramme * @author Kay Ramme
* @see com.sun.star.lib.uno.environments.remote.IProtocol * @see com.sun.star.lib.uno.environments.remote.IProtocol
* @since UDK1.0 * @since UDK1.0
@@ -233,12 +233,12 @@ public class urp extends Protocol {
private void readShortRequest(byte header, String operation[], Object param[][], boolean synchron[]) { private void readShortRequest(byte header, String operation[], Object param[][], boolean synchron[]) {
++ _requestsRecieved; ++ _requestsRecieved;
int methodId = 0; int methodId;
if ((header & DIR_MID) != 0) {
if((header & DIR_MID) != 0) methodId = ((header & 0x3F) << 8) | (_unmarshal.readbyte() & 0xFF);
methodId = (((header & 0x3f) << 8) | _unmarshal.readbyte()) & 0x3fff; } else {
else methodId = header & 0x3F;
methodId = (header & 0x3f); }
IMethodDescription iMethodDescription = _in_interface.getMethodDescription(methodId); IMethodDescription iMethodDescription = _in_interface.getMethodDescription(methodId);
operation[0] = iMethodDescription.getName(); operation[0] = iMethodDescription.getName();
@@ -265,12 +265,12 @@ public class urp extends Protocol {
synchron[0] = (exFlags & SYNCHRONOUSE) != 0; synchron[0] = (exFlags & SYNCHRONOUSE) != 0;
} }
// read the method id int methodId;
int methodId = 0; if ((header & LONGMETHODID) != 0) {
if((header & LONGMETHODID) != 0) // usigned short ? methodId = _unmarshal.readshort() & 0xFFFF;
methodId = _unmarshal.readshort(); } else {
else methodId = _unmarshal.readbyte() & 0xFF;
methodId = _unmarshal.readbyte(); }
if((header & NEWTYPE) != 0) if((header & NEWTYPE) != 0)
_in_interface = _unmarshal.readTypeDescription(); _in_interface = _unmarshal.readTypeDescription();
@@ -302,7 +302,6 @@ public class urp extends Protocol {
byte header = _unmarshal.readbyte(); byte header = _unmarshal.readbyte();
Class signature[]; Class signature[];
int methodId;
Object result = null; Object result = null;
if((header & BIG_HEADER) != 0) { // full header? if((header & BIG_HEADER) != 0) { // full header?
@@ -391,12 +390,22 @@ public class urp extends Protocol {
else else
mustReply[0] = synchron[0]; mustReply[0] = synchron[0];
// Long request headers can handle 16-bit method IDs, and short request
// headers can handle 14-bit method IDs:
int methodId = iMethodDescription.getIndex();
if (methodId < 0 || methodId >= 0x10000) {
throw new IllegalArgumentException(
"Method ID " + methodId + " out of range");
} else if (methodId >= 0xC000) {
bigHeader = true;
}
if(bigHeader) { // something has changed, send big header if(bigHeader) { // something has changed, send big header
header |= BIG_HEADER; // big header header |= BIG_HEADER; // big header
header |= REQUEST; header |= REQUEST;
header |= hasExFlags ? MOREFLAGS : 0; header |= hasExFlags ? MOREFLAGS : 0;
if(iMethodDescription.getIndex() > 255) if(methodId > 255)
header |= LONGMETHODID; header |= LONGMETHODID;
_marshal.writebyte(header); _marshal.writebyte(header);
@@ -411,10 +420,10 @@ public class urp extends Protocol {
} }
// write the method id // write the method id
if(iMethodDescription.getIndex() > 255) if(methodId > 255)
_marshal.writeshort((short)iMethodDescription.getIndex()); _marshal.writeshort((short)methodId);
else else
_marshal.writebyte((byte)iMethodDescription.getIndex()); _marshal.writebyte((byte)methodId);
if(zInterface != null) // has the interface changed? -> write it if(zInterface != null) // has the interface changed? -> write it
_marshal.writeTypeDescrption(zInterface); _marshal.writeTypeDescrption(zInterface);
@@ -426,14 +435,14 @@ public class urp extends Protocol {
_marshal.writeThreadId(threadId); _marshal.writeThreadId(threadId);
} }
else { // simple request else { // simple request
if(iMethodDescription.getIndex() <= 0x2f) // does the method id fit in the header? if(methodId <= 0x2f) // does the method id fit in the header?
_marshal.writebyte((byte)iMethodDescription.getIndex()); _marshal.writebyte((byte)methodId);
else { // no else { // no
header |= DIR_MID; header |= DIR_MID;
header |= iMethodDescription.getIndex() >> 8; header |= methodId >> 8;
_marshal.writebyte(header); _marshal.writebyte(header);
_marshal.writebyte((byte)(iMethodDescription.getIndex() & 0xff)); _marshal.writebyte((byte)(methodId & 0xff));
} }
} }