Remote Tea
Remote Tea Project Home Page on SourceForge.
This is a minor maintance release
The OSGi package bundle of the ONC/RPC runtime library now exports all of the ONC/RPC runtime packages.
This is a minor maintance release
The Maven packaging of the ONC/RPC runtime package has been changed to bundle, adding OSGi bundle information to the manifest.
This is a minor maintenance release.
The project has been converted into a Maven project. It has become a multi-module project, containing the modules oncrpc, jrpcgen, jportmap, maven-plugin and information. The transition into a Maven project intends on:
However, the Ant-Build of Remote Tea is still supported and will at least get in charge to create the release zip files, which will be continued to be uploaded to SourceForge.
This is a minor feature/maintenance release.
nullproc()
as a convenient way
to launch null procedure calls.setClient()
. Besides, a previously used ONC/RPC client instance will be closed by
this method.-t | create TCP server only |
-u | create UDP server only |
-noxdr | do not create XDR datatype classes |
struct MyStructure { int x; int y; }; typedef struct MyStructure MyStructure;
typedef
caused an error recognizing a duplicate identifier. Such a typedef
is now
recognized and silently ignored.typedef struct MyStructure TMyStructure;
class TMyStructure { public MyStructure value; ... }
You already guessed it: minor update/maintenance release.
OncRpcException.RPC_CANNOTREGISTER
will now be thrown if the local portmapper
denies port registration.This is again a minor update/maintenance release.
This is a minor update/maintenance release.
build.xml
Ant script to include also exactly this
build file in the source code zip which gets uploaded to Source Forge.It has been a long time since the previous release ... but yes, I finally managed to pick up the patches sent and rolled them into the new release. Many things changed in the meantime so I'm glad I got this release out of the door at all. My new employer throws all kind of really interesting tasks at me, so RemoteTea is now a really low profile project to me. If volunteers will step forward to maintain RemoteTea I would be glad to welcome them aboard the RemoteTea project.
-bean
to jrpcgen
for generating accessors (setters and getters)
for all elements in a structure. Option -bean
also implies
-ser
. This feature bases on a patch from Ralph Neff.jrpcgen
now also accepts .x files without a
program section. In this case no stub classes are generated, but
Java source code files for all structures, enums, et cetera are still
generated. This feature bases on a patch from Bialas Krzysztof.jrpcgen.jar
.This release marks my movement from the website of the good old
Chair of Process Control Engineering to Sourceforge. Since
Remote Tea
has now quite some users, it was time to put the
project on its own feet. Let's see where this will lead to.
helloto the new Eclipse project files. With the switch to Eclipse we now have a free IDE for a free ONC/RPC package and if you use ClassPath and an appropriate VM, then the whole thing is free.
EclipseIDE, but also other
smart asses.
OncRpcClient
class now has a pair of accessors
setCharacterEncoding(encoding)
and
getCharacterEncoding()
. Similiar, OncRpcServerStub
gives control over character encoding on the server side.todowork done, so that jrpcgen now emits more useful information in the javadoc tags for remote procedure parameters and results.
call$
and of type
OncRpcCallInformation
.NullPointerExceptions
. Many thanks to Michael Smith for
hunting down this one. Classes concerned are
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.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...).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).featurein
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.org.acplt.oncrpc.ant.JrpcgenTask
, kindly provided by
Jean-Francois Daune. This also involved some small changes to jrpcgen in order to make it available as a
task.test caseto
demo.x
.serialVersionUID
using the
SHA-1 algorithm. (My thanks to the GNU classpath project for
providing the SHA-1 algorithm, please see
Jrpcgen.SHA.java
for license details).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.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 defaultversion 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).OncRpcServerStub
methods public
(instead of protected), to give derived server classes more control
over the way they spin up and down.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.AUTH_NONE
on
the server side in OncRpcServerAuth.xdrNew
when
recycling the AUTH_NONE
handler singleton.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.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.Tea TunnelApache DSO module, which
untunnelscalls and forwards them to the appropriate ONC/RPC server using direct TCP/IP or UDP/IP connections (or non-connections in the case of UDP/IP).
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.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.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
.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).optional datain ONC/RPC babble. Also added a new test case to the demo.x file.
broadcastCall
of method
in class OncRpcUdpClient
.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.
xdrDecodeOpaque(int)
and
xdrDecodeOpaque(byte[],int,int)
. This cures the bug
where a XDR string being the last piece of information in a RPC call
or reply could not be read successfully.org.acplt.oncrpc.OncRpcConstants
, which
contains versioning information.Remote Teafrom the ACPLTea package. As the ONC/RPC implementation is pretty functional the version number was changed to reflect this.