/*
* Copyright (c) 2006 jDiameter.
* https://jdiameter.dev.java.net/
*
* License: GPL v3
*
* e-mail: erick.svenson@yahoo.com
*
*/
package org.jdiameter.client.api.parser;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.client.api.IMessage;
import java.nio.ByteBuffer;
/**
* Basic interface for diameter message parsers.
*/
public interface IMessageParser {
/**
* Create message from bytebuffer
* @param data message bytebuffer
* @return instance of message
* @throws AvpDataException
*/
IMessage createMessage(ByteBuffer data) throws AvpDataException;
/**
* Created specified type of message
* @param iface type of message
* @param data message bytebuffer
* @return instance of message
* @throws AvpDataException
*/
<T> T createMessage(java.lang.Class<?> iface, ByteBuffer data) throws AvpDataException;
/**
* Created empty message
* @param commandCode message command code
* @param headerAppId header applicatio id
* @return instance of message
*/
IMessage createEmptyMessage(int commandCode, long headerAppId);
/**
* Created specified type of message
* @param iface type of message
* @param commandCode message command code
* @param headerAppId header applicatio id
* @return instance of message
*/
<T> T createEmptyMessage(Class<?> iface, int commandCode, long headerAppId);
/**
* Created new message with copied of header of parent message
* @param parentMessage parent message
* @return instance of message
*/
IMessage createEmptyMessage(IMessage parentMessage);
/**
* Created new message with copied of header of parent message
* @param parentMessage parent message
* @param commandCode new command code value
* @return instance of message
*/
IMessage createEmptyMessage(IMessage parentMessage, int commandCode);
/**
* Created new message with copied of header of parent message
* @param iface type of message
* @param parentMessage parent message
* @return instance of message
*/
<T> T createEmptyMessage(Class<?> iface, IMessage parentMessage);
/**
* Encode message to ByteBuffer
* @param message diameter message
* @return instance of message
* @throws DecodeException
*/
ByteBuffer encodeMessage(IMessage message) throws DecodeException;
}