|
BEA Systems, Inc. | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.bea.wcp.diameter.Message
Diameter Message base class for both Request and Answer message types. Message processing begins by decoding the message header from the message bytes using an instance of MessageFactory. The default decoder will create a new instance of Request for request messages, and Answer for answer messages. The actual message AVPs are then decoded in a separate step by calling "decodeAvps" in order to have the option of sending an error answer early if the message header was bad. Finally, the AVP values are fully decoded and validated by calling "validate" which in turn calls "validateAvp" for each partially decoded AVP. Custom message implementations can override the method "validateAvp" in order to provide additional validation as well as save AVP values as they are being decoded. Diameter header:
0 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Version | Message Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | command flags | Command-Code | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Application-ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Hop-by-Hop Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | End-to-End Identifier | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... AVPs ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Field Summary | |
static int |
FLAG_ERROR
|
static int |
FLAG_POTENTIALLY_RETRANSMITTED
|
static int |
FLAG_PROXIABLE
|
static int |
FLAG_REQUEST
|
static int |
FLAGS_MASK
|
static int |
HEADER_SIZE
|
static int |
VERSION
Diameter version |
Constructor Summary | |
protected |
Message(java.nio.ByteBuffer bb,
Connection c)
Creates a new Message decoded from the specified message bytes. |
protected |
Message(Message req,
ResultCode rc)
Creates a new Diameter answer message for the specified request. |
protected |
Message(Node node,
Command cmd,
int appId,
int hopByHopId,
int endToEndId,
java.lang.String sessionId)
This constructor is only called by Request when creating a new request. |
Method Summary | |
void |
addAvp(Attribute attr,
java.lang.Object value)
Adds a new AVP to the message. |
void |
addAvp(Avp avp)
Adds a new AVP to the message. |
void |
addAvp(java.lang.String name,
java.lang.Object value)
Adds a new AVP by name to the message. |
abstract void |
commit()
Commits a message currently being sent. |
static Message |
decode(java.nio.ByteBuffer bb,
Connection c)
Decodes message header from specified message bytes and connection. |
void |
decodeAvps(java.nio.ByteBuffer bb)
Called by Connection to decode message AVPs. |
java.nio.ByteBuffer |
encode()
Returns a byte buffer which contains the encoded message bytes. |
java.nio.ByteBuffer |
encode(java.nio.ByteBuffer bb)
Encodes this diameter message to the specified byte buffer. |
int |
getAppId()
Returns the application identifier for this message. |
Avp |
getAvp(Attribute attr)
Returns the first AVP in the message with the specified attribute. |
Avp |
getAvp(java.lang.String name)
Returns the first AVP for the specific attribute name, or null if none |
AvpList |
getAvpList()
Returns the list of message AVPs. |
int |
getCode()
Returns the Command code for this message. |
static int |
getCode(java.nio.ByteBuffer bb)
|
Command |
getCommand()
Returns the Command for this message. |
Connection |
getConnection()
If this message was received then returns the connection used to receive the message. |
int |
getEndToEndId()
Returns the end-to-end identifier for this message. |
int |
getHopByHopId()
Returns the hop-by-hop identifier for this message. |
static int |
getLength(java.nio.ByteBuffer bb)
|
java.lang.String |
getOriginHost()
Returns the value of the Origin-Host AVP. |
java.lang.String |
getOriginRealm()
Returns the value of the Origin-Realm AVP. |
abstract Session |
getSession()
Returns the Session associated with this message, or null if none. |
java.lang.String |
getSessionId()
Returns the value of the Session-Id AVP, or null if none. |
static int |
getVersion(java.nio.ByteBuffer bb)
|
boolean |
isAnswer()
Returns true if this message an answer message. |
abstract boolean |
isCommitted()
|
boolean |
isError()
Returns true if this message is an erorr according to the header flags. |
boolean |
isPotentiallyRetransmitted()
Returns true if this message has been potentially retransmitted according to the header flags. |
boolean |
isProxiable()
Returns true if this message is proxiable according to the header flags. |
boolean |
isRequest()
Returns true if this message is a request. |
void |
preValidate()
Perform initial validation of message to include validation of AVPs required to determine if the request/answer should be forwarded. |
protected void |
preValidateAvp(Avp avp)
Fully decodes and validates the specified AVP. |
abstract void |
send()
Sends this Diameter message. |
java.lang.String |
toLoggableString()
|
java.lang.String |
toString()
|
void |
validate()
Validates the message by validating each message AVP. |
protected void |
validateAvp(Avp avp)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static final int FLAG_ERROR
public static final int FLAG_POTENTIALLY_RETRANSMITTED
public static final int FLAG_PROXIABLE
public static final int FLAG_REQUEST
public static final int FLAGS_MASK
public static final int HEADER_SIZE
public static final int VERSION
Constructor Detail |
protected Message(java.nio.ByteBuffer bb, Connection c)
protected Message(Message req, ResultCode rc)
protected Message(Node node, Command cmd, int appId, int hopByHopId, int endToEndId, java.lang.String sessionId)
Method Detail |
public void addAvp(Attribute attr, java.lang.Object value)
attr
- the AVP Attributevalue
- the AVP valuepublic void addAvp(Avp avp)
avp
- the AVP to be addedpublic void addAvp(java.lang.String name, java.lang.Object value)
name
- the AVP attribute namevalue
- the AVP valuepublic abstract void commit() throws java.io.IOException
java.io.IOException
public static Message decode(java.nio.ByteBuffer bb, Connection c)
bb
- the message bytes to be decodedc
- the connection used to receive the message
java.lang.IndexOutOfBoundsException
- if the message length was less than
HEADER_SIZEpublic void decodeAvps(java.nio.ByteBuffer bb) throws MessageException
bb
- the message body bytes
MessageException
- if the message was invalidpublic java.nio.ByteBuffer encode()
public java.nio.ByteBuffer encode(java.nio.ByteBuffer bb)
bb
- the output byte buffer
public int getAppId()
public Avp getAvp(Attribute attr)
attr
- the AVP attribute
public Avp getAvp(java.lang.String name)
name
- the attribute name
public AvpList getAvpList()
public int getCode()
public static int getCode(java.nio.ByteBuffer bb)
public Command getCommand()
public Connection getConnection()
public int getEndToEndId()
public int getHopByHopId()
public static int getLength(java.nio.ByteBuffer bb)
public java.lang.String getOriginHost()
public java.lang.String getOriginRealm()
public abstract Session getSession()
public java.lang.String getSessionId()
public static int getVersion(java.nio.ByteBuffer bb)
public final boolean isAnswer()
public abstract boolean isCommitted()
public boolean isError()
public boolean isPotentiallyRetransmitted()
public boolean isProxiable()
public final boolean isRequest()
public void preValidate() throws MessageException
MessageException
- if validation failedprotected void preValidateAvp(Avp avp) throws AvpException
avp
- the AVP to be validated
AvpException
- if the AVP was invalidpublic abstract void send() throws java.io.IOException
java.io.IOException
- if an I/O error occurred while sendingpublic java.lang.String toLoggableString()
public java.lang.String toString()
public void validate() throws MessageException
MessageException
- if the message was invalidprotected void validateAvp(Avp avp) throws AvpException
AvpException
|
Documentation is available at http://download.oracle.com/docs/cd/E13209_01/wlcp/wlss31/ Copyright 2007 BEA Systems Inc. |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |