/*
* Copyright (c) 2006 jDiameter.
* https://jdiameter.dev.java.net/
*
* License: GPL v3
*
* e-mail: erick.svenson@yahoo.com
*
*/
package org.jdiameter.client.api.fsm;
import org.jdiameter.api.IllegalDiameterStateException;
import org.jdiameter.api.InternalException;
import org.jdiameter.api.OverloadException;
import org.jdiameter.api.Message;
import org.jdiameter.client.api.IMessage;
import org.jdiameter.client.api.io.TransportException;
import java.io.IOException;
/**
* This interface describe operations of FSM context object
*/
public interface IContext {
/**
* Start connection procedure to remote peer
* @throws InternalException
* @throws IOException
* @throws org.jdiameter.api.IllegalDiameterStateException
*/
void connect() throws InternalException, IOException, IllegalDiameterStateException;
/**
* Start disconnect procedure from remote peer
* @throws InternalException
* @throws org.jdiameter.api.IllegalDiameterStateException
*/
void disconnect() throws InternalException, IllegalDiameterStateException;
/**
* This method allow sent message to remote peer
* @param message message which one should be sent to remote peer
* @throws TransportException
* @throws OverloadException
*/
boolean sendMessage(IMessage message) throws TransportException, OverloadException;
/**
* This method allow sent CER command to remote peer
* @throws TransportException
* @throws OverloadException
*/
void sendCerMessage() throws TransportException, OverloadException;
/**
* This method allow sent CEA command to remote peer
* @param resultCode value for result-code Avp
* @param errMessage value for error-message Avp
* @throws TransportException
* @throws OverloadException
*/
void sendCeaMessage(int resultCode, Message cer, String errMessage) throws TransportException, OverloadException;
/**
* This method allow sent DWR command to remote peer
* @throws TransportException
* @throws OverloadException
*/
void sendDwrMessage() throws TransportException, OverloadException;
/**
* This method allow sent DWA command to remote peer
* @param dwr parent DWR command receved from remote peer
* @param resultCode value for result-code avp
* @param errorMessage value for error-message avp
* @throws TransportException
* @throws OverloadException
*/
void sendDwaMessage(IMessage dwr, int resultCode, String errorMessage) throws TransportException, OverloadException;
/**
* This method allow sent DPR command to remote peer
* @param disconnectCause value for disconnect-cause avp
* @throws TransportException
* @throws OverloadException
*/
void sendDprMessage(int disconnectCause) throws TransportException, OverloadException;
/**
* This method allow sent DPA command to remote peer
* @param dpr parent DPR command receved from remote peer
* @param resultCode value for result-code avp
* @param errorMessage value for error-message avp
* @throws TransportException
* @throws OverloadException
*/
void sendDpaMessage(IMessage dpr, int resultCode, String errorMessage) throws TransportException, OverloadException;
/**
* This method allow processed message from to remote peer
* @param iMessage message from remote peer
* @return true if message correct processed
*/
boolean receiveMessage(IMessage iMessage);
/**
* This method call when peer instance receive DWR event
* @param iMessage message
* @return result code With this code stack will be send DWA message
*/
int processDwrMessage(IMessage iMessage);
/**
* This method call when peer instance receive DPR event
* @param iMessage message
* @return result code With this code stack will be send DPA message
*/
int processDprMessage(IMessage iMessage);
/**
* This method allow sent CEA command to remote peer
* @param key connection key (host + ":" + port)
* @param message
* @return true if the message is sent to remote peer
*/
boolean processCeaMessage(String key, IMessage message);
/**
* This method allow processed CER command from remote peer
* @param key connection key (host + ":" + port)
* @param message received from remote host
* @return result-code for CEA message or -1 if message can not be processed
*/
int processCerMessage(String key, IMessage message);
/**
* Return true if connection should be restored
* Look AttemptToConnect property of peer
* @return true if connection should be restored
*/
boolean isRestoreConnection();
/**
* Reeturn true if connection already created and connected
* @return true if connection already created and connected
*/
boolean isConnected();
/**
* Return parent peer description
* @return parent peer description
*/
String getPeerDescription();
}