/** Return a list object for this header if it has an associated list object. */ @SuppressWarnings("unchecked") public static SIPHeaderList<SIPHeader> getList(SIPHeader sipHeader) { if (!initialized) initializeListMap(); try { Class<?> headerClass = sipHeader.getClass(); Class<?> listClass = headerListTable.get(headerClass); SIPHeaderList<SIPHeader> shl = (SIPHeaderList<SIPHeader>) listClass.newInstance(); shl.setHeaderName(sipHeader.getName()); return shl; } catch (InstantiationException ex) { ex.printStackTrace(); } catch (IllegalAccessException ex) { ex.printStackTrace(); } return null; }
/** * Exception processor for exceptions detected from the parser. (This is invoked by the parser * when an error is detected). * * @param sipMessage -- the message that incurred the error. * @param ex -- parse exception detected by the parser. * @param header -- header that caused the error. * @throws ParseException Thrown if we want to reject the message. */ public void handleException( ParseException ex, SIPMessage sipMessage, Class hdrClass, String header, String message) throws ParseException { if (LogWriter.needsLogging) stack.logWriter.logException(ex); // Log the bad message for later reference. if ((hdrClass != null) && (hdrClass.equals(From.class) || hdrClass.equals(To.class) || hdrClass.equals(CSeq.class) || hdrClass.equals(Via.class) || hdrClass.equals(CallID.class) || hdrClass.equals(RequestLine.class) || hdrClass.equals(StatusLine.class))) { stack.logBadMessage(message); throw ex; } else { sipMessage.addUnparsed(header); } }
/** * Implementation of the ParseExceptionListener interface. * * @param ex Exception that is given to us by the parser. * @throws ParseException If we choose to reject the header or message. */ public void handleException( ParseException ex, SIPMessage sipMessage, Class hdrClass, String header, String message) throws ParseException { if (sipStack.isLoggingEnabled()) this.sipStack.logWriter.logException(ex); // Log the bad message for later reference. if ((hdrClass != null) && (hdrClass.equals(From.class) || hdrClass.equals(To.class) || hdrClass.equals(CSeq.class) || hdrClass.equals(Via.class) || hdrClass.equals(CallID.class) || hdrClass.equals(RequestLine.class) || hdrClass.equals(StatusLine.class))) { sipStack.logWriter.logError("BAD MESSAGE!"); sipStack.logWriter.logError(message); throw ex; } else { sipMessage.addUnparsed(header); } }
/** * Logs exceptions that have occurred in the application while processing events originating from * the stack. * * @param eventClass the class of the jain-sip event that we were handling when the exception was * thrown. * @param exc the exception that we need to log. */ private void logApplicationException(Class<DialogTerminatedEvent> eventClass, Throwable exc) { String message = "An error occurred while processing event of type: " + eventClass.getName(); logger.error(message, exc); if (logger.isDebugEnabled()) logger.debug(message, exc); }