Die SIP-Klassen SipServletRequest und SipServletResponse
Die Klassen SipServletRequest und SipServletResponse sind den Klassen HttpServletRequest und HttpServletResponse ähnlich.
Die Klassen SipServletRequest und SipServletResponse
Jede Klasse bietet Ihnen die erforderliche Funktionalität, um auf die Header in der SIP-Nachricht zuzugreifen und diese zu bearbeiten. Weil Anforderungen und Antworten asynchron sind, wird diese Klasse auch dazu verwendet, neue Antworten für die Anforderungen zu erstellen. Wenn Sie die Methode doInvite erweitern, wird nur die Klasse SipServletRequest an die Methode übergeben. Damit eine Antwort an den Client gesendet wird, müssen Sie zunächst die Methode createResponse für das Anforderungsobjekt (Request) aufrufen, um eine Antwort zu erstellen. Beispiel:
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//Eine vorläufige Trying-Antwort zurücksenden
SipServletResponse resp = req.createResponse(100);
resp.send();
Da sie asynchron sind, können SIP-Servlets kompliziert aussehen. Aber selbst ein Code, der so einfach ist wie im oben aufgeführten Beispiel, kann eine Antwort an einen Client senden.
Es folgt ein komplexeres Beispiel eines SIP-Servlets. Mit der folgenden, in einem SIP-Servlet enthaltenen Methode blockiert das Servlet alle Aufrufe, die nicht von der Domäne beispiel.com empfangen werden.
protected void doInvite(SipServletRequest req) throws
javax.servlet.ServletException, java.io.IOException {
//Prüfen, ob der URI ein SIP URI ist
if (req.getFrom().getURI().isSipURI()){
SipURI uri = (SipURI)req.getFrom.getURI();
if (!uri.getHost().equals("beispiel.com")) {
//Für Aufrufe außerhalb der Domäne eine Ablehnungsantwort senden
req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
return;
}
}
//Alle anderen Anforderungen an ihr ursprüngliches Ziel weiterleiten
req.getProxy().proxyTo(req.getRequestURI);
}