package gov.nist.javax.sip.clientauthutils;
import java.text.ParseException;
import java.util.Collection;
import javax.sip.ClientTransaction;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import javax.sip.SipProvider;
import javax.sip.header.AuthorizationHeader;
import javax.sip.message.Request;
import javax.sip.message.Response;
/**
* A helper interface that provides useful functionality for clients that need to authenticate
* with servers.
*
* @author Emil Ivov
* @author Jeroen van Bemmel
* @author M. Ranganathan
*
* @since 2.0
*
*
*/
public interface AuthenticationHelper {
/**
* Uses securityAuthority to determinie a set of valid user credentials for
* the specified Response (Challenge) and appends it to the challenged
* request so that it could be retransmitted.
*
*
*
* @param challenge
* the 401/407 challenge response
* @param challengedTransaction
* the transaction established by the challenged request
* @param transactionCreator
* the JAIN SipProvider that we should use to create the new
* transaction.
* @param cacheTime The amount of time (seconds ) for which the authentication helper
* will keep a reference to the generated credentials in a cache.
* If you specify -1, then the authentication credentials are cached
* until you remove them from the cache. If you choose this option, make sure
* you remove the cached headers or you will have a memory leak.
*
* @return a transaction containing a re-originated request with the
* necessary authorization header.
* @throws SipException
* if we get an exception white creating the new transaction
* @throws NullPointerException
* if an argument or a header is null.
*/
public abstract ClientTransaction handleChallenge(Response challenge,
ClientTransaction challengedTransaction,
SipProvider transactionCreator, int cacheTime ) throws SipException,
NullPointerException;
/**
* Attach authentication headers to the given request. This looks up
* the credential cache and picks up any stored authentication headers
* for the given call ID and attaches it to the request.
* @param request - the request for which we attach the authentication headers.
*/
public abstract void setAuthenticationHeaders(Request request) ;
/**
* Remove cached entry.
*
* @param callId -- the call Id for which we want to remove the cached headers.
*
*/
public abstract void removeCachedAuthenticationHeaders(String callId);
}