1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Conditions Of Use
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software was developed by employees of the National Institute of
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Standards and Technology (NIST), an agency of the Federal Government.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Pursuant to title 15 Untied States Code Section 105, works of NIST
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * employees are not subject to copyright protection in the United States
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * and are considered to be in the public domain.  As a result, a formal
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * license is not needed to use the software.
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software is provided by NIST as a service and is expressly
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * AND DATA ACCURACY.  NIST does not warrant or make any representations
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * regarding the use of the software or the results thereof, including but
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * not limited to the correctness, accuracy, reliability or usefulness of
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the software.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Permission to use this software is contingent upon your acceptance
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * of the terms of this agreement
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * .
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*******************************************************************************
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).       *
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ******************************************************************************/
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.stack;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.ServerLogger;
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.StackLogger;
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.LogRecord;
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.CallID;
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.message.SIPMessage;
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.File;
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.FileWriter;
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.IOException;
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.io.PrintWriter;
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Properties;
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.SipStack;
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.TimeStampHeader;
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// BEGIN android-deleted
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// import org.apache.log4j.Level;
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// import org.apache.log4j.Logger;
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// END android-deleted
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Log file wrapper class. Log messages into the message trace file and also write the log into
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the debug file if needed. This class keeps an XML formatted trace around for later access via
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * RMI. The trace can be viewed with a trace viewer (see tools.traceviewerapp).
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.39 $ $Date: 2009/11/11 14:00:58 $
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/>
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class ServerLog implements ServerLogger {
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private boolean logContent;
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected StackLogger stackLogger;
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Name of the log file in which the trace is written out (default is null)
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private String logFileName;
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Print writer that is used to write out the log file.
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private PrintWriter printWriter;
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set auxililary information to log with this trace.
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private String auxInfo;
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private String description;
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private String stackIpAddress;
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private SIPTransactionStack sipStack;
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private Properties configurationProperties;
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public ServerLog() {
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // Debug log file. Whatever gets logged by us also makes its way into debug log.
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private void setProperties(Properties configurationProperties) {
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.configurationProperties = configurationProperties;
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // Set a descriptive name for the message trace logger.
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.description = configurationProperties.getProperty("javax.sip.STACK_NAME");
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.stackIpAddress = configurationProperties.getProperty("javax.sip.IP_ADDRESS");
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.logFileName = configurationProperties.getProperty("gov.nist.javax.sip.SERVER_LOG");
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String logLevel = configurationProperties.getProperty("gov.nist.javax.sip.TRACE_LEVEL");
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String logContent = configurationProperties
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                .getProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT");
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.logContent = (logContent != null && logContent.equals("true"));
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (logLevel != null) {
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (logLevel.equals("LOG4J")) {
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // if TRACE_LEVEL property is specified as
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // "LOG4J" then, set the traceLevel based on
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // the log4j effective log level.
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // check whether a Log4j logger name has been
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // specified. if not, use the stack name as the default
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // logger name.
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // BEGIN android-deleted
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                /*
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                Logger logger = Logger.getLogger(configurationProperties.getProperty(
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        "gov.nist.javax.sip.LOG4J_LOGGER_NAME", this.description));
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                Level level = logger.getEffectiveLevel();
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                if (level == Level.OFF) {
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(0);
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (level.isGreaterOrEqual(Level.DEBUG)) {
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(TRACE_DEBUG);
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (level.isGreaterOrEqual(Level.INFO)) {
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(TRACE_MESSAGES);
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (level.isGreaterOrEqual(Level.WARN)) {
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(TRACE_EXCEPTION);
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                }
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                */
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // END android-deleted
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            } else {
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                try {
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    int ll;
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    if (logLevel.equals("DEBUG")) {
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        ll = TRACE_DEBUG;
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    } else if (logLevel.equals("INFO")) {
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        ll = TRACE_MESSAGES;
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    } else if (logLevel.equals("ERROR")) {
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        ll = TRACE_EXCEPTION;
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    } else if (logLevel.equals("NONE") || logLevel.equals("OFF")) {
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        ll = TRACE_NONE;
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    } else {
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        ll = Integer.parseInt(logLevel);
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    }
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(ll);
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } catch (NumberFormatException ex) {
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    System.out.println("ServerLog: WARNING Bad integer " + logLevel);
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    System.out.println("logging dislabled ");
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    this.setTraceLevel(0);
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                }
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        checkLogFile();
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setStackIpAddress(String ipAddress) {
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.stackIpAddress = ipAddress;
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // public static boolean isWebTesterCatchException=false;
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // public static String webTesterLogFile=null;
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * default trace level
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected int traceLevel = TRACE_MESSAGES;
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public synchronized void closeLogFile() {
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (printWriter != null) {
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            printWriter.close();
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            printWriter = null;
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void checkLogFile() {
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (logFileName == null || traceLevel < TRACE_MESSAGES) {
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // Dont create a log file if tracing is
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // disabled.
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return;
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            File logFile = new File(logFileName);
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (!logFile.exists()) {
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                logFile.createNewFile();
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                printWriter = null;
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // Append buffer to the end of the file unless otherwise specified
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // by the user.
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (printWriter == null) {
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                boolean overwrite = Boolean.valueOf(
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    configurationProperties.getProperty(
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        "gov.nist.javax.sip.SERVER_LOG_OVERWRITE"));
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                FileWriter fw = new FileWriter(logFileName, !overwrite);
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                printWriter = new PrintWriter(fw, true);
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                printWriter.println("<!-- "
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "Use the  Trace Viewer in src/tools/tracesviewer to"
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + " view this  trace  \n"
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "Here are the stack configuration properties \n"
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "javax.sip.IP_ADDRESS= "
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + configurationProperties.getProperty("javax.sip.IP_ADDRESS") + "\n"
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "javax.sip.STACK_NAME= "
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + configurationProperties.getProperty("javax.sip.STACK_NAME") + "\n"
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "javax.sip.ROUTER_PATH= "
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + configurationProperties.getProperty("javax.sip.ROUTER_PATH") + "\n"
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "javax.sip.OUTBOUND_PROXY= "
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + configurationProperties.getProperty("javax.sip.OUTBOUND_PROXY") + "\n"
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "-->");
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                printWriter.println("<description\n logDescription=\"" + description
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "\"\n name=\""
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + configurationProperties.getProperty("javax.sip.STACK_NAME")
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        + "\"\n auxInfo=\"" + auxInfo + "\"/>\n ");
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                if (auxInfo != null) {
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    if (sipStack.isLoggingEnabled()) {
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                .logDebug("Here are the stack configuration properties \n"
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "javax.sip.IP_ADDRESS= "
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("javax.sip.IP_ADDRESS")
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n"
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "javax.sip.ROUTER_PATH= "
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("javax.sip.ROUTER_PATH")
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n"
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "javax.sip.OUTBOUND_PROXY= "
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("javax.sip.OUTBOUND_PROXY")
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n"
236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "gov.nist.javax.sip.CACHE_CLIENT_CONNECTIONS= "
237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("gov.nist.javax.sip.CACHE_CLIENT_CONNECTIONS")
239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n"
240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "gov.nist.javax.sip.CACHE_SERVER_CONNECTIONS= "
241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("gov.nist.javax.sip.CACHE_SERVER_CONNECTIONS")
243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n"
244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "gov.nist.javax.sip.REENTRANT_LISTENER= "
245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("gov.nist.javax.sip.REENTRANT_LISTENER")
247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "gov.nist.javax.sip.THREAD_POOL_SIZE= "
248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + configurationProperties
249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                .getProperty("gov.nist.javax.sip.THREAD_POOL_SIZE")
250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                        + "\n");
251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug(" ]]> ");
252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("</debug>");
253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<description\n logDescription=\"" + description
254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                + "\"\n name=\"" + stackIpAddress + "\"\n auxInfo=\"" + auxInfo
255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                + "\"/>\n ");
256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<debug>");
257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<![CDATA[ ");
258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    }
259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else {
260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    if (sipStack.isLoggingEnabled()) {
262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("Here are the stack configuration properties \n"
263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                + configurationProperties + "\n");
264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug(" ]]>");
265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("</debug>");
266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<description\n logDescription=\"" + description
267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                + "\"\n name=\"" + stackIpAddress + "\" />\n");
268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<debug>");
269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        stackLogger.logDebug("<![CDATA[ ");
270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    }
271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                }
272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } catch (IOException ex) {
274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Global check for whether to log or not. To minimize the time return false here.
280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return true -- if logging is globally enabled and false otherwise.
282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean needsLogging() {
285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return logFileName != null;
286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the log file name
290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param name is the name of the log file to set.
292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setLogFileName(String name) {
294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        logFileName = name;
295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * return the name of the log file.
299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getLogFileName() {
301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return logFileName;
302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Log a message into the log file.
306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param message message to log into the log file.
308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private void logMessage(String message) {
310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // String tname = Thread.currentThread().getName();
311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        checkLogFile();
312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String logInfo = message;
313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (printWriter != null) {
314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            printWriter.println(logInfo);
315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (sipStack.isLoggingEnabled()) {
317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            stackLogger.logInfo(logInfo);
318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private void logMessage(String message, String from, String to, boolean sender,
323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            String callId, String firstLine, String status, String tid, long time,
324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            long timestampVal) {
325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        LogRecord log = this.sipStack.logRecordFactory.createLogRecord(message, from, to, time,
327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                sender, firstLine, tid, callId, timestampVal);
328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (log != null)
329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            logMessage(log.toString());
330600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Log a message into the log directory.
334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param message a SIPMessage to log
336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param from from header of the message to log into the log directory
337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param to to header of the message to log into the log directory
338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param sender is the server the sender
339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param time is the time to associate with the message.
340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void logMessage(SIPMessage message, String from, String to, boolean sender, long time) {
342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        checkLogFile();
343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (message.getFirstLine() == null)
344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return;
345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        CallID cid = (CallID) message.getCallId();
346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String callId = null;
347600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (cid != null)
348600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            callId = cid.getCallId();
349600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String firstLine = message.getFirstLine().trim();
350600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String inputText = (logContent ? message.encode() : message.encodeMessage());
351600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String tid = message.getTransactionId();
352600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        TimeStampHeader tsHdr = (TimeStampHeader) message.getHeader(TimeStampHeader.NAME);
353600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        long tsval = tsHdr == null ? 0 : tsHdr.getTime();
354600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        logMessage(inputText, from, to, sender, callId, firstLine, null, tid, time, tsval);
355600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
356600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
357600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
358600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Log a message into the log directory.
359600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
360600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param message a SIPMessage to log
361600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param from from header of the message to log into the log directory
362600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param to to header of the message to log into the log directory
363600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param status the status to log.
364600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param sender is the server the sender or receiver (true if sender).
365600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param time is the reception time.
366600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
367600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void logMessage(SIPMessage message, String from, String to, String status,
368600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            boolean sender, long time) {
369600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        checkLogFile();
370600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        CallID cid = (CallID) message.getCallId();
371600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String callId = null;
372600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (cid != null)
373600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            callId = cid.getCallId();
374600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String firstLine = message.getFirstLine().trim();
375600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String encoded = (logContent ? message.encode() : message.encodeMessage());
376600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String tid = message.getTransactionId();
377600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        TimeStampHeader tshdr = (TimeStampHeader) message.getHeader(TimeStampHeader.NAME);
378600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        long tsval = tshdr == null ? 0 : tshdr.getTime();
379600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        logMessage(encoded, from, to, sender, callId, firstLine, status, tid, time, tsval);
380600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
381600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
382600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
383600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Log a message into the log directory. Time stamp associated with the message is the current
384600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * time.
385600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
386600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param message a SIPMessage to log
387600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param from from header of the message to log into the log directory
388600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param to to header of the message to log into the log directory
389600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param status the status to log.
390600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param sender is the server the sender or receiver (true if sender).
391600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
392600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void logMessage(SIPMessage message, String from, String to, String status,
393600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            boolean sender) {
394600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        logMessage(message, from, to, status, sender, System.currentTimeMillis());
395600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
396600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
397600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
398600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Log an exception stack trace.
399600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
400600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param ex Exception to log into the log file
401600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
402600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
403600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void logException(Exception ex) {
404600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (traceLevel >= TRACE_EXCEPTION) {
405600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            checkLogFile();
406600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            ex.printStackTrace();
407600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (printWriter != null)
408600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                ex.printStackTrace(printWriter);
409600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
410600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
411600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
412600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
413600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
414600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the trace level for the stack.
415600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
416600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param level -- the trace level to set. The following trace levels are supported:
417600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *        <ul>
418600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *        <li> 0 -- no tracing </li>
419600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
420600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * <li> 16 -- trace messages only </li>
421600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
422600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * <li> 32 Full tracing including debug messages. </li>
423600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
424600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * </ul>
425600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
426600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setTraceLevel(int level) {
427600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        traceLevel = level;
428600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
429600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
430600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
431600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Get the trace level for the stack.
432600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
433600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the trace level
434600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
435600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int getTraceLevel() {
436600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return traceLevel;
437600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
438600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
439600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
440600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set aux information. Auxiliary information may be associated with the log file. This is
441600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * useful for remote logs.
442600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
443600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param auxInfo -- auxiliary information.
444600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
445600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setAuxInfo(String auxInfo) {
446600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.auxInfo = auxInfo;
447600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
448600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
449600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	public void setSipStack(SipStack sipStack) {
450600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang		if(sipStack instanceof SIPTransactionStack) {
451600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang			this.sipStack = (SIPTransactionStack)sipStack;
452600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	        this.stackLogger = this.sipStack.getStackLogger();
453600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang		}
454600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang		else
455600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang			throw new IllegalArgumentException("sipStack must be a SIPTransactionStack");
456600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	}
457600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
458600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	public void setStackProperties(Properties stackProperties) {
459600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang		setProperties(stackProperties);
460600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	}
461600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
462600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	public void setLevel(int jsipLoggingLevel) {
463600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
464600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang	}
465600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
466600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
467