|
Oracle Communications Converged Application Server Java API Reference 5.0 E18767-01 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object
com.bea.wcp.diameter.Message
public abstract class 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, com.bea.wcp.diameter.transport.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. |
XmlBuffer |
appendXml(XmlBuffer xb) |
abstract void |
commit() Commits a message currently being sent. |
static Message |
decode(java.nio.ByteBuffer bb, com.bea.wcp.diameter.transport.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. |
com.bea.wcp.diameter.transport.Connection |
getConnection() If this message was received then returns the connection used to receive the message. |
java.lang.String |
getEffectiveSessionId() Returns the session id of this message, or if none exists, looks for one in the original request. |
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. |
boolean |
popProxyInfo() Remove last proxy info element from this message |
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 HEADER_SIZE
public static final int VERSION
public static final int FLAG_REQUEST
public static final int FLAG_PROXIABLE
public static final int FLAG_ERROR
public static final int FLAG_POTENTIALLY_RETRANSMITTED
public static final int FLAGS_MASK
Constructor Detail |
---|
protected Message(Node node, Command cmd, int appId, int hopByHopId, int endToEndId, java.lang.String sessionId)
node
- the Diameter node (used for setting origin Avps)cmd
- the request commandappId
- the application identifierhopByHopId
- the hop-by-hop identifierendToEndId
- the end-to-end identifiersessionId
- optional session identifierprotected Message(Message req, ResultCode rc)
req
- the original request messagerc
- the result code for the answerprotected Message(java.nio.ByteBuffer bb, com.bea.wcp.diameter.transport.Connection c)
bb
- the message bytesc
- the connection which received the messageMethod Detail |
---|
public void decodeAvps(java.nio.ByteBuffer bb) throws MessageException
bb
- the message body bytesMessageException
- if the message was invalidpublic void preValidate() throws MessageException
MessageException
- if validation failedprotected void preValidateAvp(Avp avp) throws AvpException
avp
- the AVP to be validatedAvpException
- if the AVP was invalidpublic void validate() throws MessageException
MessageException
- if the message was invalidprotected void validateAvp(Avp avp) throws AvpException
AvpException
public java.nio.ByteBuffer encode(java.nio.ByteBuffer bb)
bb
- the output byte bufferpublic java.nio.ByteBuffer encode()
public Avp getAvp(Attribute attr)
attr
- the AVP attributepublic Avp getAvp(java.lang.String name)
name
- the attribute namepublic void addAvp(Avp avp)
avp
- the AVP to be addedpublic void addAvp(Attribute attr, java.lang.Object value)
attr
- the AVP Attributevalue
- the AVP valuepublic void addAvp(java.lang.String name, java.lang.Object value)
name
- the AVP attribute namevalue
- the AVP valuepublic int getCode()
public Command getCommand()
public final boolean isRequest()
public final boolean isAnswer()
public boolean isProxiable()
public boolean isError()
public boolean isPotentiallyRetransmitted()
public int getAppId()
public int getHopByHopId()
public int getEndToEndId()
public AvpList getAvpList()
public java.lang.String getSessionId()
public java.lang.String getEffectiveSessionId()
public java.lang.String getOriginHost()
public java.lang.String getOriginRealm()
public abstract Session getSession()
public com.bea.wcp.diameter.transport.Connection getConnection()
public abstract void send() throws java.io.IOException
java.io.IOException
- if an I/O error occurred while sendingpublic abstract void commit() throws java.io.IOException
java.io.IOException
public abstract boolean isCommitted()
public boolean popProxyInfo()
public static Message decode(java.nio.ByteBuffer bb, com.bea.wcp.diameter.transport.Connection c)
bb
- the message bytes to be decodedc
- the connection used to receive the messagejava.lang.IndexOutOfBoundsException
- if the message length was less than HEADER_SIZEpublic static int getLength(java.nio.ByteBuffer bb)
public static int getCode(java.nio.ByteBuffer bb)
public static int getVersion(java.nio.ByteBuffer bb)
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String toLoggableString()
public XmlBuffer appendXml(XmlBuffer xb)
|
Oracle Communications Converged Application Server Java API Reference 5.0 E18767-01 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |