diff --git a/jni/pjproject-android/.svn/pristine/7b/7b09ab1784565aa2421000b88c3c9755b26e5d26.svn-base b/jni/pjproject-android/.svn/pristine/7b/7b09ab1784565aa2421000b88c3c9755b26e5d26.svn-base
new file mode 100644
index 0000000..bb1324e
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/7b/7b09ab1784565aa2421000b88c3c9755b26e5d26.svn-base
@@ -0,0 +1,208 @@
+/* $Id$ */
+/* 
+ * Copyright (C) 2010 Teluu Inc. (http://www.teluu.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __PJLIB_UTIL_CLI_IMP_H__
+#define __PJLIB_UTIL_CLI_IMP_H__
+
+/**
+ * @file cli_imp.h
+ * @brief Command Line Interface Implementor's API
+ */
+
+#include <pjlib-util/cli.h>
+
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJLIB_UTIL_CLI_IMP Command Line Interface Implementor's API
+ * @ingroup PJLIB_UTIL_CLI
+ * @{
+ *
+ */
+
+/**
+ * Default log level for console sessions.
+ */
+#ifndef PJ_CLI_CONSOLE_LOG_LEVEL
+#   define PJ_CLI_CONSOLE_LOG_LEVEL	PJ_LOG_MAX_LEVEL
+#endif
+
+/**
+ * Default log level for telnet sessions.
+ */
+#ifndef PJ_CLI_TELNET_LOG_LEVEL
+#   define PJ_CLI_TELNET_LOG_LEVEL	4
+#endif
+
+/**
+ * Default port number for telnet daemon.
+ */
+#ifndef PJ_CLI_TELNET_PORT
+#   define PJ_CLI_TELNET_PORT		0
+#endif
+
+/**
+ * This enumeration specifies front end types.
+ */
+typedef enum pj_cli_front_end_type
+{
+    PJ_CLI_CONSOLE_FRONT_END,	/**< Console front end.	*/
+    PJ_CLI_TELNET_FRONT_END,	/**< Telnet front end.	*/
+    PJ_CLI_HTTP_FRONT_END,	/**< HTTP front end.	*/
+    PJ_CLI_GUI_FRONT_END	/**< GUI front end.	*/
+} pj_cli_front_end_type;
+
+
+/**
+ * Front end operations. Only the CLI should call these functions
+ * directly.
+ */
+typedef struct pj_cli_front_end_op
+{
+    /**
+     * Callback to write a log message to the appropriate sessions belonging
+     * to this front end. The front end would only send the log message to
+     * the session if the session's log verbosity level is greater than the
+     * level of this log message.
+     *
+     * @param fe	The front end.
+     * @param level	Verbosity level of this message message.
+     * @param data	The message itself.
+     * @param len 	Length of this message.
+     */
+    void (*on_write_log)(pj_cli_front_end *fe, int level,
+		         const char *data, pj_size_t len);
+
+    /**
+     * Callback to be called when the application is quitting, to signal the
+     * front-end to end its main loop or any currently blocking functions,
+     * if any.
+     *
+     * @param fe	The front end.
+     * @param req	The session which requested the application quit.
+     */
+    void (*on_quit)(pj_cli_front_end *fe, pj_cli_sess *req);
+
+    /**
+     * Callback to be called to close and self destroy the front-end. This
+     * must also close any active sessions created by this front-ends.
+     *
+     * @param fe	The front end.
+     */
+    void (*on_destroy)(pj_cli_front_end *fe);
+
+} pj_cli_front_end_op;
+
+
+/**
+ * This structure describes common properties of CLI front-ends. A front-
+ * end is a mean to interact with end user, for example the CLI application
+ * may interact with console, telnet, web, or even a GUI.
+ *
+ * Each end user's interaction will create an instance of pj_cli_sess.
+ *
+ * Application instantiates the front end by calling the appropriate
+ * function to instantiate them.
+ */
+struct pj_cli_front_end
+{
+    /**
+     * Linked list members
+     */
+    PJ_DECL_LIST_MEMBER(struct pj_cli_front_end);
+
+    /**
+     * Front end type.
+     */
+    pj_cli_front_end_type type;
+
+    /**
+     * The CLI application.
+     */
+    pj_cli_t *cli;
+
+    /**
+     * Front end operations.
+     */
+    pj_cli_front_end_op *op;
+};
+
+
+/**
+ * Session operations.
+ */
+typedef struct pj_cli_sess_op
+{
+    /**
+     * Callback to be called to close and self destroy the session.
+     *
+     * @param sess	The session to destroy.
+     */
+    void (*destroy)(pj_cli_sess *sess);
+
+} pj_cli_sess_op;
+
+
+/**
+ * This structure describes common properties of a CLI session. A CLI session
+ * is the interaction of an end user to the CLI application via a specific
+ * renderer, where the renderer can be console, telnet, web, or a GUI app for
+ * mobile. A session is created by its renderer, and it's creation procedures
+ * vary among renderer (for example, a telnet session is created when the
+ * end user connects to the application, while a console session is always
+ * instantiated once the program is run).
+ */
+struct pj_cli_sess
+{
+    /**
+     * Linked list members
+     */
+    PJ_DECL_LIST_MEMBER(struct pj_cli_sess);
+
+    /**
+     * Pointer to the front-end instance which created this session.
+     */
+    pj_cli_front_end *fe;
+
+    /**
+     * Session operations.
+     */
+    pj_cli_sess_op *op;
+
+    /**
+     * Text containing session info, which is filled by the renderer when
+     * the session is created.
+     */
+    pj_str_t info;
+
+    /**
+     * Log verbosity of this session.
+     */
+    int log_level;
+
+};
+
+/**
+ * @}
+ */
+
+
+PJ_END_DECL
+
+#endif	/* __PJLIB_UTIL_CLI_IMP_H__ */
