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:
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user