void on_arpping_timer_handler2(time_t cur_time) { if(g_bInitialize==0) return; thread_arpping(g_scan_interface); query_one_hostname(); //- Rescan samba server if( g_current_time > RE_SCAN_TIME_INTERVAL && g_threadIndex == MAX_THREADS ){ g_rescancount++; g_threadIndex = THREAD_BEGIN_INDEX;; char strTime[9] = {0}; strftime(strTime, sizeof(strTime), "%T", localtime(&cur_time)); Cdbg(DBE, "start to rescan samba server count=[%d], time_offset=[%d], time=[%s]\n", g_rescancount, g_current_time, strTime); g_current_time = 0; g_begin_time = 0; init_a_srvInfo(); } if(g_useSystemTimer==1){ if(g_begin_time==0) g_begin_time = cur_time; else g_current_time = cur_time - g_begin_time; } else{ g_current_time += ARP_TIME_INTERVAL; } }
int main(int argc, char *argv[]) { int o; while(-1 != (o = getopt(argc, argv, "f:m:hvVDpt"))) { switch(o) { case 'f': strcpy(g_scan_interface, optarg); break; } } //- Check if same process is running. FILE *fp = fopen(LIGHTTPD_ARPPING_PID_FILE_PATH, "r"); if (fp) { fclose(fp); exit(EXIT_FAILURE); return 0; } //- Write PID file pid_t pid = getpid(); fp = fopen(LIGHTTPD_ARPPING_PID_FILE_PATH, "w"); if (!fp) { exit(EXIT_FAILURE); } fprintf(fp, "%d\n", pid); fclose(fp); #if EMBEDDED_EANBLE sigset_t sigs_to_catch; //- set the signal handler sigemptyset(&sigs_to_catch); sigaddset(&sigs_to_catch, SIGTERM); sigaddset(&sigs_to_catch, SIGUSR1); sigprocmask(SIG_UNBLOCK, &sigs_to_catch, NULL); signal(SIGTERM, sigaction_handler); signal(SIGUSR1, sigaction_handler); #else struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = SIG_IGN; sigaction(SIGPIPE, &act, NULL); sigaction(SIGUSR1, &act, NULL); act.sa_sigaction = sigaction_handler; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGINT, &act, NULL); sigaction(SIGTERM, &act, NULL); sigaction(SIGHUP, &act, NULL); sigaction(SIGALRM, &act, NULL); sigaction(SIGCHLD, &act, NULL); sigaction(SIGUSR1, &act, NULL); #endif //int dbglv = -1;//9; int dbglv = 0; smbc_init(get_auth_data_fn, dbglv); start_scan_sambaserver(0); time_t prv_ts = 0; while (!is_shutdown) { sleep(10); time_t cur_ts = time(NULL); #if EMBEDDED_EANBLE if(prv_ts == 0 || cur_ts - prv_ts >= ARP_TIME_INTERVAL){ dumparptable(); query_one_hostname(); prv_ts = cur_ts; } #else if( prv_ts == 0 || cur_ts - prv_ts >= ARP_TIME_INTERVAL ){ on_arpping_timer_handler2(0); prv_ts = cur_ts; } #endif if (g_kill_list) { smb_srv_info_t *c; smb_srv_info_t *tmp = NULL; g_kill_list = 0; c = smb_srv_info_list; if (c != NULL) { while (1) { int end = (c->next == NULL) ? 1 : 0; if (end == 0) { tmp = c->next; Cdbg(DBE, "next, ip=%s", tmp->ip->ptr); } else tmp = NULL; if (c) { Cdbg(DBE, "remove , ip=[%s]", c->ip->ptr); DLIST_REMOVE(smb_srv_info_list, c); free(c); } else break; if (end == 1) break; c = tmp; } } g_threadIndex = 0; } } Cdbg(DBE, "Success to terminate lighttpd-arpping....."); exit(EXIT_SUCCESS); return 0; }
int main(int argc, char *argv[]) { int o; while(-1 != (o = getopt(argc, argv, "f:m:hvVDpt"))) { switch(o) { case 'f': strcpy(g_scan_interface, optarg); break; } } //- Check if same process is running. FILE *fp = fopen(LIGHTTPD_ARPPING_PID_FILE_PATH, "r"); if (fp) { fclose(fp); Cdbg(DBE, "lighttpd-arpping is already exist!"); return 0; } //- Write PID file pid_t pid = getpid(); fp = fopen(LIGHTTPD_ARPPING_PID_FILE_PATH, "w"); if (!fp) { exit(EXIT_FAILURE); } fprintf(fp, "%d\n", pid); fclose(fp); #if EMBEDDED_EANBLE sigset_t sigs_to_catch; //- set the signal handler sigemptyset(&sigs_to_catch); sigaddset(&sigs_to_catch, SIGTERM); sigaddset(&sigs_to_catch, SIGUSR1); sigprocmask(SIG_UNBLOCK, &sigs_to_catch, NULL); signal(SIGTERM, sigaction_handler); signal(SIGUSR1, sigaction_handler); #else struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = SIG_IGN; sigaction(SIGPIPE, &act, NULL); sigaction(SIGUSR1, &act, NULL); act.sa_sigaction = sigaction_handler; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; sigaction(SIGINT, &act, NULL); sigaction(SIGTERM, &act, NULL); sigaction(SIGHUP, &act, NULL); sigaction(SIGALRM, &act, NULL); sigaction(SIGCHLD, &act, NULL); sigaction(SIGUSR1, &act, NULL); #endif int dbglv = 9; smbc_init(get_auth_data_fn, dbglv); Cdbg(DBE, "start arpping_thread..."); start_scan_sambaserver(0); time_t prv_ts = 0; while (!is_shutdown) { sleep(10); time_t cur_ts = time(NULL); #if EMBEDDED_EANBLE if(prv_ts == 0 || cur_ts - prv_ts >= ARP_TIME_INTERVAL){ dumparptable(); query_one_hostname(); prv_ts = cur_ts; } #else if(cur_ts - prv_ts >= ARP_TIME_INTERVAL){ on_arpping_timer_handler2(0); prv_ts = cur_ts; } #endif } fprintf(stderr, "Success to terminate lighttpd-arpping.....\n"); exit(EXIT_SUCCESS); }