package javax.sip;

import java.util.TooManyListenersException;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Request;
import javax.sip.message.Response;

public interface SipProvider {
    /**
     * @deprecated
     * @see #addListeningPoint(ListeningPoint)
     */
    void setListeningPoint(ListeningPoint listeningPoint)
            throws ObjectInUseException;
    void addListeningPoint(ListeningPoint listeningPoint)
            throws ObjectInUseException;
    void removeListeningPoint(ListeningPoint listeningPoint)
            throws ObjectInUseException;
    void removeListeningPoints();

    /**
     * @deprecated
     * @see #getListeningPoints()
     */
    ListeningPoint getListeningPoint();
    ListeningPoint getListeningPoint(String transport);
    ListeningPoint[] getListeningPoints();

    void addSipListener(SipListener sipListener)
            throws TooManyListenersException;
    void removeSipListener(SipListener sipListener);

    CallIdHeader getNewCallId();

    ClientTransaction getNewClientTransaction(Request request)
            throws TransactionUnavailableException;
    ServerTransaction getNewServerTransaction(Request request)
            throws TransactionAlreadyExistsException,
            TransactionUnavailableException;

    Dialog getNewDialog(Transaction transaction) throws SipException;

    boolean isAutomaticDialogSupportEnabled();
    void setAutomaticDialogSupportEnabled(boolean flag);

    SipStack getSipStack();

    void sendRequest(Request request) throws SipException;
    void sendResponse(Response response) throws SipException;
}