mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Version 0.2.0 from FTP
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@524 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										57
									
								
								asterisk.c
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								asterisk.c
									
									
									
									
									
								
							| @@ -24,6 +24,7 @@ | ||||
| #include <asterisk/image.h> | ||||
| #include <asterisk/tdd.h> | ||||
| #include <asterisk/term.h> | ||||
| #include <asterisk/manager.h> | ||||
| #include <fcntl.h> | ||||
| #include <stdio.h> | ||||
| #include <signal.h> | ||||
| @@ -148,6 +149,8 @@ static void *listener(void *unused) | ||||
| 	pthread_attr_init(&attr); | ||||
| 	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); | ||||
| 	for(;;) { | ||||
| 		if (ast_socket < 0) | ||||
| 			return NULL; | ||||
| 		len = sizeof(sun); | ||||
| 		s = accept(ast_socket, (struct sockaddr *)&sun, &len); | ||||
| 		if (s < 0) { | ||||
| @@ -363,12 +366,15 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart) | ||||
| 		ast_verbose("Asterisk %s ending (%d).\n", ast_active_channels() ? "uncleanly" : "cleanly", num); | ||||
| 	else if (option_debug) | ||||
| 		ast_log(LOG_DEBUG, "Asterisk ending (%d).\n", num); | ||||
| 	if (ast_socket > -1) | ||||
| 	if (ast_socket > -1) { | ||||
| 		close(ast_socket); | ||||
| 		ast_socket = -1; | ||||
| 	} | ||||
| 	if (ast_consock > -1) | ||||
| 		close(ast_consock); | ||||
| 	if (ast_socket > -1) | ||||
| 		unlink(AST_SOCKET); | ||||
| 	unlink(AST_PID); | ||||
| 	printf(term_quit()); | ||||
| 	if (restart) { | ||||
| 		if (option_verbose || option_console) | ||||
| @@ -417,7 +423,8 @@ static void console_verboser(char *s, int pos, int replace, int complete) | ||||
| 	fflush(stdout); | ||||
| 	if (complete) | ||||
| 	/* Wake up a select()ing console */ | ||||
| 		pthread_kill(consolethread, SIGURG); | ||||
| 		if (consolethread > -1) | ||||
| 			pthread_kill(consolethread, SIGURG); | ||||
| } | ||||
|  | ||||
| static void consolehandler(char *s) | ||||
| @@ -638,7 +645,7 @@ static void ast_remotecontrol(char * data) | ||||
| 	ast_cli_register(&astshutdown); | ||||
| #endif	 | ||||
| 	rl_callback_handler_install(tmp, remoteconsolehandler); | ||||
| 	rl_completion_entry_function = (Function *)console_cli_generator; | ||||
| 	rl_completion_entry_function = (void *)(Function *)console_cli_generator; | ||||
| 	for(;;) { | ||||
| 		FD_ZERO(&rfds); | ||||
| 		FD_SET(ast_consock, &rfds); | ||||
| @@ -695,17 +702,36 @@ static void ast_remotecontrol(char * data) | ||||
| 	printf("\nDisconnected from Asterisk server\n"); | ||||
| } | ||||
|  | ||||
| int show_cli_help(void) { | ||||
| 	printf("Asterisk " ASTERISK_VERSION ", Copyright (C) 2000-2002, Digium.\n"); | ||||
| 	printf("Usage: asterisk [OPTIONS]\n"); | ||||
| 	printf("Valid Options:\n"); | ||||
| 	printf("   -h           This help screen\n"); | ||||
| 	printf("   -r           Connect to Asterisk on this machine\n"); | ||||
| 	printf("   -f           Do not fork\n"); | ||||
| 	printf("   -n           Disable console colorization\n"); | ||||
| 	printf("   -p           Run as pseudo-realtime thread\n"); | ||||
| 	printf("   -v           Increase verbosity (multiple v's = more verbose)\n"); | ||||
| 	printf("   -q           Quiet mode (supress output)\n"); | ||||
| 	printf("   -x <cmd>     Execute command <cmd> (only valid with -r)\n"); | ||||
| 	printf("   -i           Initializie crypto keys at startup\n"); | ||||
| 	printf("   -c           Provide console CLI\n"); | ||||
| 	printf("   -d           Enable extra debugging\n"); | ||||
| 	printf("\n"); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
| 	char c; | ||||
| 	fd_set rfds; | ||||
| 	int res; | ||||
| 	int pid; | ||||
| 	char filename[80] = ""; | ||||
| 	char hostname[256]; | ||||
| 	char tmp[80]; | ||||
| 	char * xarg = NULL; | ||||
| 	int x; | ||||
| 	FILE *f; | ||||
| 	sigset_t sigs; | ||||
|  | ||||
| 	/* Remember original args for restart */ | ||||
| @@ -732,7 +758,7 @@ int main(int argc, char *argv[]) | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	/* Check for options */ | ||||
| 	while((c=getopt(argc, argv, "fdvqprcinx:")) != EOF) { | ||||
| 	while((c=getopt(argc, argv, "hfdvqprcinx:")) != EOF) { | ||||
| 		switch(c) { | ||||
| 		case 'd': | ||||
| 			option_debug++; | ||||
| @@ -769,6 +795,9 @@ int main(int argc, char *argv[]) | ||||
| 		case 'i': | ||||
| 			option_initcrypto++; | ||||
| 			break; | ||||
| 		case 'h': | ||||
| 			show_cli_help(); | ||||
| 			exit(0); | ||||
| 		case '?': | ||||
| 			exit(1); | ||||
| 		} | ||||
| @@ -804,8 +833,19 @@ int main(int argc, char *argv[]) | ||||
| 		printf(term_quit()); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	/* Blindly write pid file since we couldn't connect */ | ||||
| 	unlink(AST_PID); | ||||
| 	f = fopen(AST_PID, "w"); | ||||
| 	if (f) { | ||||
| 		fprintf(f, "%d\n", getpid()); | ||||
| 		fclose(f); | ||||
| 	} else | ||||
| 		ast_log(LOG_WARNING, "Unable to open pid file '%s': %s\n", AST_PID, strerror(errno)); | ||||
|  | ||||
| 	if (!option_verbose && !option_debug && !option_nofork && !option_console) { | ||||
| #if 1 | ||||
| 		daemon(0,0); | ||||
| #else	 | ||||
| 		pid = fork(); | ||||
| 		if (pid < 0) { | ||||
| 			ast_log(LOG_ERROR, "Unable to fork(): %s\n", strerror(errno)); | ||||
| @@ -814,6 +854,7 @@ int main(int argc, char *argv[]) | ||||
| 		} | ||||
| 		if (pid)  | ||||
| 			exit(0); | ||||
| #endif			 | ||||
| 	} | ||||
|  | ||||
| 	ast_makesocket(); | ||||
| @@ -847,6 +888,10 @@ int main(int argc, char *argv[]) | ||||
| 		printf(term_quit()); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	if (init_manager()) { | ||||
| 		printf(term_quit()); | ||||
| 		exit(1); | ||||
| 	} | ||||
| 	if (ast_image_init()) { | ||||
| 		printf(term_quit()); | ||||
| 		exit(1); | ||||
| @@ -890,7 +935,7 @@ int main(int argc, char *argv[]) | ||||
| 			read_history(filename); | ||||
| 		term_prompt(tmp, ASTERISK_PROMPT, sizeof(tmp)); | ||||
| 		rl_callback_handler_install(tmp, consolehandler); | ||||
| 		rl_completion_entry_function = (Function *)cli_generator; | ||||
| 		rl_completion_entry_function = (void *)(Function *)cli_generator; | ||||
| 		for(;;) { | ||||
| 			FD_ZERO(&rfds); | ||||
| 			FD_SET(STDIN_FILENO, &rfds); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user