Flashphoner uses this interface for monitoring and overriding sip messages between Flashphoner and PBX system:
com.flashphoner.sdk.sip.ISipMessageListener
Usage:
sip_msg_listener=com.flashphoner.app.MySipMessageListener
Default MySipMessageListener writes sip message into the log.
You can change code of this class and get access to SIP message (read and write).
This class intercepts all SIP messages: income and outcome.
See Configuring section for more info.
Examples
Just log SIP message:
public class MySipMessageListener implements ISipMessageListener { @Override public void processMessage(SIPMessage sipMessage) { Logger.logger.info("Message:\n" + sipMessage.toString()); } }
Сhanges symbol ':' to "AbCdEfGh" in CallID string for incoming messages and vice versa for outgoing.
public class ChangeCallIdListener implements ISipMessageListener { private final String COLON_SUNSTITUTION = "AbCdEfGh"; @Override public void processMessage(SIPMessage sipMessage) { CallID callIdHeader = (CallID) sipMessage.getHeader(CallID.NAME); String callId = callIdHeader.getCallId(); if (callId.indexOf(":") != -1) { callId = callId.replaceAll(":", COLON_SUNSTITUTION); } else if (callId.indexOf(COLON_SUNSTITUTION) != -1) { callId = callId.replaceAll(COLON_SUNSTITUTION, ":"); } try { callIdHeader.setCallId(callId); } catch (ParseException e) { e.printStackTrace(); } } }
Add custom parameter into the request line
public class AddExtensionHeaderListener implements ISipMessageListener { @Override public void processMessage(SIPMessage sipMessage) { if (Request.INVITE.equals(sipMessage.getCSeq().getMethod()) && (sipMessage instanceof SIPRequest)) { RequestLine requestLine = ((SIPRequest) sipMessage).getRequestLine(); SipUri uri = (SipUri) requestLine.getUri(); try { uri.setParameter("ConfID","1"); } catch (ParseException e) { e.printStackTrace(); } } Logger.logger.info("AddExtensionHeaderListener processMessage:\n" + sipMessage.toString()); } }
Add custom header to SIP message
public class MySipMessageListener implements ISipMessageListener { @Override public void processMessage(SIPMessage sipMessage) { Logger.logger.info("MySipMessageListener processMessage:\n" + sipMessage.toString()); if (Request.INVITE.equals(sipMessage.getCSeq().getMethod())) { ExtensionHeader myHeader = new ExtensionHeaderImpl("ConfID"); try { myHeader.setValue("321"); } catch (ParseException e) { e.printStackTrace(); } sipMessage.setHeader(myHeader); } } }