Skip to content
Snippets Groups Projects
asterisk.c 53.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • James Golovich's avatar
    James Golovich committed
    	if (option_nofork)
    		consolethread = pthread_self();
    
    Mark Spencer's avatar
    Mark Spencer committed
    	fully_booted = 1;
    
    Mark Spencer's avatar
    Mark Spencer committed
    	pthread_sigmask(SIG_UNBLOCK, &sigs, NULL);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	time(&ast_startuptime);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_cli_register(&astshutdownnow);
    	ast_cli_register(&astshutdowngracefully);
    	ast_cli_register(&astrestartnow);
    	ast_cli_register(&astrestartgracefully);
    	ast_cli_register(&astrestartwhenconvenient);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_cli_register(&astshutdownwhenconvenient);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_cli_register(&aborthalt);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	ast_cli_register(&astbang);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	if (option_console) {
    		/* Console stuff now... */
    		/* Register our quit function */
    
    Mark Spencer's avatar
    Mark Spencer committed
    		char title[256];
    		set_icon("Asterisk");
    
    		snprintf(title, sizeof(title), "Asterisk Console on '%s' (pid %d)", hostname, ast_mainpid);
    
    Mark Spencer's avatar
    Mark Spencer committed
    		set_title(title);
    
    		ast_cli_register(&quit);
    		ast_cli_register(&astexit);
    
    		for (;;) {
    			buf = (char *)el_gets(el, &num);
    			if (buf) {
    				if (buf[strlen(buf)-1] == '\n')
    					buf[strlen(buf)-1] = '\0';
    
    				consolehandler((char *)buf);
    
    				if (write(STDOUT_FILENO, "\nUse EXIT or QUIT to exit the asterisk console\n",
    								  strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
    					/* Whoa, stdout disappeared from under us... Make /dev/null's */
    					int fd;
    					fd = open("/dev/null", O_RDWR);
    					if (fd > -1) {
    						dup2(fd, STDOUT_FILENO);
    						dup2(fd, STDIN_FILENO);
    					} else
    						ast_log(LOG_WARNING, "Failed to open /dev/null to recover from dead console.  Bad things will happen!\n");
    					break;
    				}
    
    Mark Spencer's avatar
    Mark Spencer committed
    	}
    
    	/* Do nothing */
    	for(;;) 
    		poll(silly_macos,0, -1);
    
    Mark Spencer's avatar
    Mark Spencer committed
    	return 0;
    }