CVS info: $Revision: 1.1 $ $Date: 2003/02/25 21:50:08 $ $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: