// file expiration timer thread void * file_expiration_timer(void * opt) { u32_t current_dtn_time; file_transfer_info_list_item_t * item, * next; while(1) { pthread_sleep(10); current_dtn_time = get_current_dtn_time(); pthread_mutex_lock(&mutexdata); for(item = file_transfer_info_list.first; item != NULL; item = next) { next = item->next; /* if (item->info->last_bundle_time + item->info->expiration < current_dtn_time) { char* filename = (char*) malloc(item->info->filename_len + strlen(item->info->full_dir) +1); strcpy(filename, item->info->full_dir); strcat(filename, item->info->filename); if (remove(filename) < 0) perror("Error eliminating expired file:"); printf("Eliminated file %s because timer has expired\n", filename); file_transfer_info_list_item_delete(&file_transfer_info_list, item); free(filename); }*/ } pthread_mutex_unlock(&mutexdata); sched_yield(); } pthread_exit(NULL); }
// session expiration timer thread void * session_expiration_timer(void * opt) { u32_t current_dtn_time; struct timeval current_time; session_t * session, * next; while(1) { pthread_sleep(5); current_dtn_time = get_current_dtn_time(); gettimeofday(¤t_time, NULL); pthread_mutex_lock(&mutexdata); for(session = session_list->first; session != NULL; session = next) { next = session->next; // all status reports has been received: close session if (session->total_to_receive > 0 && session->delivered_count == session->total_to_receive) { // close monitor if dedicated if (dedicated_monitor) { kill(getpid(), SIGUSR2); } else { session_close(session_list, session); } } // stop bundle arrived but not all the status reports have arrived and the timer has expired else if (session->total_to_receive > 0 &&session->stop_arrival_time->tv_sec + session->wait_after_stop < current_time.tv_sec) { fprintf(stdout, "DTNperf monitor: Session Expired: Bundle stop arrived, but not all the status reports did\n"); // close monitor if dedicated if (dedicated_monitor) { kill(getpid(), SIGUSR2); } else { fprintf(stdout, "\tsaved log file: %s\n\n", session->full_filename); if (fclose(session->file) < 0) perror("Error closing expired file:"); session_del(session_list, session); } } // stop bundle is not yet arrived and the last bundle has expired else if (session->last_bundle_time + session->expiration < current_dtn_time) { fprintf(stdout, "DTNperf monitor: Session Expired: Bundle stop did not arrive\n"); // close monitor if dedicated if (dedicated_monitor) { kill(getpid(), SIGUSR2); } else { fprintf(stdout,"\tsaved log file: %s\n\n", session->full_filename); if (fclose(session->file) < 0) perror("Error closing expired file:"); session_del(session_list, session); } } } pthread_mutex_unlock(&mutexdata); sched_yield(); } pthread_exit(NULL); }