SIP-Klassen "SipServletRequest" und "SipServletResponse" in Liberty
Die Klassen "SipServletRequest" und "SipServletResponse" ähneln den Klassen "HttpServletRequest" und "HttpServletResponse", die beim Entwickeln von Webanwendungen verwendet werden.
Jede Klasse ermöglicht Ihnen, auf die Header in der SIP-Nachricht zuzugreifen und diese zu bearbeiten. Aufgrund der Asynchronität der Anforderungen und Antworten erstellt die Klasse "SipServletRequest" außerdem neue Antworten für die Anforderungen. Wenn Sie die Methode "doInvite" erweitern, wird nur die Klasse "SipServletRequest" an die Methode übergeben. Wenn eine Antwort an den Client gesendet werden soll, muss die Methode "createResponse" im Anforderungsobjekt aufgerufen werden, um eine Antwort zu erstellen. Dies veranschaulicht das folgende Beispiel:
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
// Vorläufige Antwort "Trying" zurücksenden
SipServletResponse resp = req.createResponse(100);
resp.send();
Aufgrund ihrer Asynchronität können SIP-Servlets zunächst kompliziert erscheinen, doch ein so einfaches Codebeispiel wie das obige sendet eine Antwort an einen Client.
Das folgende Beispiel zeigt ein komplexeres SIP-Servlet. Wenn die folgende Methode in einem SIP-Servlet enthalten ist, blockiert das Servlet alle Rufe, die nicht von der Domäne example.com ausgehen.
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
// Überprüfen, dass der URI ein SIP-URI ist
if (req.getFrom().getURI().isSipURI()){
SipURI uri = (SipURI)req.getFrom.getURI();
if (!uri.getHost().equals("example.com")) {
// Antwort "Forbidden" für Rufe außerhalb der Domäne senden
req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
return;
}
}
// Alle anderen Anforderungen an ihr ursprüngliches Ziel weiterleiten
req.getProxy().proxyTo(req.getRequestURI);
}
Informationen zu diesen Klassen finden Sie in SIP Servlet Specification 1.1 unter JSR 289.