]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
block control-z from fs cli and print a warning how to exit properly
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 4 Feb 2011 02:42:17 +0000 (20:42 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 4 Feb 2011 02:42:17 +0000 (20:42 -0600)
libs/esl/fs_cli.c

index 1e3bf04ca1f3716fdf7bf19402348f6969f2fc3c..19e8d7f82a6117aa4eeb889dcdff7b0de4fd4743 100644 (file)
@@ -8,6 +8,7 @@
 #include <signal.h>
 
 #define CMD_BUFLEN 1024
+static int WARN_STOP = 0;
 
 #ifdef WIN32
 #define strdup(src) _strdup(src)
@@ -535,6 +536,13 @@ static BOOL console_readConsole(HANDLE conIn, char* buf, int len, int* pRed, int
 static void handle_SIGINT(int sig)
 {
        if (sig);
+
+       WARN_STOP = 1;
+
+       signal(SIGINT, handle_SIGINT);
+#ifdef SIGTSTP
+       signal(SIGTSTP, handle_SIGINT);
+#endif
        return;
 }
 
@@ -581,6 +589,12 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
 
        while(thread_running && handle->connected) {
                esl_status_t status = esl_recv_event_timed(handle, 10, 1, NULL);
+
+               if (WARN_STOP) {
+                       printf("Type control-D or /exit or /quit or /bye to exit.\n\n");
+                       WARN_STOP = 0;
+               }
+
                if (status == ESL_FAIL) {
                        esl_log(ESL_LOG_WARNING, "Disconnected.\n");
                        running = -1; thread_running = 0;
@@ -1023,6 +1037,9 @@ int main(int argc, char *argv[])
        }
        
        signal(SIGINT, handle_SIGINT);
+#ifdef SIGTSTP
+       signal(SIGTSTP, handle_SIGINT);
+#endif
 #ifdef SIGQUIT
        signal(SIGQUIT, handle_SIGQUIT);
 #endif