CVS info: $Revision: 1.1 $ $Date: 2005/03/08 23:50:47 $ $State: Exp $ $Locker: $
Change Log
Version 1.0.1:
jrpcgen, which emitted wrong stub code when a
remote function contained more than one parameter: in this case, enumerations
were not properly coerced to integers (thanks to Michael Smith for pointing
this out and at the same time supplying the patch).
jrpcgen, which resulted in some (enumeration)
constants not being dumped.
Version 1.0.0:
jrpcgen now
emits serialization and deserialization code which uses an iteration loop instead
of tail recursion. The benefit of this is that the call stack usage is considerably
reduced. Of course, this optimization can only be applied if the reference to the
same type is the last element of the structure.
OncRpcTcpConnectionServerTransport,
OncRpcTcpServerTransport and OncRpcUdpServerTransport.
main and jrpcgen stumbled on an error. This
allows jrpcgen to be used in classic make projects. The Apache Ant is not
affected by this behavior.
OncRpcTcpServerTransport
and OncRpcUdpServerTransport. It accepts now a local binding address.
The server socket is then bound only to this/these local address(es).
In addition, jrpcgen now emits source code for server stubs with
an additional constructor which accepts the additional binding address.
Version 0.95.2:
OncRpcTcpSocketHelper.connect() to accept
a negative timeout that signals to use the particular implementation-specific
timeout value.
OncRpcTcpClient, which accepts a
timeout parameter (in milliseconds) as its last argument. This constructor
can be used to limit the connection attempt period and finally makes the
timeout functionality available which has been implemented in the 0.95.1 release.
It is important to note that the timeout specified as the parameter to the
constructor does not apply to later ONC/RPC calls. These are controlled as usual
through the existing timeout-related accessors.
OncRpcPortmapClient a stand-alone class, which is not derived
from OncRpcUdpClient any more. This now allows applications to contact
the portmapper either using UDP/IP or TCP/IP (HTTP not yet supported).
OncRpcConstants (I had
forgotten to do so for the previous releases...).
Version 0.95.1:
After a long time (and a Ph.D. thesis on metamodelling for communication in operational process control engineering now written and on its way) I've finally managed to get a new RemoteTea release out of the door.
The socket helper object features a connect method which
can execute timeout-controlled connection
establishment. In case the current VM Remote Tea is running
on does not provide a proper implementation, Remote Tea resorts to the
following algorithm:
connect method creates a new thread which in turn tries
to connect to the given port at the given host (an instance of the local class
Connectiator is responsible for this).
connect method. In case the Connectiator does not succeed within
the timeout period, an IOException is thrown by the
connect method.
getIOException method then either
returns null or an IOException.
XdrDecodingStream.xdrDecodeLong(), where
unwanted sign extension messed up 64 bit wide integers (XDR hypers).
XdrTcpDecodingStream.fill(),
which caused invalid header decoding if the fragment length was larger than
227.
XdrTcpDecodingStream
semantics of the fill method were slightly changed to return also in
case of empty trailing record (lastFragment attribute must be
true). All methods directly calling fill have been
adapted (at least I hope so).
XdrHttpDecodingStream, for which patches were kindly offered
by the austrian internet chamoises.
Version 0.94.2:
Version 0.94.1:
-ser: tag classes generated for XDR structs, XDR unions
and XDR typedefs as serializable. Also automatically generates
serialVersionUID using the SHA-1 algorithm. (My thanks to
the GNU classpath project for
providing the SHA-1 algorithm, please see
JrpcgenSHA.java
for license details).
-initstrings: automatically initialize all
Strings as empty strings (""). Note that this may lead
to lazy programming; better make explicitly sure that every member
of a struct gets initialized properly before encoding the struct.
Version 0.93.1:
OncRpcTcpServerTransport.TransportList).
InetAddress.getLocalHost. The code now uses
InetAdress.getByName("127.0.0.1"). Yeah, write once, does not
work anywhere.
client.call method which expects an additional
(procedure/protocol) version number as its second argument. This method is
necessary so several versions can coexists peacefully in one client and can
be called simultaneously. As before, if you do not specify a version in the
call to client.call the "default" version is used as specified in
the constructor. Please note that OncRpcClient-derived classes
must now implement the overloaded call method expecting four
parameters: procedure number, version number, parameters, and result (this
only applies to those who want to implement their own ONC/RPC clients for
different transports than those already provided).
Version 0.92.1:
jrpcgen now emits a second constructor expecting the port
number to bind transports to as its solely parameter. This allows server
writers to bind their servers to well-known ports.
jportmap and an embedded portmap service class.
It can be used by standalone applications which should also be useable if the
user has not installed a portmap service.
I must have been bored or insane. Or both.
OncRpcServerStub methods public (instead of
protected), to give derived server classes more control over the way they
spin up and down.
Version 0.91.2:
OncRpcTcpSocket. So
much for almost not testing the release. To fix this stupid design bug the
classes OncRpcTcpSocket and OncRpcUdpSocket were
moved to OncRpcTcpSocketHelper and
OncRpcUdpSocketHelper. They now merely support Socket
and DatagramSocket instead of inheriting from them. This avoids
the endless reflection method invocation loop, but is still cheaper in terms
of method invocation performance than a wrapper class.
Version 0.91.1:
AUTH_NONE on the server
side in OncRpcServerAuth.xdrNew when recycling the
AUTH_NONE handler singleton.
jrpcgen
generated server stubs. The constructor of a server stub class now only
creates the transport objects and sets the public transports field
within class OncRpcServerStub. Registering with the portmapper as
well as dispatching calls is now done within the run() method
(note: without any parameters). You need to change your code accordingly by
inserting a call to run(), otherwise the server will not start.
MyServer myserver = new MyServer();
myserver.run();
java",
some files were moved. The JBuilder project files have been moved to the
projects/ subdirectory.
demo.x
example now tests some pathological cases.
addElement instead of add when adding objects to a
Vector.
readme-first/ which should be more obvious to first-time users of
the RemoteTea source code and does not clobber the projects/
directory any more.
NullPointerException in OncRpcTcpClient
and OncRpcUdpClient when checking for rejected credentials
-- and I thought Java had no pointers.
jrpcgen: support for short form unsigned
in addition to unsigned int (compatibility with
rpcgen). Handling of octal numbers added (okay, it is still a valid
number format). Fixed bug in the code generation of desciminated unions using
booleans. Support for more than one program definition within the same x-file.
In this case the source code files generated for the client and server stubs
are named <x-filename><program-id>Client.java and
<x-filename><program-id>Server.java, respectively.
org.acplt.oncrpc.web containing helper
classes for HTTP client connections (HttpClientConnection), and
base64 encoding and decoding (Base64), as well as some other
stuff.
OncRpcHttpClient, which stands in the
tradition of OncRpcClient and implements sending ONC/RPC calls
through HTTP tunnels. Also added XdrHttpDecodingStream, which can
pull base64 encoded data from a web server and provide the decoded data through
the usual decoding XDR stream interface.
Version 0.90.1:
XdrEncodingStream.xdrEncodeByteFixedVector() which
falsely encoded length information about the following array of characters.
I should take more care when doing "Italian code recycling" using copy &
pasta...
OncRpcTcpClient.call() which caused XDR
buffer underflows when receiving the next reply after the previous reply
has been rejected by an ONC/RPC server.
org.acplt.oncrpc to put it
in sync with (de-) serializing fixed-size vectors and dynamic and fixed vectors
of characters.
AUTH_UNIX authentication. For this to achieve quite
some additions and changes were necessary -- luckily, old applications will
not be broken, as the changes are deep within the RemoteTea package:
OncRpcClientAuth, OncRpcClientAuthNone and
OncRpcClientAuthUnix were added.
OncRpcReplyMessage and OncRpcCallMessage are now
both abstract. This was necessary because ONC/RPC protocol issues make it
necessary to handle authentication through so-called authentication protocol
handling objects different on the client side than on the server side.
Additional classes now handle sending calls and receiving replies on the
client side (OncRpcClientCallMessage and
OncRpcClientReplyMessage respectively), as well as on the
server side (OncRpcServerCallMessage and
OncRpcServerReplyMessage). According to their needs, these new
classes only declare those encoding and decoding methods which are really
needed. In consequence, the base class OncRpcCallMessage has lost
its XdrAble interface completely.
OncRpcUdpClient and OncRpcTcpClient, as well as
to the base class OncRpcClient.
callMessage.auth attribute of the OncRpcCallInformation
delivered with each incomming ONC/RPC call. See
tests.org.acplt.oncrpc.ServerTest.java for an example.
AUTH_DES is still not supported, as this needs
quite some things to be done and I don't have full information about the
AUTH_DES protocol.
XdrBufferEncodingStream and
XdrBufferDecodingStream for encoding and decoding XDR data from
and to a fixed-size buffer. These classes comes in handy when dealing with
shorthand credentials.
XdrDynamicOpaque to handle variable-sized
vectors of bytes.
org.acplt.oncrpc.apps.jrpcgen,
because it's an application belonging very tight to ONC/RPC.
OncRpcConstants.REMOTETEA_VERSION_PREVERSION,
which indicates preversions if not zero.
Version 0.86.1:
char<> as a series of
characters, each one sitting happily in its very own XDR int (that is,
four bytes), the two methods XdrDecodingStream.xdrDecodeBytes()
and XdrEncodingStream.xdrEncodeBytes() were renamed to
XdrDecodingStream.xdrDecodeByteVector()
and XdrEncodingStream.xdrEncodeByteVector() as well as their
semantics changed accordingly.
XdrDecodingStream.xdrDecodeDynamicOpaque(),
XdrEncodingStream.xdrEncodeDynamicOpaque(),
XdrDecodingStream.xdrDecodeByteFixedVector() and
XdrEncodingStream.xdrEncodeByteFixedVector().
XdrDecodingStream and XdrEncodingStream
finally final. Maybe this helps Java compilers improve code
speed. Maybe.
XdrDecodingStream
and XdrEncodingStream.
Version 0.85.1:
readBuffer() to class
XdrTcpDecodingStream. This fixes problems when reading from
a TCP/IP stream and not all bytes wanted are immediately available, thus
stream.read() returning not all bytes at once (shame on me
for not reading the java.io documentation attentive enough).
Version 0.84.1:
Version 0.83.1:
Version 0.82.1:
Version 0.81.1:
broadcastCall of method in class OncRpcUdpClient.
jrpcgen. Sun's documentation on the rpcgen
syntax and grammar is rather thin and sometimes inaccurate. As always, I had to resort
to RTSL ("Read The Source, Luke!") to find out what syntax and grammar rpcgen
does in fact use. Please give it a try and report problems. Note that there
is no preprocessor step.
Version 0.80.2:
Version 0.80.1:
Version 0.35.1 and before: