Package org.acplt.oncrpc.server
Class OncRpcTcpConnectionServerTransport
java.lang.Object
org.acplt.oncrpc.server.OncRpcServerTransport
org.acplt.oncrpc.server.OncRpcTcpConnectionServerTransport
Instances of class
OncRpcTcpServerTransport encapsulate
TCP/IP-based XDR streams of ONC/RPC servers. This server transport class
is responsible for receiving ONC/RPC calls over TCP/IP.- Version:
- $Revision: 1.5 $ $Date: 2008/01/02 15:13:35 $ $State: Exp $ $Locker: $
- Author:
- Harald Albrecht
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intTimeout during the phase where data is received within calls, or data is sent within replies.Fields inherited from class org.acplt.oncrpc.server.OncRpcServerTransport
dispatcher, info, port -
Constructor Summary
ConstructorsConstructorDescriptionOncRpcTcpConnectionServerTransport(OncRpcDispatchable dispatcher, Socket socket, int program, int version, int bufferSize, OncRpcTcpServerTransport parent, int transmissionTimeout) Create a new instance of aOncRpcTcpSConnectionerverTransportwhich encapsulates TCP/IP-based XDR streams of an ONC/RPC server.OncRpcTcpConnectionServerTransport(OncRpcDispatchable dispatcher, Socket socket, OncRpcServerTransportRegistrationInfo[] info, int bufferSize, OncRpcTcpServerTransport parent, int transmissionTimeout) Create a new instance of aOncRpcTcpSConnectionerverTransportwhich encapsulates TCP/IP-based XDR streams of an ONC/RPC server. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidbeginEncoding(OncRpcCallInformation callInfo, OncRpcServerReplyMessage state) Begins the sending phase for ONC/RPC replies.voidclose()Close the server transport and free any resources associated with it.protected voidFinishes call parameter deserialization.protected voidFinishes encoding the reply to this ONC/RPC call.protected voidfinalize()Finalize object by making sure that we're removed from the list of open transports which our parent transport maintains.Get the character encoding for (de-)serializing strings.protected XdrDecodingStreamReturns XDR stream which can be used for deserializing the parameters of this ONC/RPC call.protected XdrEncodingStreamReturns XDR stream which can be used for eserializing the reply to this ONC/RPC call.voidlisten()Creates a new thread and uses this thread to handle the new connection to receive ONC/RPC requests, then dispatching them and finally sending back reply messages.voidregister()Do not call.protected voidreply(OncRpcCallInformation callInfo, OncRpcServerReplyMessage state, XdrAble reply) Send back an ONC/RPC reply to the original caller.voidretrieveCall(XdrAble call) Retrieves the parameters sent within an ONC/RPC call message.voidsetCharacterEncoding(String characterEncoding) Set the character encoding for (de-)serializing strings.Methods inherited from class org.acplt.oncrpc.server.OncRpcServerTransport
getPort, unregister
-
Field Details
-
transmissionTimeout
protected int transmissionTimeoutTimeout during the phase where data is received within calls, or data is sent within replies.
-
-
Constructor Details
-
OncRpcTcpConnectionServerTransport
public OncRpcTcpConnectionServerTransport(OncRpcDispatchable dispatcher, Socket socket, int program, int version, int bufferSize, OncRpcTcpServerTransport parent, int transmissionTimeout) throws OncRpcException, IOException Create a new instance of aOncRpcTcpSConnectionerverTransportwhich encapsulates TCP/IP-based XDR streams of an ONC/RPC server. This particular server transport handles individual ONC/RPC connections over TCP/IP. This constructor is a convenience constructor for those transports handling only a single ONC/RPC program and version number.- Parameters:
dispatcher- Reference to interface of an object capable of dispatching (handling) ONC/RPC calls.socket- TCP/IP-based socket of new connection.program- Number of ONC/RPC program handled by this server transport.version- Version number of ONC/RPC program handled.bufferSize- Size of buffer used when receiving and sending chunks of XDR fragments over TCP/IP. The fragments built up to form ONC/RPC call and reply messages.parent- Parent server transport which created us.transmissionTimeout- Inherited transmission timeout.- Throws:
OncRpcException- if an RPC error occurs.IOException- if an IO error occurs.
-
OncRpcTcpConnectionServerTransport
public OncRpcTcpConnectionServerTransport(OncRpcDispatchable dispatcher, Socket socket, OncRpcServerTransportRegistrationInfo[] info, int bufferSize, OncRpcTcpServerTransport parent, int transmissionTimeout) throws OncRpcException, IOException Create a new instance of aOncRpcTcpSConnectionerverTransportwhich encapsulates TCP/IP-based XDR streams of an ONC/RPC server. This particular server transport handles individual ONC/RPC connections over TCP/IP.- Parameters:
dispatcher- Reference to interface of an object capable of dispatching (handling) ONC/RPC calls.socket- TCP/IP-based socket of new connection.info- Array of program and version number tuples of the ONC/RPC programs and versions handled by this transport.bufferSize- Size of buffer used when receiving and sending chunks of XDR fragments over TCP/IP. The fragments built up to form ONC/RPC call and reply messages.parent- Parent server transport which created us.transmissionTimeout- Inherited transmission timeout.- Throws:
OncRpcException- if an RPC error occurs.IOException- if an IO error occurs.
-
-
Method Details
-
close
public void close()Close the server transport and free any resources associated with it.Note that the server transport is not deregistered. You'll have to do it manually if you need to do so. The reason for this behaviour is, that the portmapper removes all entries regardless of the protocol (TCP/IP or UDP/IP) for a given ONC/RPC program number and version.
Calling this method on a
OncRpcTcpServerTransportresults in the listening TCP network socket immediately being closed. The handler thread will therefore either terminate directly or when it tries to sent back replies.- Specified by:
closein classOncRpcServerTransport
-
finalize
protected void finalize()Finalize object by making sure that we're removed from the list of open transports which our parent transport maintains. -
register
Do not call.- Specified by:
registerin classOncRpcServerTransport- Throws:
Error- because this method must not be called for an individual TCP/IP-based server transport.OncRpcException- if the portmapper could not be contacted successfully.
-
retrieveCall
Retrieves the parameters sent within an ONC/RPC call message. It also makes sure that the deserialization process is properly finished after the call parameters have been retrieved. Under the hood this method therefore callsXdrDecodingStream.endDecoding()to free any pending resources from the decoding stage.- Specified by:
retrieveCallin classOncRpcServerTransport- Parameters:
call- An XDR able object instance, where to decode the call information in.- Throws:
OncRpcException- if an ONC/RPC exception occurs, like the data could not be successfully deserialized.IOException- if an I/O exception occurs, like transmission failures over the network, etc.
-
getXdrDecodingStream
Returns XDR stream which can be used for deserializing the parameters of this ONC/RPC call. This method belongs to the lower-level access pattern when handling ONC/RPC calls.- Specified by:
getXdrDecodingStreamin classOncRpcServerTransport- Returns:
- Reference to decoding XDR stream.
-
endDecoding
Finishes call parameter deserialization. Afterwards the XDR stream returned bygetXdrDecodingStream()must not be used any more. This method belongs to the lower-level access pattern when handling ONC/RPC calls.- Specified by:
endDecodingin classOncRpcServerTransport- Throws:
OncRpcException- if an ONC/RPC exception occurs, like the data could not be successfully deserialized.IOException- if an I/O exception occurs, like transmission failures over the network, etc.
-
getXdrEncodingStream
Returns XDR stream which can be used for eserializing the reply to this ONC/RPC call. This method belongs to the lower-level access pattern when handling ONC/RPC calls.- Specified by:
getXdrEncodingStreamin classOncRpcServerTransport- Returns:
- Reference to enecoding XDR stream.
-
beginEncoding
protected void beginEncoding(OncRpcCallInformation callInfo, OncRpcServerReplyMessage state) throws OncRpcException, IOException Begins the sending phase for ONC/RPC replies. This method belongs to the lower-level access pattern when handling ONC/RPC calls.- Specified by:
beginEncodingin classOncRpcServerTransport- Parameters:
callInfo- Information about ONC/RPC call for which we are about to send back the reply.state- ONC/RPC reply header indicating success or failure.- Throws:
OncRpcException- if an ONC/RPC exception occurs, like the data could not be successfully serialized.IOException- if an I/O exception occurs, like transmission
-
endEncoding
Finishes encoding the reply to this ONC/RPC call. Afterwards you must not use the XDR stream returned bygetXdrEncodingStream()any longer.- Specified by:
endEncodingin classOncRpcServerTransport- Throws:
OncRpcException- if an ONC/RPC exception occurs, like the data could not be successfully serialized.IOException- if an I/O exception occurs, like transmission failures over the network, etc.
-
reply
protected void reply(OncRpcCallInformation callInfo, OncRpcServerReplyMessage state, XdrAble reply) throws OncRpcException, IOException Send back an ONC/RPC reply to the original caller. This is rather a low-level method, typically not used by applications. Dispatcher handling ONC/RPC calls have to use theOncRpcCallInformation.reply(XdrAble)method instead on the call object supplied to the handler.- Specified by:
replyin classOncRpcServerTransport- Parameters:
callInfo- information about the original call, which are necessary to send back the reply to the appropriate caller.state- ONC/RPC reply message header indicating success or failure and containing associated state information.reply- If notnull, then this parameter references the reply to be serialized after the reply message header.- Throws:
OncRpcException- if an ONC/RPC exception occurs, like the data could not be successfully serialized.IOException- if an I/O exception occurs, like transmission failures over the network, etc.- See Also:
-
listen
public void listen()Creates a new thread and uses this thread to handle the new connection to receive ONC/RPC requests, then dispatching them and finally sending back reply messages. Control in the calling thread immediately returns after the handler thread has been created.Currently only one call after the other is dispatched, so no multithreading is done when receiving multiple calls. Instead, later calls have to wait for the current call to finish before they are handled.
- Specified by:
listenin classOncRpcServerTransport
-
setCharacterEncoding
Set the character encoding for (de-)serializing strings.- Specified by:
setCharacterEncodingin classOncRpcServerTransport- Parameters:
characterEncoding- the encoding to use for (de-)serializing strings. Ifnull, the system's default encoding is to be used.
-
getCharacterEncoding
Get the character encoding for (de-)serializing strings.- Specified by:
getCharacterEncodingin classOncRpcServerTransport- Returns:
- the encoding currently used for (de-)serializing strings.
If
null, then the system's default encoding is used.
-