...
5. Отправьте запрос /call/inject_stream/terminate, чтобы остановить проигрывание файла
Реализация собственного обработчика входящих SIP сообщений
В некоторых случаях, необходима дополнительная обработка входящих SIP сообщений. Для этого должен быть разработан собственный Java класс, реализующий интерфейс ISipMessageListener
, который будет перехватывать входящие SIP сообщения и обрабатывать их.
Рассмотрим пример, который добавляет порт в Request URI входящего INVITE запроса, если порт не указан. Исходный текст класса:
Code Block |
---|
language | java |
---|
theme | RDark |
---|
title | customSipMessageListener.java |
---|
|
package com.customListener;
import com.flashphoner.sdk.sip.ISipMessageListener;
import com.flashphoner.server.client.IClient;
import gov.nist.javax.sip.address.Authority;
import gov.nist.javax.sip.address.SipUri;
import gov.nist.javax.sip.message.SIPMessage;
import gov.nist.javax.sip.message.SIPRequest;
import gov.nist.javax.sip.stack.MessageChannel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.sip.message.Request;
public class customSipMessageListener implements ISipMessageListener {
private static Logger log = LoggerFactory.getLogger("customSipMessageListener");
@Override
public void processMessage(SIPMessage sipMessage, IClient client, MessageChannel channel) {
if (sipMessage instanceof SIPRequest) {
SIPRequest request = (SIPRequest) sipMessage;
String method = request.getRequestLine().getMethod();
if (Request.INVITE.equals(method)) {
Authority authority = ((SipUri)request.getRequestURI()).getAuthority();
int port = authority.getPort();
if (port <= 0) {
if (log.isDebugEnabled()) {
log.debug("Inject port " + channel.getPort());
}
authority.setPort(channel.getPort());
}
}
}
}
} |
Создадим на сервере структуру каталогов
Code Block |
---|
|
mkdir -p com/customListener |
Копируем исходный текст класса в созданный каталог и компилируем его
Code Block |
---|
|
javac -cp "/usr/local/FlashphonerWebCallServer/lib/*" ./com/customListener/customSipMessageListener.java |
Упаковываем скомпилированный класс в jar файл
Code Block |
---|
|
jar cf customSipMessageListener.jar com/customListener/customSipMessageListener.class |
Копируем jar файл в каталог сервера
Code Block |
---|
|
cp customSipMessageListener.jar /usr/local/FlashphonerWebCallServer/lib |
В файле flashphoner.properties необходимо указать созданный класс в настройке
Code Block |
---|
|
sip_msg_listener=com.customListener.customSipMessageListener |
и перезапустить сервер.