/** * Return a formatted message to the client. We try to re-connect with the peer on the other end * if possible. * * @param sipMessage Message to send. * @throws IOException If there is an error sending the message */ public void sendMessage(SIPMessage sipMessage) throws IOException { byte[] msg = sipMessage.encodeAsBytes(); long time = System.currentTimeMillis(); this.sendMessage(msg, sipMessage instanceof SIPRequest); if (this.stack.serverLog.needsLogging(ServerLog.TRACE_MESSAGES)) logMessage(sipMessage, peerAddress, peerPort, time); }
/** * Return a reply from a pre-constructed reply. This sends the message back to the entity who * caused us to create this channel in the first place. * * @param sipMessage Message string to send. * @throws IOException If there is a problem with sending the message. */ public void sendMessage(SIPMessage sipMessage) throws IOException { if (sipStack.isLoggingEnabled() && this.sipStack.logStackTraceOnMessageSend) { if (sipMessage instanceof SIPRequest && ((SIPRequest) sipMessage).getRequestLine() != null) { /* * We dont want to log empty trace messages. */ this.sipStack.logWriter.logStackTrace(LogWriter.TRACE_MESSAGES); } else { this.sipStack.logWriter.logStackTrace(LogWriter.TRACE_MESSAGES); } } // Test and see where we are going to send the messsage. If the message // is sent back to oursleves, just // shortcircuit processing. long time = System.currentTimeMillis(); try { for (MessageProcessor messageProcessor : sipStack.getMessageProcessors()) { if (messageProcessor.getIpAddress().equals(this.peerAddress) && messageProcessor.getPort() == this.peerPort && messageProcessor.getTransport().equals(this.peerProtocol)) { MessageChannel messageChannel = messageProcessor.createMessageChannel(this.peerAddress, this.peerPort); if (messageChannel instanceof RawMessageChannel) { ((RawMessageChannel) messageChannel).processMessage(sipMessage); sipStack.logWriter.logDebug("Self routing message"); return; } } } byte[] msg = sipMessage.encodeAsBytes(this.getTransport()); sendMessage(msg, peerAddress, peerPort, peerProtocol, sipMessage instanceof SIPRequest); } catch (IOException ex) { throw ex; } catch (Exception ex) { sipStack.logWriter.logError("An exception occured while sending message", ex); throw new IOException("An exception occured while sending message"); } finally { if (sipStack.logWriter.isLoggingEnabled(ServerLog.TRACE_MESSAGES)) logMessage(sipMessage, peerAddress, peerPort, time); } }