Rice Pastry API

org.mpisws.p2p.transport.rendezvous
Class RendezvousTransportLayerImpl<Identifier,HighIdentifier extends RendezvousContact>

java.lang.Object
  extended by org.mpisws.p2p.transport.rendezvous.RendezvousTransportLayerImpl<Identifier,HighIdentifier>
Type Parameters:
Identifier -
All Implemented Interfaces:
PilotManager<HighIdentifier>, TransportLayer<Identifier,java.nio.ByteBuffer>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>, Destructable

public class RendezvousTransportLayerImpl<Identifier,HighIdentifier extends RendezvousContact>
extends java.lang.Object
implements TransportLayer<Identifier,java.nio.ByteBuffer>, TransportLayerCallback<Identifier,java.nio.ByteBuffer>, PilotManager<HighIdentifier>

The trick here is that this layer is at some level, say InetSocketAddress, but must pass around very High-Level Identifiers, such as a NodeHandle for the rendezvous strategy to do its job, but maybe this can just be the RendezvousContact, and it can be casted.

Author:
Jeff Hoye

Field Summary
static byte ACCEPTOR_SOCKET
           
static byte CONNECTOR_SOCKET
           
static byte NORMAL_SOCKET
           
static byte PILOT_SOCKET
           
 java.lang.String RENDEZVOUS_CONTACT_STRING
          options.get(RENDEZVOUS_CONTACT_STRING) returns a RendezvousContact
 
Constructor Summary
RendezvousTransportLayerImpl(TransportLayer<Identifier,java.nio.ByteBuffer> tl, java.lang.String RENDEZVOUS_CONTACT_STRING, HighIdentifier myRendezvousContact, ContactDeserializer<Identifier,HighIdentifier> deserializer, RendezvousGenerationStrategy<HighIdentifier> rendezvousGenerator, RendezvousStrategy<HighIdentifier> rendezvousStrategy, Environment env)
           
 
Method Summary
 void acceptMessages(boolean b)
          Toggle accepting incoming messages.
 void acceptSockets(boolean b)
          Toggle accepting new sockets.
 void canContactDirect(boolean b)
          We may not be able to determine this from the get-go.
 void closePilot(HighIdentifier i)
          Tells the manager that the pilot to the Identifier is no longer useful
 void destroy()
           
protected  HighIdentifier getHighIdentifier(java.util.Map<java.lang.String,java.lang.Object> options)
           
 Identifier getLocalIdentifier()
          The local node.
 void incomingSocket(P2PSocket<Identifier> s)
          Notification of a new socket.
 void messageReceived(Identifier i, java.nio.ByteBuffer m, java.util.Map<java.lang.String,java.lang.Object> options)
          Called when a new message is received.
 SocketRequestHandle<HighIdentifier> openPilot(HighIdentifier i, Continuation<SocketRequestHandle<HighIdentifier>,java.io.IOException> deliverAckToMe)
          Tells the manager to open a pilot to the Identifier
 SocketRequestHandle<Identifier> openSocket(Identifier i, SocketCallback<Identifier> deliverSocketToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Open a socket to the Identifier
 MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i, java.nio.ByteBuffer m, MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          What to do if firewalled? ConnectRequest UDP only? For now always use UDP_AND_TCP
 void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
          Set the callback for incoming sockets/messages
 void setErrorHandler(ErrorHandler<Identifier> handler)
          To be notified of problems not related to an outgoing messaage/socket.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NORMAL_SOCKET

public static final byte NORMAL_SOCKET
See Also:
Constant Field Values

CONNECTOR_SOCKET

public static final byte CONNECTOR_SOCKET
See Also:
Constant Field Values

ACCEPTOR_SOCKET

public static final byte ACCEPTOR_SOCKET
See Also:
Constant Field Values

PILOT_SOCKET

public static final byte PILOT_SOCKET
See Also:
Constant Field Values

RENDEZVOUS_CONTACT_STRING

public java.lang.String RENDEZVOUS_CONTACT_STRING
options.get(RENDEZVOUS_CONTACT_STRING) returns a RendezvousContact

Constructor Detail

RendezvousTransportLayerImpl

public RendezvousTransportLayerImpl(TransportLayer<Identifier,java.nio.ByteBuffer> tl,
                                    java.lang.String RENDEZVOUS_CONTACT_STRING,
                                    HighIdentifier myRendezvousContact,
                                    ContactDeserializer<Identifier,HighIdentifier> deserializer,
                                    RendezvousGenerationStrategy<HighIdentifier> rendezvousGenerator,
                                    RendezvousStrategy<HighIdentifier> rendezvousStrategy,
                                    Environment env)
Method Detail

canContactDirect

public void canContactDirect(boolean b)
We may not be able to determine this from the get-go.

Parameters:
b -

openSocket

public SocketRequestHandle<Identifier> openSocket(Identifier i,
                                                  SocketCallback<Identifier> deliverSocketToMe,
                                                  java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Open a socket to the Identifier

Specified by:
openSocket in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - who to open the socket to
deliverSocketToMe - the callback when the socket is opened
options - options on how to open the socket (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
an object to cancel opening the socket if it takes to long, or is no longer relevent

getHighIdentifier

protected HighIdentifier getHighIdentifier(java.util.Map<java.lang.String,java.lang.Object> options)

incomingSocket

public void incomingSocket(P2PSocket<Identifier> s)
                    throws java.io.IOException
Description copied from interface: TransportLayerCallback
Notification of a new socket.

Specified by:
incomingSocket in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
s - the incoming socket
Throws:
java.io.IOException

sendMessage

public MessageRequestHandle<Identifier,java.nio.ByteBuffer> sendMessage(Identifier i,
                                                                        java.nio.ByteBuffer m,
                                                                        MessageCallback<Identifier,java.nio.ByteBuffer> deliverAckToMe,
                                                                        java.util.Map<java.lang.String,java.lang.Object> options)
What to do if firewalled? ConnectRequest UDP only? For now always use UDP_AND_TCP

Specified by:
sendMessage in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
i - the destination
m - the message
deliverAckToMe - layer dependent notification when the message is sent (can indicate placed on the wire, point-to-point acknowledgement, or end-to-end acknowledgement)
options - delivery options (don't source route, encrypt etc) (may not be respected if layer cannot provide service)
Returns:
ability to cancel the message if no longer relevent

messageReceived

public void messageReceived(Identifier i,
                            java.nio.ByteBuffer m,
                            java.util.Map<java.lang.String,java.lang.Object> options)
                     throws java.io.IOException
Description copied from interface: TransportLayerCallback
Called when a new message is received.

Specified by:
messageReceived in interface TransportLayerCallback<Identifier,java.nio.ByteBuffer>
Parameters:
i - The node it is coming from
m - the message
options - describe how the message arrived (udp/tcp, encrypted etc)
Throws:
java.io.IOException - if there is a problem decoding the message

acceptMessages

public void acceptMessages(boolean b)
Description copied from interface: TransportLayer
Toggle accepting incoming messages. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptMessages in interface TransportLayer<Identifier,java.nio.ByteBuffer>

acceptSockets

public void acceptSockets(boolean b)
Description copied from interface: TransportLayer
Toggle accepting new sockets. Useful in flow control if overwhelmed by incoming sockets. Default: true

Specified by:
acceptSockets in interface TransportLayer<Identifier,java.nio.ByteBuffer>

getLocalIdentifier

public Identifier getLocalIdentifier()
Description copied from interface: TransportLayer
The local node.

Specified by:
getLocalIdentifier in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Returns:
The local node.

setCallback

public void setCallback(TransportLayerCallback<Identifier,java.nio.ByteBuffer> callback)
Description copied from interface: TransportLayer
Set the callback for incoming sockets/messages

Specified by:
setCallback in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
callback - the callback for incoming sockets/messages

setErrorHandler

public void setErrorHandler(ErrorHandler<Identifier> handler)
Description copied from interface: TransportLayer
To be notified of problems not related to an outgoing messaage/socket. Or to be notified if a callback isn't provided.

Specified by:
setErrorHandler in interface TransportLayer<Identifier,java.nio.ByteBuffer>
Parameters:
handler - to be notified of problems not related to a specific messaage/socket.

destroy

public void destroy()
Specified by:
destroy in interface Destructable

openPilot

public SocketRequestHandle<HighIdentifier> openPilot(HighIdentifier i,
                                                     Continuation<SocketRequestHandle<HighIdentifier>,java.io.IOException> deliverAckToMe)
Description copied from interface: PilotManager
Tells the manager to open a pilot to the Identifier

Specified by:
openPilot in interface PilotManager<HighIdentifier extends RendezvousContact>
deliverAckToMe - optional
Returns:

closePilot

public void closePilot(HighIdentifier i)
Description copied from interface: PilotManager
Tells the manager that the pilot to the Identifier is no longer useful

Specified by:
closePilot in interface PilotManager<HighIdentifier extends RendezvousContact>

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.


Imprint-Dataprotection