summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pjsua/main.c
diff options
context:
space:
mode:
authorDavid M. Lee <dlee@digium.com>2013-01-07 14:24:28 -0600
committerDavid M. Lee <dlee@digium.com>2013-01-07 14:24:28 -0600
commitf3ab456a17af1c89a6e3be4d20c5944853df1cb0 (patch)
treed00e1a332cd038a6d906a1ea0ac91e1a4458e617 /pjsip-apps/src/pjsua/main.c
Import pjproject-2.0.1
Diffstat (limited to 'pjsip-apps/src/pjsua/main.c')
-rw-r--r--pjsip-apps/src/pjsua/main.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/pjsip-apps/src/pjsua/main.c b/pjsip-apps/src/pjsua/main.c
new file mode 100644
index 0000000..8f6bd67
--- /dev/null
+++ b/pjsip-apps/src/pjsua/main.c
@@ -0,0 +1,113 @@
+/* $Id: main.c 3664 2011-07-19 03:42:28Z nanang $ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * 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
+ */
+#include <pjsua-lib/pjsua.h>
+
+
+#define THIS_FILE "main.c"
+
+
+/*
+ * These are defined in pjsua_app.c.
+ */
+extern pj_bool_t app_restart;
+pj_status_t app_init(int argc, char *argv[]);
+pj_status_t app_main(void);
+pj_status_t app_destroy(void);
+
+
+#if defined(PJ_WIN32) && PJ_WIN32!=0
+#include <windows.h>
+
+static pj_thread_desc handler_desc;
+
+static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
+{
+ pj_thread_t *thread;
+
+ switch (fdwCtrlType)
+ {
+ // Handle the CTRL+C signal.
+
+ case CTRL_C_EVENT:
+ case CTRL_CLOSE_EVENT:
+ case CTRL_BREAK_EVENT:
+ case CTRL_LOGOFF_EVENT:
+ case CTRL_SHUTDOWN_EVENT:
+ pj_thread_register("ctrlhandler", handler_desc, &thread);
+ PJ_LOG(3,(THIS_FILE, "Ctrl-C detected, quitting.."));
+ app_destroy();
+ ExitProcess(1);
+ PJ_UNREACHED(return TRUE;)
+
+ default:
+
+ return FALSE;
+ }
+}
+
+static void setup_signal_handler(void)
+{
+ SetConsoleCtrlHandler(&CtrlHandler, TRUE);
+}
+
+static void setup_socket_signal()
+{
+}
+
+#else
+#include <signal.h>
+
+static void setup_signal_handler(void)
+{
+}
+
+static void setup_socket_signal()
+{
+ signal(SIGPIPE, SIG_IGN);
+}
+
+#endif
+
+static int main_func(int argc, char *argv[])
+{
+ setup_socket_signal();
+
+ do {
+ app_restart = PJ_FALSE;
+
+ if (app_init(argc, argv) != PJ_SUCCESS)
+ return 1;
+
+ setup_signal_handler();
+
+ app_main();
+ app_destroy();
+
+ /* This is on purpose */
+ app_destroy();
+ } while (app_restart);
+
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ return pj_run_app(&main_func, argc, argv, 0);
+}