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);
}