Sip Server on Java

227
12 декабря 2017, 19:12

Как написать SIP сервер на java? Есть код, но как этот сервер запустить я так и не понял

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.*;
import javax.servlet.sip.*;

public class EchoServlet extends SipServlet {

    protected HashMap _addresses = new HashMap();

    protected void doInvite(SipServletRequest req) throws IOException {
        req.createResponse(SipServletResponse.SC_OK).send();
    }

    protected void doRegister(SipServletRequest req) throws IOException, ServletException {
        String aor = req.getFrom().getURI().toString().toLowerCase();
        synchronized (_addresses) {
            if (req.getExpires() != 0) {
                _addresses.put(aor, req.getAddressHeader("Contact").getURI());
            }
            else {
                _addresses.remove(aor);
            }
        }
        req.createResponse(SipServletResponse.SC_OK).send();
    }

    protected void doMessage(SipServletRequest req) throws IOException, ServletException {
        SipURI uri = null;
        synchronized (_addresses) {
            // Get the previous registered address for the sender.
            uri = (SipURI) _addresses.get(req.getFrom().getURI().toString().toLowerCase());
        }
        if (uri == null) {
            // Reject the message if it is not from a registered user.
            req.createResponse(SipServletResponse.SC_FORBIDDEN).send();
            return;
        }
        // We accept the instant message by returning 200 OK response.
        req.createResponse(SipServletResponse.SC_OK).send();
        // Create an echo SIP MESSAGE request with the same content.
        SipServletRequest echo = req.getSession().createRequest("MESSAGE");
        String charset = req.getCharacterEncoding();
        if (charset != null) {
            echo.setCharacterEncoding(charset);
        }
        echo.setRequestURI(uri);
        echo.setContent(req.getContent(), req.getContentType());
        // Send the echo MESSAGE request back to Windows Messenger.
        echo.send();
    }

    protected void doSuccessResponse(SipServletResponse resp) throws IOException, ServletException {
        // Print out when the echo message was accepted.
        if (resp.getMethod().equalsIgnoreCase("MESSAGE")) {
            System.out.println("\"" + resp.getRequest().getContent() + "\" was accepted: " + resp.getStatus());
        }
    }

    protected void doErrorResponse(SipServletResponse resp) throws IOException, ServletException {
        // Print out when the echo message was rejected/
        if (resp.getMethod().equalsIgnoreCase("MESSAGE")) {
            System.out.println("\"" + resp.getRequest().getContent() + "\" was rejected: " + resp.getStatus());
        }
    }

    protected void doBye(SipServletRequest req) throws IOException, ServletException {
        // Accept session termination by returning 200 OK response.
        req.createResponse(SipServletResponse.SC_OK).send();
    }
}
Answer 1

Этот код использует древнюю спецификацию JSR 116: SIP Servlet API и для его запуска, как водится в Java EE мире, требуется собрать проект в виде .sar-файла и развернуть в контейнере SIP-сервлетов (подобно тому как для для выполнения web-сервлетов нужен контейнер web-сервлетов). Идея тут в том, что есть некий готовый SIP-сервер, поддерживающий данную спецификацию, и вы пишите для него свое бизнес-приложение.

Хорошая новость в том, что с тех пор вышла новая версия спецификации JSR 289: SIP Servlet v1.1 с "современными" штуками типа аннотаций. И, похоже, даже существует и поддерживается сервер, который умеет с этим работать - RestComm.

Про все это дело даже есть книга Understanding SIP Servlets 1.1 (Chris Boulton ,‎ Kristoffer Gronowski).

READ ALSO
Ожидание перед действием Selenium WebDriver

Ожидание перед действием Selenium WebDriver

Доброго времени сутокСтолкнулся с такой проблемой

205
Как скомбинировать нажатия “Ctrl” и “+”?

Как скомбинировать нажатия “Ctrl” и “+”?

Мне нужно чтоб браузер изменил свои масштаб ( zoom in/out ), пытаюсь это организовать следующими метода, но ни один из них не работаетПрошу помогите

233
Elasticsearch combining filters

Elasticsearch combining filters

Здраствуйте, я пытаюсь создать QueryBuilder По аналагии Mysql

257
StreamCorruptedException при Сериализации

StreamCorruptedException при Сериализации

Есть класс(Example) который реализует интерфейс Serializable

180