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.wire.magicnumber
Class MagicNumberTransportLayer<Identity>

    java.lang.Object
      org.mpisws.p2p.transport.wire.magicnumber.MagicNumberTransportLayer<Identity>

All Implemented Interfaces:
  TransportLayer<Identity,java.nio.ByteBuffer>, TransportLayerCallback<Identity,java.nio.ByteBuffer>, Destructable

    public class MagicNumberTransportLayer<Identity>

extends java.lang.Object
implements TransportLayer<Identity,java.nio.ByteBuffer>, TransportLayerCallback<Identity,java.nio.ByteBuffer>

This class eliminates random connections by dropping all messages/sockets that don't correlate to a specific header. It is the simplest example of how to add a new layer into the mpisws transport layer system.

Author:
  Jeff Hoye

Nested Class Summary
`protected class` | `MagicNumberTransportLayer.VerifyHeaderReceiver`

Field Summary
`protected TransportLayerCallback<Identity,java.nio.ByteBuffer>` | `callback`
`protected Environment` | `environment`
`protected ErrorHandler<Identity>` | `errorHandler`
`byte[]` | `HEADER`
`protected Logger` | `logger`
`int` | `SOCKET_TIMEOUT`
`protected TransportLayer<Identity,java.nio.ByteBuffer>` | `wire`

Constructor Summary
`MagicNumberTransportLayer(TransportLayer<Identity,java.nio.ByteBuffer> wtl, Environment env, ErrorHandler<Identity> errorHandler, byte[] header, int timeOut)`

Method Summary
`void` | `acceptMessages(boolean b)` Toggle accepting incoming messages.
`void` | `acceptSockets(boolean b)` Toggle accepting new sockets.
`void` | `destroy()`
`Identity` | `getLocalIdentifier()` The local node.
`void` | `incomingSocket(P2PSocket<Identity> s)` Notification of a new socket.
`void` | `messageReceived(Identity i, java.nio.ByteBuffer m, java.util.Map<java.lang.String,java.lang.Integer> options)` Called when a new message is received.
`SocketRequestHandle` | `openSocket(Identity i, SocketCallback<Identity> deliverSocketToMe, java.util.Map<java.lang.String,java.lang.Integer> options)` Open a socket to the Identifier
`MessageRequestHandle<Identity,java.nio.ByteBuffer>` | `sendMessage(Identity i, java.nio.ByteBuffer m, MessageCallback<Identity,java.nio.ByteBuffer> deliverAckToMe, java.util.Map<java.lang.String,java.lang.Integer> options)` Send the message to the identifier
`void` | `setCallback(TransportLayerCallback<Identity,java.nio.ByteBuffer> callback)` Set the callback for incoming sockets/messages
`void` | `setErrorHandler(ErrorHandler<Identity> 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

### logger

    protected Logger logger

### environment

    protected Environment environment

### callback

    protected TransportLayerCallback<Identity,java.nio.ByteBuffer> callback

### errorHandler

    protected ErrorHandler<Identity> errorHandler

### wire

    protected TransportLayer<Identity,java.nio.ByteBuffer> wire

### HEADER

    public byte[] HEADER

### SOCKET_TIMEOUT

    public int SOCKET_TIMEOUT

Constructor Detail

### MagicNumberTransportLayer

    public MagicNumberTransportLayer(TransportLayer<Identity,java.nio.ByteBuffer> wtl,
                                     Environment env,
                                     ErrorHandler<Identity> errorHandler,
                                     byte[] header,
                                     int timeOut)

Parameters:
  `wtl` -
  `env` -
  `callback` - notify me of new sockets/messages
  `errorHandler` - call me when there is a problem
  `header` - the header to expect from a socket/packet
  `timeOut` - how long to wait before killing a socket that is not sending (milliseconds)

Method Detail

### setCallback

    public void setCallback(TransportLayerCallback<Identity,java.nio.ByteBuffer> callback)

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

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

### setErrorHandler

    public void setErrorHandler(ErrorHandler<Identity> 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<Identity,java.nio.ByteBuffer>`
  Parameters:
    `handler` - to be notified of problems not related to a specific messaage/socket.

### 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<Identity,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<Identity,java.nio.ByteBuffer>`

### getLocalIdentifier

    public Identity getLocalIdentifier()

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

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

### openSocket

    public SocketRequestHandle openSocket(Identity i,
                                          SocketCallback<Identity> deliverSocketToMe,
                                          java.util.Map<java.lang.String,java.lang.Integer> options)

  Description copied from interface: `TransportLayer`
  Open a socket to the Identifier

  Specified by:
    `openSocket` in interface `TransportLayer<Identity,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

### sendMessage

    public MessageRequestHandle<Identity,java.nio.ByteBuffer> sendMessage(Identity i,
                                                                          java.nio.ByteBuffer m,
                                                                          MessageCallback<Identity,java.nio.ByteBuffer> deliverAckToMe,
                                                                          java.util.Map<java.lang.String,java.lang.Integer> options)

  Description copied from interface: `TransportLayer`
  Send the message to the identifier

  Specified by:
    `sendMessage` in interface `TransportLayer<Identity,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

### destroy

    public void destroy()

  Specified by:
    `destroy` in interface `Destructable`

### incomingSocket

    public void incomingSocket(P2PSocket<Identity> s)
                        throws java.io.IOException

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

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

### messageReceived

    public void messageReceived(Identity i,
                                java.nio.ByteBuffer m,
                                java.util.Map<java.lang.String,java.lang.Integer> options)
                         throws java.io.IOException

  Description copied from interface: `TransportLayerCallback`
  Called when a new message is received.

  Specified by:
    `messageReceived` in interface `TransportLayerCallback<Identity,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

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.