JXTA

net.jxta.impl.endpoint.tls
Class TlsTransport

java.lang.Object
  extended by net.jxta.impl.endpoint.tls.TlsTransport
All Implemented Interfaces:
MessageReceiver, MessageSender, MessageTransport, Module

public class TlsTransport
extends Object
implements Module, MessageSender, MessageReceiver

A JXTA MessageTransport implementation which uses TLS sockets.


Nested Class Summary
(package private)  class TlsTransport.credentialPCL
          Listener for Property Changed Events on our credential
(package private)  class TlsTransport.membershipPCL
          Listener for Property Changed Events on membership service
(package private)  class TlsTransport.TlsLoopbackMessenger
          Extends LoopbackMessenger to add a message property to passed messages so that TLS pipes and other users can be sure that the message originate with the local TLS transport.
 
Field Summary
(package private) static boolean ACT_AS_SERVER
          If true then we can accept incoming connections.
(package private)  ID assignedID
           
(package private)  long CONNECTION_IDLE_TIMEOUT
          Amount of time after which a connection is considered idle and may be scavenged.
(package private)  PSECredential credential
           
(package private)  EndpointService endpoint
           
(package private)  ModuleImplAdvertisement implAdvertisement
           
(package private)  EndpointAddress localPeerAddr
           
(package private)  PeerID localPeerId
          local peerID
(package private)  EndpointAddress localTlsPeerAddr
           
(package private)  PSEMembershipService membership
           
(package private)  long MIN_IDLE_RECONNECT
          Amount of a connection must be idle before a reconnection attempt will be considered.
(package private)  ThreadGroup myThreadGroup
          This is the thread group into which we will place all of the threads we create.
(package private)  long RETRMAXAGE
          Amount if time which retries may remain queued for retransmission.
(package private)  X509Certificate[] serviceCert
           
 
Fields inherited from interface net.jxta.platform.Module
START_AGAIN_PROGRESS, START_AGAIN_STALLED, START_DISABLED, START_OK
 
Constructor Summary
TlsTransport()
          Default constructor
 
Method Summary
 boolean allowsRouting()
          Returns true if the Message Transport can be used by the EndpointRouter.
 boolean equals(Object target)
          
 EndpointService getEndpointService()
          Returns the endpoint service with which this MessageTransport is registered.
 Messenger getMessenger(EndpointAddress addr, Object hintIgnored)
          Return a Messenger for sending messages to the specified destination EndpointAddress.
(package private)  PeerGroup getPeerGroup()
          
 String getProtocolName()
          Returns a String containing the name of the protocol used by this MessageTransport.
 EndpointAddress getPublicAddress()
          Returns the EndpointAddress which will be used as the source address for all messages sent by this message sender.
 Iterator getPublicAddresses()
          Returns an Iterator of all of the EndpointAddresses by which this MessageReceiver is reachable.
 void init(PeerGroup group, ID assignedID, Advertisement impl)
          Initialize the module, passing it its peer group and advertisement.
 boolean isConnectionOriented()
          Returns true if the Message Transport is connection oriented (like TCP/IP).
 boolean ping(EndpointAddress addr)
          Returns true if the specified destination address is reachable via this Message Transport otherwise returns false.
(package private)  void processReceivedMessage(Message msg)
          processReceivedMessage is invoked by the TLS Manager when a message has been completely received and is ready to be delivered to the service/application
 int startApp(String[] args)
          Complete any remaining initialization of the module.
 void stopApp()
          Stop a module.
 Object transportControl(Object operation, Object Value)
          Pass a transport control object to a message transport.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ACT_AS_SERVER

static final boolean ACT_AS_SERVER
If true then we can accept incoming connections. Eventually this should be coming out of the transport advertisement.

See Also:
Constant Field Values

assignedID

ID assignedID

implAdvertisement

ModuleImplAdvertisement implAdvertisement

endpoint

EndpointService endpoint

membership

PSEMembershipService membership

serviceCert

X509Certificate[] serviceCert

credential

PSECredential credential

localPeerAddr

EndpointAddress localPeerAddr

localTlsPeerAddr

EndpointAddress localTlsPeerAddr

localPeerId

PeerID localPeerId
local peerID


MIN_IDLE_RECONNECT

long MIN_IDLE_RECONNECT
Amount of a connection must be idle before a reconnection attempt will be considered.


CONNECTION_IDLE_TIMEOUT

long CONNECTION_IDLE_TIMEOUT
Amount of time after which a connection is considered idle and may be scavenged.


RETRMAXAGE

long RETRMAXAGE
Amount if time which retries may remain queued for retransmission. If still unACKed after this amount of time then the connection is considered dead.


myThreadGroup

ThreadGroup myThreadGroup
This is the thread group into which we will place all of the threads we create. THIS HAS NO EFFECT ON SCHEDULING. Java thread groups are only for organization and naming.

Constructor Detail

TlsTransport

public TlsTransport()
Default constructor

Method Detail

equals

public boolean equals(Object target)

Overrides:
equals in class Object

getPeerGroup

PeerGroup getPeerGroup()


init

public void init(PeerGroup group,
                 ID assignedID,
                 Advertisement impl)
          throws PeerGroupException
Initialize the module, passing it its peer group and advertisement.

Note: when subclassing one of the existing PeerGroup implementations (which implement Module), it may not be recommended to overload the init method. See the documentation of the PeerGroup class being subclassed.

Specified by:
init in interface Module
Parameters:
group - The PeerGroup from which this Module can obtain services. If this module is a Service, this is also the PeerGroup of which this module is a service.
assignedID - Identity of Module within group. modules can use it as a the root of their namespace to create names that are unique within the group but predictable by the same module on another peer. This is normally the ModuleClassID which is also the name under which the module is known by other modules. For a group it is the PeerGroupID itself. The parameters of a service, in the Peer configuration, are indexed by the assignedID of that service, and a Service must publish its run-time parameters in the Peer Advertisement under its assigned ID.
impl - The implementation advertisement for this Module. It is permissible to pass null if no implementation advertisement is available. This may happen if the implementation was selected by explicit class name rather than by following an implementation advertisement. Modules are not required to support that style of loading, but if they do, then their documentation should mention it.
Throws:
PeerGroupException - This module failed to initialize.

startApp

public int startApp(String[] args)
Complete any remaining initialization of the module. The module should be fully functional after startApp() is completed. That is also the opportunity to supply arbitrary arguments (mostly to applications).

If this module is a PeerGroup service, it may be invoked several times depending on its return value.

Specified by:
startApp in interface Module
Parameters:
args - An array of Strings forming the parameters for this Module.
Returns:
int A status indication which may be one of Module.START_OK, Module.START_AGAIN_PROGRESS, Module.START_AGAIN_STALLED, which indicates partial or complete success, or any other value (negative values are recommended for future compatibility), which indicates failure.

stopApp

public void stopApp()
Stop a module. This may be called any time after init() completes and should not assume that startApp() has been called or completed.

The Module cannot be forced to comply, but in the future we might be able to deny it access to anything after some timeout.

Specified by:
stopApp in interface Module

isConnectionOriented

public boolean isConnectionOriented()
Returns true if the Message Transport is connection oriented (like TCP/IP). Indicates that the Message Transport can provide efficient transport of a series of messages to the same destination.

Specified by:
isConnectionOriented in interface MessageSender
Returns:
true if the Message Transport is connection oriented.

allowsRouting

public boolean allowsRouting()
Returns true if the Message Transport can be used by the EndpointRouter. Indicates that the Message Transport can be used in the routing of messages to destinations which are not directly reachable via this transport.

More specifically, this Message Transport will be used to route messages who's final destination is not one of the endpoint addresses available from getReachableEndpointAddresses.

Specified by:
allowsRouting in interface MessageSender
Returns:
true if the protocol can be used by the EndpointRouter

transportControl

public Object transportControl(Object operation,
                               Object Value)
Pass a transport control object to a message transport.

Specified by:
transportControl in interface MessageTransport
Parameters:
operation - Object that specifies the type of control operation to be performed
Value - Object that specifies a value object associated with the control operation
Returns:
returned object

getPublicAddress

public EndpointAddress getPublicAddress()
Returns the EndpointAddress which will be used as the source address for all messages sent by this message sender. This is the "preferred" address to which replies should be sent. This address is not necessarily the best or only address by which the peer may be reached.

The public address may also be for a different message transport.

Specified by:
getPublicAddress in interface MessageSender
Returns:
an EndpointAddress containing the public address for this message receiver.

getEndpointService

public EndpointService getEndpointService()
Returns the endpoint service with which this MessageTransport is registered. If it is unregistered then null will be returned.

Specified by:
getEndpointService in interface MessageTransport
Returns:
the EndpointService with which this MessageTransport is registered.

getPublicAddresses

public Iterator getPublicAddresses()
Returns an Iterator of all of the EndpointAddresses by which this MessageReceiver is reachable. The list is in order of "preference" with the most "preferred" EndpointAddress being at the beginning of the list.

Specified by:
getPublicAddresses in interface MessageReceiver
Returns:
an Iterator of EndpointAddresses.

getProtocolName

public String getProtocolName()
Returns a String containing the name of the protocol used by this MessageTransport. The value will match the "protocol" portion of all EndpointAddress.

Specified by:
getProtocolName in interface MessageTransport
Returns:
a String containing the name of the protocol used by this MessageTransport.

ping

public boolean ping(EndpointAddress addr)
Returns true if the specified destination address is reachable via this Message Transport otherwise returns false.

Specified by:
ping in interface MessageSender
Parameters:
addr - Address to ping
Returns:
true if the specified destination address is reachable via this Message Transport otherwise returns false.

getMessenger

public Messenger getMessenger(EndpointAddress addr,
                              Object hintIgnored)
Return a Messenger for sending messages to the specified destination EndpointAddress. XXX bondolo 20040522 The hint could be used in request for the underlying messenger.

Specified by:
getMessenger in interface MessageSender
Parameters:
addr - The destination address for which a messenger is requested.
hintIgnored - An optional hint for the transport to use when creating the messenger. The format of the hint is specific to each Message Transport and may be null if no hint is provided.
Returns:
a Messenger or null if the destination is not reachable.

processReceivedMessage

void processReceivedMessage(Message msg)
processReceivedMessage is invoked by the TLS Manager when a message has been completely received and is ready to be delivered to the service/application


JXSE