summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m
diff options
context:
space:
mode:
Diffstat (limited to 'pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m')
-rw-r--r--pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m133
1 files changed, 94 insertions, 39 deletions
diff --git a/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m b/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m
index f1775bc2..739d88ad 100644
--- a/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m
+++ b/pjsip-apps/src/pjsua/ios/ipjsua/ipjsuaAppDelegate.m
@@ -10,63 +10,118 @@
#import <pjlib.h>
#import <pjsua.h>
#import <pj/log.h>
-#include "../../pjsua_common.h"
+
+#include "../../pjsua_app.h"
+#include "../../pjsua_app_config.h"
#import "ipjsuaViewController.h"
@implementation ipjsuaAppDelegate
-#define KEEP_ALIVE_INTERVAL 600
-
-static int _argc = 4;
-static char *_argv[] = {"",
- "--use-cli",
- "--no-cli-console",
- "--cli-telnet-port=6378"
-};
+#define THIS_FILE "ipjsuaAppDelegate.m"
-ipjsuaAppDelegate *app;
-extern pj_cli_telnet_on_started on_started_cb;
-extern pj_cli_on_quit on_quit_cb;
-extern pj_cli_on_destroy on_destroy_cb;
-extern pj_cli_on_restart_pjsua on_restart_pjsua_cb;
-static pj_thread_desc a_thread_desc;
-static pj_thread_t *a_thread;
+#define KEEP_ALIVE_INTERVAL 600
-int main_func(int argc, char *argv[]);
+ipjsuaAppDelegate *app;
+static pjsua_app_cfg_t app_cfg;
+static bool isShuttingDown;
+static char **restartArgv;
+static int restartArgc;
+static pj_thread_desc a_thread_desc;
+static pj_thread_t *a_thread;
-static void cli_telnet_started(pj_cli_telnet_info *telnet_info)
+static void displayMsg(const char *msg)
{
- PJ_LOG(3,("ipjsua", "Telnet to %.*s:%d",
- telnet_info->ip_address.slen, telnet_info->ip_address.ptr,
- telnet_info->port));
- NSString *str = [NSString stringWithFormat:@"Telnet to %.*s:%d",
- (int)telnet_info->ip_address.slen,
- telnet_info->ip_address.ptr,
- telnet_info->port];
+ NSString *str = [NSString stringWithFormat:@"%s", msg];
[app performSelectorOnMainThread:@selector(displayMsg:) withObject:str
- waitUntilDone:NO];
+ waitUntilDone:NO];
+}
+
+static void pjsuaOnStartedCb(pj_status_t status, const char* msg)
+{
+ char errmsg[PJ_ERR_MSG_SIZE];
+
+ if (status != PJ_SUCCESS && (!msg || !*msg)) {
+ pj_strerror(status, errmsg, sizeof(errmsg));
+ PJ_LOG(3,(THIS_FILE, "Error: %s", errmsg));
+ msg = errmsg;
+ } else {
+ PJ_LOG(3,(THIS_FILE, "Started: %s", msg));
+ }
+
+ displayMsg(msg);
}
-static void cli_on_quit (pj_bool_t is_restarted)
+static void pjsuaOnStoppedCb(pj_bool_t restart,
+ int argc, char** argv)
{
- PJ_LOG(3,("ipjsua", "CLI quit, restart(%d)", is_restarted));
- if (!is_restarted) {
- NSString *str = [NSString stringWithFormat:@"CLI quit, "
- "telnet unavailable"];
- [app performSelectorOnMainThread:@selector(displayMsg:) withObject:str
- waitUntilDone:NO];
+ PJ_LOG(3,("ipjsua", "CLI %s request", (restart? "restart" : "shutdown")));
+ if (restart) {
+ displayMsg("Restarting..");
+ pj_thread_sleep(100);
+ app_cfg.argc = argc;
+ app_cfg.argv = argv;
+ } else {
+ displayMsg("Shutting down..");
+ pj_thread_sleep(100);
+ isShuttingDown = true;
}
}
-- (void)displayMsg:(NSString *)str {
+static void pjsuaOnAppConfigCb(pjsua_app_config *cfg)
+{
+ PJ_UNUSED_ARG(cfg);
+}
+
+- (void)displayMsg:(NSString *)str
+{
app.viewController.textLabel.text = str;
}
-- (void)start_app {
- on_started_cb = &cli_telnet_started;
- on_quit_cb = &cli_on_quit;
- main_func(_argc, _argv);
+- (void)pjsuaStart
+{
+ // TODO: read from config?
+ const char **argv = pjsua_app_def_argv;
+ int argc = PJ_ARRAY_SIZE(pjsua_app_def_argv) -1;
+ pj_status_t status;
+
+ isShuttingDown = false;
+ displayMsg("Starting..");
+
+ pj_bzero(&app_cfg, sizeof(app_cfg));
+ if (restartArgc) {
+ app_cfg.argc = restartArgc;
+ app_cfg.argv = restartArgv;
+ } else {
+ app_cfg.argc = argc;
+ app_cfg.argv = (char**)argv;
+ }
+ app_cfg.on_started = &pjsuaOnStartedCb;
+ app_cfg.on_stopped = &pjsuaOnStoppedCb;
+ app_cfg.on_config_init = &pjsuaOnAppConfigCb;
+
+ while (!isShuttingDown) {
+ status = pjsua_app_init(&app_cfg);
+ if (status != PJ_SUCCESS) {
+ char errmsg[PJ_ERR_MSG_SIZE];
+ pj_strerror(status, errmsg, sizeof(errmsg));
+ displayMsg(errmsg);
+ pjsua_app_destroy();
+ return;
+ }
+
+ status = pjsua_app_run(PJ_TRUE);
+ if (status != PJ_SUCCESS) {
+ char errmsg[PJ_ERR_MSG_SIZE];
+ pj_strerror(status, errmsg, sizeof(errmsg));
+ displayMsg(errmsg);
+ }
+
+ pjsua_app_destroy();
+ }
+
+ restartArgv = NULL;
+ restartArgc = 0;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
@@ -84,7 +139,7 @@ static void cli_on_quit (pj_bool_t is_restarted)
app = self;
/* Start pjsua app thread */
- [NSThread detachNewThreadSelector:@selector(start_app) toTarget:self withObject:nil];
+ [NSThread detachNewThreadSelector:@selector(pjsuaStart) toTarget:self withObject:nil];
return YES;
}