package net.java.slee.resource.diameter.cxdx;
import java.io.IOException;
import net.java.slee.resource.diameter.cxdx.events.LocationInfoRequest;
import net.java.slee.resource.diameter.cxdx.events.MultimediaAuthenticationRequest;
import net.java.slee.resource.diameter.cxdx.events.PushProfileAnswer;
import net.java.slee.resource.diameter.cxdx.events.RegistrationTerminationAnswer;
import net.java.slee.resource.diameter.cxdx.events.RegistrationTerminationRequest;
import net.java.slee.resource.diameter.cxdx.events.ServerAssignmentRequest;
import net.java.slee.resource.diameter.cxdx.events.UserAuthorizationRequest;
/**
*
* Represents a CxDxClientSession session for Cx/Dx clients.
*
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
*/
public interface CxDxClientSession extends CxDxSession {
/**
* Create a User-Authorization-Request message pre-populated with the AVPs appropriate for this session.
*
* @return a new UserAuthorizationRequest
*/
UserAuthorizationRequest createUserAuthorizationRequest();
/**
* Send an event User-Authorization-Request. An event containing the answer will be fired on this activity.
*
* @param userAuthorizationRequest the User-Authorization-Request message to send
* @throws IOException
*/
void sendUserAuthorizationRequest(UserAuthorizationRequest userAuthorizationRequest) throws IOException;
/**
* Create a ServerAssignmentRequest message pre-populated with the AVPs appropriate for this session.
*
* @return a new ServerAssignmentRequest
*/
ServerAssignmentRequest createServerAssignmentRequest();
/**
* Send an event Registration-Termination-Request. An event containing the answer will be fired on this activity.
*
* @param serverAssignmentRequest the Registration-Termination-Request message to send
* @throws IOException
*/
void sendServerAssignmentRequest(ServerAssignmentRequest serverAssignmentRequest) throws IOException;
/**
* Create a LocationInfoRequest message pre-populated with the AVPs appropriate for this session.
*
* @return a new LocationInfoRequest
*/
LocationInfoRequest createLocationInfoRequest();
/**
* Send an event Location-Info-Request. An event containing the answer will be fired on this activity.
*
* @param locationInfoRequest the Location-Info-Request message to send
* @throws IOException
*/
void sendLocationInfoRequest(LocationInfoRequest locationInfoRequest) throws IOException;
/**
* Create a MultimediaAuthenticationRequest message pre-populated with the AVPs appropriate for this session.
*
* @return a new MultimediaAuthenticationRequest
*/
MultimediaAuthenticationRequest createMultimediaAuthenticationRequest();
/**
* Send an event Multimedia-Authentication-Request. An event containing the answer will be fired on this activity.
*
* @param multimediaAuthenticationRequest the Multimedia-Authentication-Request message to send
* @throws IOException
*/
void sendMultimediaAuthenticationRequest(MultimediaAuthenticationRequest multimediaAuthenticationRequest) throws IOException;
/**
* Create a RegistrationTerminationRequest message pre-populated with the AVPs appropriate for this session.
*
* @return a new RegistrationTerminationRequest
*/
RegistrationTerminationAnswer createRegistrationTerminationAnswer();
/**
* Send an event Registration-Termination-Request. An event containing the answer will be fired on this activity.
*
* @param registrationTerminationRequest the Registration-Termination-Request message to send
* @throws IOException
*/
void sendRegistrationTerminationAnswer(RegistrationTerminationAnswer registrationTerminationAnswer) throws IOException;
/**
* Create a Push-Profile-Answer populated with the AVPs appropriate for this session.
*
* @return a new PushProfileAnswer
*/
PushProfileAnswer createPushProfileAnswer();
/**
* Send an event Push-Profile-Answer in response to a Push-Profile-Request received on this activity.
*
* @param PushProfileAnswer the Push-Profile-Answer message to send
* @throws IOException
*/
void sendPushProfileAnswer(PushProfileAnswer pushProfileAnswer) throws IOException;
}