Rice Pastry API

org.mpisws.p2p.transport.peerreview
Class PeerReviewImpl<Handle,Identifier>

java.lang.Object
  extended by org.mpisws.p2p.transport.peerreview.PeerReviewImpl<Handle,Identifier>
Type Parameters:
Handle - (Usually a NodeHandle)
Identifier - (Permanent Identifier), can get an Identifier from a Handle
All Implemented Interfaces:
PeerReview<Handle,Identifier>, TransportLayer<Handle,java.nio.ByteBuffer>, TransportLayerCallback<Handle,java.nio.ByteBuffer>, Destructable

public class PeerReviewImpl<Handle,Identifier>
extends java.lang.Object
implements TransportLayer<Handle,java.nio.ByteBuffer>, TransportLayerCallback<Handle,java.nio.ByteBuffer>, PeerReview<Handle,Identifier>

Author:
Jeff Hoye

Constructor Summary
PeerReviewImpl(TransportLayer<Handle,java.nio.ByteBuffer> tl, Environment env, Serializer<Handle> handleSerializer, Serializer<Identifier> idSerializer, IdentifierExtractor<Handle,Identifier> identifierExtractor, AuthenticatorSerializer authenticatorSerialilzer)
           
 
Method Summary
 void acceptMessages(boolean b)
          Toggle accepting incoming messages.
 void acceptSockets(boolean b)
          Toggle accepting new sockets.
 void destroy()
           
 AuthenticatorSerializer getAuthenticatorSerializer()
           
 Environment getEnvironment()
           
 Serializer<Handle> getHandleSerializer()
           
 int getHashSizeInBytes()
           
 IdentifierExtractor<Handle,Identifier> getIdentifierExtractor()
           
 Serializer<Identifier> getIdSerializer()
           
 Handle getLocalIdentifier()
          The local node.
 int getSignatureSizeInBytes()
           
 long getTime()
          Current time in millis, however, we depend on there being a timesource that is more discritized than the "wall" clock.
 void incomingSocket(P2PSocket<Handle> s)
          Notification of a new socket.
 void messageReceived(Handle i, java.nio.ByteBuffer m, java.util.Map<java.lang.String,java.lang.Object> options)
          Called when a new message is received.
 SocketRequestHandle<Handle> openSocket(Handle i, SocketCallback<Handle> deliverSocketToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Open a socket to the Identifier
protected  void sendEvidenceToWitnesses(Identifier subject, long evidenceSeq, ProofInconsistent evidence)
          Called internally by other classes if they have found evidence against one of our peers.
 MessageRequestHandle<Handle,java.nio.ByteBuffer> sendMessage(Handle i, java.nio.ByteBuffer m, MessageCallback<Handle,java.nio.ByteBuffer> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Object> options)
          Send the message to the identifier
 void setCallback(TransportLayerCallback<Handle,java.nio.ByteBuffer> callback)
          Set the callback for incoming sockets/messages
 void setErrorHandler(ErrorHandler<Handle> 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
 

Constructor Detail

PeerReviewImpl

public PeerReviewImpl(TransportLayer<Handle,java.nio.ByteBuffer> tl,
                      Environment env,
                      Serializer<Handle> handleSerializer,
                      Serializer<Identifier> idSerializer,
                      IdentifierExtractor<Handle,Identifier> identifierExtractor,
                      AuthenticatorSerializer authenticatorSerialilzer)
Method Detail

openSocket

public SocketRequestHandle<Handle> openSocket(Handle i,
                                              SocketCallback<Handle> 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<Handle,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 relevant

incomingSocket

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

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

sendMessage

public MessageRequestHandle<Handle,java.nio.ByteBuffer> sendMessage(Handle i,
                                                                    java.nio.ByteBuffer m,
                                                                    MessageCallback<Handle,java.nio.ByteBuffer> deliverAckToMe,
                                                                    java.util.Map<java.lang.String,java.lang.Object> options)
Description copied from interface: TransportLayer
Send the message to the identifier

Specified by:
sendMessage in interface TransportLayer<Handle,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 acknowledgment, 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 relevant

messageReceived

public void messageReceived(Handle 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<Handle,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<Handle,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<Handle,java.nio.ByteBuffer>

getLocalIdentifier

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

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

setCallback

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

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

setErrorHandler

public void setErrorHandler(ErrorHandler<Handle> 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<Handle,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

getAuthenticatorSerializer

public AuthenticatorSerializer getAuthenticatorSerializer()
Specified by:
getAuthenticatorSerializer in interface PeerReview<Handle,Identifier>

getEnvironment

public Environment getEnvironment()
Specified by:
getEnvironment in interface PeerReview<Handle,Identifier>

getIdSerializer

public Serializer<Identifier> getIdSerializer()
Specified by:
getIdSerializer in interface PeerReview<Handle,Identifier>

getTime

public long getTime()
Description copied from interface: PeerReview
Current time in millis, however, we depend on there being a timesource that is more discritized than the "wall" clock. It is only advanced on a timeout or a message receipt.

Specified by:
getTime in interface PeerReview<Handle,Identifier>
Returns:

sendEvidenceToWitnesses

protected void sendEvidenceToWitnesses(Identifier subject,
                                       long evidenceSeq,
                                       ProofInconsistent evidence)
Called internally by other classes if they have found evidence against one of our peers. We ask the EvidenceTransferProtocol to send it to the corresponding witness set.


getHandleSerializer

public Serializer<Handle> getHandleSerializer()
Specified by:
getHandleSerializer in interface PeerReview<Handle,Identifier>

getHashSizeInBytes

public int getHashSizeInBytes()
Specified by:
getHashSizeInBytes in interface PeerReview<Handle,Identifier>

getSignatureSizeInBytes

public int getSignatureSizeInBytes()
Specified by:
getSignatureSizeInBytes in interface PeerReview<Handle,Identifier>

getIdentifierExtractor

public IdentifierExtractor<Handle,Identifier> getIdentifierExtractor()
Specified by:
getIdentifierExtractor in interface PeerReview<Handle,Identifier>

Rice Pastry API

Copyright © 2001-2005 - Rice Pastry.