int main(int argc, char **argv) { cache_perf tc; unsigned long long cache_size, num_entries; unsigned long int report_interval; int accept_socket, dsocket, cntr = 0; lf_entry next_entry; if (argc != 5) usage(); if (sscanf(argv[2], "%llu", &cache_size) != 1) usage(); if (sscanf(argv[3], "%llu", &num_entries) != 1) usage(); if (sscanf(argv[4], "%lu", &report_interval) != 1) usage(); accept_socket = slisten(argv[1]); if (accept_socket == -1) usage(); fprintf(stderr, "Starting up cache sim server, params:\n"); fprintf(stderr, " port %s, cachesize %llu, num_entries %llu, ri %lu\n", argv[1], cache_size, num_entries, report_interval); if (!init_cache_el(cache_size, num_entries, &tc)) { fprintf(stderr, "initialize_cache failed.\n"); usage(); } if ( (dsocket = saccept(accept_socket)) < 0) { fprintf(stderr, "accept failed.\n"); usage(); } while(1) { int gne_res; gne_res = lf_get_next_entry(dsocket, &next_entry, 3); if ( (gne_res != 0) && (gne_res != 1)) { fprintf(stderr, "get_next_entry failed. All done!\n"); exit(0); } process_log_entry(&tc, &next_entry); cntr++; if (gne_res == 1) { fprintf(stderr, "All done!\n"); exit(0); } if ( (cntr % report_interval) == 0) dump_cache_stats(&tc, stdout); free(next_entry.url); } exit(0); }
/************************************************************* * * Main **************************************************************/ int main(int argc, char **argv) { int option; int dump_user_info = 0; int dump_stat_info = 0; char *file = NULL; int file_fd; int shmid = 0; char shmid_buff[256]; char cache_magic[64]; struct stat stat_buff; while ((option = getopt(argc, argv, "dm:s")) != -1) { switch(option) { case 'd': dump_user_info = 1; break; case 's': dump_stat_info = 1; break; case 'm': file = strdup(optarg); break; default: show_usage(); } } if (file == NULL) file = PATH_SASLAUTHD_RUNDIR "/cache.mmap"; if (stat(file, &stat_buff) == -1) { fprintf(stderr, "could not stat mmap file: %s\n", file); fprintf(stderr, "stat: %s\n", strerror(errno)); exit(1); } if ((file_fd = open(file, O_RDONLY)) < 0) { fprintf(stderr, "could not open mmap file: %s\n", file); fprintf(stderr, "open: %s\n", strerror(errno)); fprintf(stderr, "perhaps saslcache -m <path>\n"); exit(1); } if ((shm_base = mmap(NULL, stat_buff.st_size, PROT_READ, MAP_SHARED, file_fd, 0))== (void *)-1) { fprintf(stderr, "could not mmap shared memory file: %s\n", file); fprintf(stderr, "mmap: %s\n", strerror(errno)); exit(1); } memcpy(cache_magic, shm_base, 64); cache_magic[63] = '\0'; if (strcmp(cache_magic, CACHE_CACHE_MAGIC) != 0) { fprintf(stderr, "mmap file [%s] is not a valid saslauthd cache\n", file); exit(1); } table_stats = shm_base + 64; // (char *)table = (char *)table_stats + 128; table = (char *)table_stats + 128; if (dump_stat_info == 0 && dump_user_info == 0) dump_stat_info = 1; if (dump_stat_info) dump_cache_stats(); if (dump_user_info) dump_cache_users(); exit(0); }