Classi SIP SipServletRequest e SipServletResponse

Le classi SipServletRequest e SipServletResponse sono simili alle classi HttpServletRequest e HttpServletResponse.

SipServletRequest e le lezioni di SipServletResponse

Ciascuna classe consente di accedere alle intestazioni nel messaggio SIP e di manipolarle. A causa della natura asincrona delle richieste e delle risposte, questa classe è anche il luogo per creare nuove risposte per le richieste. Quando si estende il metodo doInvite, solo la classe SipServletRequest viene passata al metodo. Per inviare una risposta al client, è necessario richiamare il metodo createResponse sull'oggetto Richiesta per creare una risposta. Ad esempio:

protected void doInvite(SipServletRequest req) throws
 javax.servlet.ServletException, java.io.IOException {
	
	//send back a provisional Trying response
	SipServletResponse resp = req.createResponse(100);
resp.send();

A causa della loro natura asincrona, i servlet SIP possono sembrare complicati. Tuttavia, qualcosa di semplice come il codice di esempio precedente invia una risposta a un cliente.

Di seguito viene riportato un esempio più complesso di servlet SIP. Con il seguente metodo incluso in un servlet SIP, il servlet blocca tutte le chiamate che non provengono dal dominio example.com .

protected void doInvite(SipServletRequest req) throws
 javax.servlet.ServletException, java.io.IOException {

//check to make sure that the URI is a SIP URI
	     if (req.getFrom().getURI().isSipURI()){
                 SipURI uri = (SipURI)req.getFrom.getURI();
                 if (!uri.getHost().equals("example.com")) {
                    //send forbidden response for calls outside domain
                    req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
                    return;
                 }
              }
              //proxy all other requests on to their original destination
              req.getProxy().proxyTo(req.getRequestURI);
        }