Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Package Functions

protocol.ProtocolDataUnit Class Reference

Represents a Protocol Data Unit (PDU). More...

Inheritance diagram for protocol.ProtocolDataUnit:
Inheritance graph
[legend]
Collaboration diagram for protocol.ProtocolDataUnit:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ProtocolDataUnit (CallContext call)
 The constructor for outbound PDUs.
 ProtocolDataUnit (CallContext call, byte[] pduOctets)
 The constructor for inbound PDUs.
void sendPayload (byte[] payload)
 Sends a specified payload.

Static Public Member Functions

static ProtocolDataUnit create (CallContext call, byte[] pduOctets)
 Creates a new PDU of the correct type.

Protected Member Functions

void log (String prefix)
 Logs the time-stamp and the inbound/outbound stream sequence number.

Protected Attributes

CallContext call
 The call object.
OctetBuffer payload
 The payload data.
Long timeStamp
 The time-stamp.
int sourceCallNumber
 The source call number.
int destinationCallNumber
 The destination call number.
int outSeqNo
 The outbound stream sequence number.
int inSeqNo
 The inbound stream sequence number.
int pduType
 The frame type.
int pduSubclass
 The subclass.

Static Protected Attributes

static final int VOICE = 0x02
 PDU Type: Data Audio Compression Format Raw Voice Data.

Package Functions

void setTimestamp (long v)
 Sets the time stamp as long.
long getTimestamp ()
 Returns the timestamp as long.
void onArrivedPDU ()
 Arrived is called when a packet arrives.
void dump (String prefix)
 Logs this frame.

Detailed Description

Represents a Protocol Data Unit (PDU).

                       1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        Octets:
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  +---------------+
  |1|     Source Call Number      |0|   Destination Call Number   |    0   1   2   3
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  +---------------+
  |                           Time-Stamp                          |    4   5   6   7
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  +---------------+
  |  Out Seq No   |   In Seq No   |0|  PDU Type   |   Sub Class   |    8   9  10  11
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  +---------------+
  |                                                               |   12  ...
  :                            Payload                            :
  |                                                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  

Definition at line 27 of file ProtocolDataUnit.java.


Constructor & Destructor Documentation

protocol.ProtocolDataUnit.ProtocolDataUnit ( CallContext  call )
protocol.ProtocolDataUnit.ProtocolDataUnit ( CallContext  call,
byte[]  pduOctets 
)

The constructor for inbound PDUs.

Parameters:
callThe Call object
pduOctetsThe incoming message bytes

Definition at line 80 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.call, protocol.ProtocolDataUnit.destinationCallNumber, utils.OctetBuffer.get(), utils.OctetBuffer.getInt(), utils.OctetBuffer.getShort(), protocol.ProtocolDataUnit.inSeqNo, protocol.ProtocolDataUnit.outSeqNo, protocol.ProtocolDataUnit.payload, protocol.ProtocolDataUnit.pduSubclass, protocol.ProtocolDataUnit.pduType, protocol.ProtocolDataUnit.setTimestamp(), utils.OctetBuffer.slice(), protocol.ProtocolDataUnit.sourceCallNumber, utils.OctetBuffer.toInt(), and utils.OctetBuffer.wrap().

    {
        this.call = call;

        OctetBuffer buf = OctetBuffer.wrap( pduOctets );
        
        this.sourceCallNumber = buf.getShort ();
        this.sourceCallNumber &= 0x7FFF; // strip F bit
        
        this.destinationCallNumber = buf.getShort();
        this.destinationCallNumber &= 0x7FFF; // strip R bit
        
        this.setTimestamp( ( buf.getInt () + 0x100000000L ) & 0xFFFFFFFFL );
        
        this.outSeqNo = OctetBuffer.toInt( buf.get() );
        this.inSeqNo = OctetBuffer.toInt( buf.get() );
        
        this.pduType = OctetBuffer.toInt( buf.get() );
        this.pduSubclass = OctetBuffer.toInt( buf.get() );
        
        this.payload = buf.slice ();
    }

Member Function Documentation

static ProtocolDataUnit protocol.ProtocolDataUnit.create ( CallContext  call,
byte[]  pduOctets 
) [static]

Creates a new PDU of the correct type.

Parameters:
callCall
pduOctetsbyte[]
Returns:
a PDU

Definition at line 126 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.pduType, protocol.ProtocolDataUnit.ProtocolDataUnit(), utils.OctetBuffer.toInt(), and protocol.ProtocolDataUnit.VOICE.

Referenced by protocol.RemotePeer.parsePDU().

    {
        if ( pduOctets == null || pduOctets.length < 12 ) {
            return null;
        }

        ProtocolDataUnit pdu = null;

        int pduType = OctetBuffer.toInt( pduOctets[10] ); 

        switch ( pduType ) 
        {
            case VOICE:
                pdu = new VoicePDU( call, pduOctets );
                break;
            default:
                Log.warn( "Unknown PDU type " + pduType );
                pdu = new ProtocolDataUnit( call, pduOctets ) {};
                break;
        }

        return pdu;
    }
void protocol.ProtocolDataUnit.dump ( String  prefix ) [package]

Logs this frame.

Definition at line 212 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.destinationCallNumber, protocol.ProtocolDataUnit.inSeqNo, protocol.ProtocolDataUnit.outSeqNo, protocol.ProtocolDataUnit.pduSubclass, protocol.ProtocolDataUnit.pduType, protocol.ProtocolDataUnit.sourceCallNumber, and protocol.ProtocolDataUnit.timeStamp.

Referenced by protocol.VoicePDU.onArrivedPDU(), protocol.ProtocolDataUnit.onArrivedPDU(), and protocol.VoicePDUSender.send().

    {
        if ( ! Log.isEnabled( Log.VERB ) ) {
            return;
        }

        StringBuffer sb = new StringBuffer ();
        
        if ( prefix != null ) {
            sb.append( prefix ).append( " " );
        }
        
        sb.append( "PDU:" );
        sb.append( "\n    Source Call = " ).append( sourceCallNumber      );
        sb.append( "\n    Dest Call   = " ).append( destinationCallNumber );
        sb.append( "\n    Timestamp   = " ).append( timeStamp             );
        sb.append( "\n    Out Seq No  = " ).append( outSeqNo              );
        sb.append( "\n    In Seq No   = " ).append( inSeqNo               );
        sb.append( "\n    PDU Type    = " ).append( pduType               );
        sb.append( "\n    Subclass    = " ).append( pduSubclass           );
        
        Log.verb( sb.toString () );
    }
long protocol.ProtocolDataUnit.getTimestamp (  ) [package]

Returns the timestamp as long.

Definition at line 114 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.timeStamp.

Referenced by protocol.ProtocolDataUnit.log(), protocol.VoicePDU.onArrivedPDU(), and protocol.ProtocolDataUnit.sendPayload().

    {
        return this.timeStamp != null ? this.timeStamp.longValue () : 0;
    }
void protocol.ProtocolDataUnit.log ( String  prefix ) [protected]

Logs the time-stamp and the inbound/outbound stream sequence number.

Parameters:
prefixText to include

Reimplemented in protocol.VoicePDU.

Definition at line 196 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.call, protocol.ProtocolDataUnit.getTimestamp(), protocol.CallContext.getTimestamp(), protocol.ProtocolDataUnit.inSeqNo, and protocol.ProtocolDataUnit.outSeqNo.

Referenced by protocol.ProtocolDataUnit.sendPayload().

    {
        StringBuffer sb = new StringBuffer( "Time: " );
        
        sb.append( this.call.getTimestamp () ).append( ", " );
        sb.append( prefix );
        sb.append( ", Timestamp: " ).append( this.getTimestamp () );
        sb.append( ", iseq: "      ).append( inSeqNo              );
        sb.append( ", oseq: "      ).append( outSeqNo             );
        
        Log.debug( sb.toString () );
    }
void protocol.ProtocolDataUnit.onArrivedPDU (  ) [package]

Arrived is called when a packet arrives.

This method doesn't do anything more than dumping the frame. It should be overridden in derived class.

Reimplemented in protocol.VoicePDU.

Definition at line 186 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.dump().

Referenced by protocol.RemotePeer.parsePDU().

    {
        dump( "Inbound" );
    }
void protocol.ProtocolDataUnit.sendPayload ( byte[]  payload )

Sends a specified payload.

Payload represents the data field in the frame.

Parameters:
payloadThe payload data

Definition at line 156 of file ProtocolDataUnit.java.

References utils.OctetBuffer.allocate(), protocol.ProtocolDataUnit.call, protocol.ProtocolDataUnit.destinationCallNumber, protocol.CallContext.getInSeqNo(), protocol.CallContext.getOutSeqNoInc(), protocol.ProtocolDataUnit.getTimestamp(), protocol.ProtocolDataUnit.inSeqNo, protocol.ProtocolDataUnit.log(), protocol.ProtocolDataUnit.outSeqNo, protocol.ProtocolDataUnit.pduSubclass, protocol.ProtocolDataUnit.pduType, utils.OctetBuffer.put(), utils.OctetBuffer.putChar(), utils.OctetBuffer.putInt(), protocol.CallContext.send(), and protocol.ProtocolDataUnit.sourceCallNumber.

Referenced by protocol.VoicePDUSender.send().

    {
        this.outSeqNo = this.call.getOutSeqNoInc();
        this.inSeqNo = this.call.getInSeqNo();

        OctetBuffer pdu = OctetBuffer.allocate( payload.length + 12 );
        
        pdu.putChar( (char) ( this.sourceCallNumber | 0x8000 ) );
        pdu.putChar( (char) this.destinationCallNumber );
        
        long ts = this.getTimestamp ();
        ts =  ( (0x100000000L & ts) > 0 ) ? ts - 0x100000000L : ts;
        pdu.putInt( (int) ts );

        pdu.put( (byte) outSeqNo );
        pdu.put( (byte) inSeqNo );
        pdu.put( (byte) pduType );
        pdu.put( (byte) pduSubclass );
        
        pdu.put( payload );
        
        log( "Sent" );
        
        this.call.send( pdu );
    }
void protocol.ProtocolDataUnit.setTimestamp ( long  v ) [package]

Sets the time stamp as long.

Definition at line 106 of file ProtocolDataUnit.java.

References protocol.ProtocolDataUnit.timeStamp.

Referenced by protocol.ProtocolDataUnit.ProtocolDataUnit(), and protocol.VoicePDUSender.send().

    {
        this.timeStamp = new Long( v );
    }

Member Data Documentation

The payload data.

Definition at line 36 of file ProtocolDataUnit.java.

Referenced by protocol.VoicePDU.onArrivedPDU(), and protocol.ProtocolDataUnit.ProtocolDataUnit().

final int protocol.ProtocolDataUnit.VOICE = 0x02 [static, protected]

PDU Type: Data Audio Compression Format Raw Voice Data.

Definition at line 30 of file ProtocolDataUnit.java.

Referenced by protocol.ProtocolDataUnit.create(), and protocol.VoicePDU.VoicePDU().


The documentation for this class was generated from the following file: