Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Rice Pastry API
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.mpisws.p2p.transport.rc4
Class RC4TransportLayer<Identifier,MsgType>

    java.lang.Object
      org.mpisws.p2p.transport.rc4.RC4TransportLayer<Identifier,MsgType>

Type Parameters:
  `Identifier` -
  `MsgType` -

All Implemented Interfaces:
  TransportLayer<Identifier,MsgType>, TransportLayerCallback<Identifier,MsgType>, Destructable

    public class RC4TransportLayer<Identifier,MsgType>

extends java.lang.Object
implements TransportLayer<Identifier,MsgType>, TransportLayerCallback<Identifier,MsgType>

Only encrypts socket traffic!!! Encrypts channels based on a password. Builds a session password for each socket which is a hash of the user-defined password and a clear-text seed. Note that the seed length isn't sent in the protocol, so it must be the same on all peers. Why do we need a password seed? Imagine a protocol where you contact a peer and it returns a boolean. W/O a seed, the protocol would only return 2 possible messages. While you may not know which is which, you could probably figure it out by seeing who returns what. Both sides need to have a different seed, so that under a simple agreement protocol, you can't easily see a replay. E.G: A -> B: 14 // I propose 14 B -> A: 14 // I agree to 14, in this case an evesdropper could determine whether or not B agreed with A, which is a leak of info Here's the Seed protocol we use: // pw is a pre-established password A -> B: SeedB B -> E(H(pw,SeedB))[SeedA,SeedB] // Now A and B each have an agreed upon seed // Note that it may be important in step 2 to send SeedA before SeedB, otherwise, an attacker could keep sending new SeedB, // and maybe learn something about the first packet... but maybe this doesn't matter because of the Hashing to generate the secret key

Author:
  Jeff Hoye

Field Summary
`protected TransportLayerCallback<Identifier,MsgType>` | `callback`
`protected Environment` | `env`
`protected ErrorHandler<Identifier>` | `errorHandler`
`static int` | `KEY_LENGTH`
`protected Logger` | `logger`
`protected java.security.MessageDigest` | `md`
`protected TransportLayer<Identifier,MsgType>` | `tl` Default 1 1 = encrypt 0 = don't encrypt Need to implemet this before we add it to the API

Constructor Summary
`RC4TransportLayer(TransportLayer<Identifier,MsgType> tl, Environment env, java.lang.String password, ErrorHandler<Identifier> errorHandler)`
`RC4TransportLayer(TransportLayer<Identifier,MsgType> tl, Environment env, java.lang.String password, int pwSeedLength, RandomSource random, ErrorHandler<Identifier> errorHandler)`

Method Summary
`void` | `acceptMessages(boolean b)` Toggle accepting incoming messages.
`void` | `acceptSockets(boolean b)` Toggle accepting new sockets.
`void` | `destroy()`
`Identifier` | `getLocalIdentifier()` The local node.
`void` | `incomingSocket(P2PSocket<Identifier> s)` Notification of a new socket.
`void` | `messageReceived(Identifier i, MsgType m, java.util.Map<java.lang.String,java.lang.Object> options)` Called when a new message is received.
`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,MsgType>` | `sendMessage(Identifier i, MsgType m, MessageCallback<Identifier,MsgType> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Object> options)` Send the message to the identifier
`void` | `setCallback(TransportLayerCallback<Identifier,MsgType> 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

### tl

    protected TransportLayer<Identifier,MsgType> tl

  Default 1 1 = encrypt 0 = don't encrypt Need to implemet this before we add it to the API

### callback

    protected TransportLayerCallback<Identifier,MsgType> callback

### env

    protected Environment env

### logger

    protected Logger logger

### errorHandler

    protected ErrorHandler<Identifier> errorHandler

### md

    protected java.security.MessageDigest md

### KEY_LENGTH

    public static final int KEY_LENGTH

See Also:
  Constant Field Values

Constructor Detail

### RC4TransportLayer

    public RC4TransportLayer(TransportLayer<Identifier,MsgType> tl,
                             Environment env,
                             java.lang.String password,
                             ErrorHandler<Identifier> errorHandler)
                      throws java.security.NoSuchAlgorithmException

Throws:
  `java.security.NoSuchAlgorithmException`

### RC4TransportLayer

    public RC4TransportLayer(TransportLayer<Identifier,MsgType> tl,
                             Environment env,
                             java.lang.String password,
                             int pwSeedLength,
                             RandomSource random,
                             ErrorHandler<Identifier> errorHandler)
                      throws java.security.NoSuchAlgorithmException

Throws:
  `java.security.NoSuchAlgorithmException`

Method Detail

### 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,MsgType>`

### 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,MsgType>`

### getLocalIdentifier

    public Identifier getLocalIdentifier()

  Description copied from interface: `TransportLayer`
  The local node.

  Specified by:
    `getLocalIdentifier` in interface `TransportLayer<Identifier,MsgType>`
  Returns:
    The local node.

### 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,MsgType>`
  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<Identifier> s)
                        throws java.io.IOException

  Description copied from interface: `TransportLayerCallback`
  Notification of a new socket.

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

### sendMessage

    public MessageRequestHandle<Identifier,MsgType> sendMessage(Identifier i,
                                                                MsgType m,
                                                                MessageCallback<Identifier,MsgType> 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<Identifier,MsgType>`
  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

### setCallback

    public void setCallback(TransportLayerCallback<Identifier,MsgType> callback)

  Description copied from interface: `TransportLayer`
  Set the callback for incoming sockets/messages

  Specified by:
    `setCallback` in interface `TransportLayer<Identifier,MsgType>`
  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,MsgType>`
  Parameters:
    `handler` - to be notified of problems not related to a specific messaage/socket.

### destroy

    public void destroy()

  Specified by:
    `destroy` in interface `Destructable`

### messageReceived

    public void messageReceived(Identifier i,
                                MsgType 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,MsgType>`
  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

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Rice Pastry API
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2001-2005 - Rice Pastry.