/* * Print error message and exit program. */ void fatal(unsigned int errnum, const char *fmt,...) { va_list args; list *l; session *s; va_start(args, fmt); fprintf(stderr, "imapfilter: "); vfprintf(stderr, fmt, args); va_end(args); if (logfp) { va_start(args, fmt); fprintf(logfp, "%s: ", log_time()); vfprintf(logfp, fmt, args); fflush(logfp); va_end(args); } for (l = sessions; l; l = l->next) { s = l->data; close_connection(s); } close_log(); close_debug(); exit(errnum); }
int main(int argc, char * argv[]) { #ifdef DEBUG open_debug(); #endif init_static_control_simple(); void ask(addr_t addr) { char str[DEFAULT_TRANSFER]; struct args args = { .log_addr = addr, .log_len = DEFAULT_TRANSFER, .phys_addr = (unsigned long)str, .direction = direct_read }; root_strategy->ops[0][opcode_trans]((void*)root_strategy, &args, ""); if(args.success) { printf("%s", str); } } bool cmd(addr_t addr, char * str, char * param) { struct args args = { .log_addr = addr, .log_len = strlen(str), .phys_addr = (unsigned long)str, .direction = direct_write }; root_strategy->ops[0][opcode_trans]((void*)root_strategy, &args, param); return args.success; } addr_t boot(char * str, char * param) { struct args args = { .log_len = DEFAULT_TRANSFER, .reader = FALSE, .exclu = TRUE, .action = action_wait, .melt = TRUE, .try_len = DEFAULT_TRANSFER, .op_code = opcode_gadr }; root_strategy->ops[0][opcode_gadr]((void*)root_strategy, &args, param); if(!args.success) { printf("!!!!! gadrcreateget failed\n"); exit(-1); } args.log_len = strlen(str); args.phys_addr = (unsigned long)str; args.direction = direct_write; args.op_code = opcode_trans; root_strategy->ops[0][opcode_trans]((void*)root_strategy, &args, param); if(!args.success) { printf("!!!!! trans '%s' failed\n", str); exit(-1); } return args.log_addr; } char str[256]; addr_t control = DEFAULT_TRANSFER; cmd(control, "output:=control\n", ""); // basic level #if 0 addr_t dev = boot("brick:=device_dummy_linux\n output:=out", "testfile"); sprintf(str, "brick:=buffer_dummy_linux\n \n connect dev:=%llx:out\n output:=out {\n", dev); addr_t buffer = boot(str, ""); sprintf(str, "brick:=map_simple\n connect in:=%llx:out\noutput:=out", buffer); #else sprintf(str, "brick:=map_dummy\n output:=out{\n"); #endif addr_t map = boot(str, ""); sprintf(str, "brick:=adapt_meta\n connect in:=%llx:out\n output:=out\n", map); addr_t meta = boot(str, ""); #if 0 sprintf(str, "brick:=spy_trace\n connect in:=%llx:out\n output:=out\n", meta); meta = boot(str, "spylog"); #endif // create root hook cmd(0, "output:=_root", ""); cmd(meta, "connect hook:=0:_root", ""); // strategy level sprintf(str, "brick:=fs_simple\n connect strat:=%llx:control\n output:=control{\n", control); addr_t fs = boot(str, "_root"); // testing sprintf(str, "brick:=bench_fs\n connect strat:=%llx:control\n", fs); addr_t bench = boot(str, ""); #if 1 ask(0); ask(DEFAULT_TRANSFER); ask(0x3000); #endif printf("================== STARTING BENCH ================\n"); cmd(bench, "output:=dummy", "1000"); printf("================== END BENCH ================\n"); #ifdef MOVE_COUNT extern void print_counts(void); print_counts(); printf("------------------------------------\n"); printf("_makespace: shortcuts: %d count1: %d count2: %d\n", count_0, count_1, count_2); printf("creates (count_c1) = %d, triggering creates (count_c2) = %d\n", count_c1, count_c2); #endif cmd(meta, "brick/=adapt_meta", ""); cmd(map, "brick/=map_dummy", ""); #ifdef DEBUG close_debug(); #endif return 0; }
int main(int argc, char * argv[]) { #ifdef DEBUG open_debug(); #endif init_static_control_simple(); bool cmd(addr_t addr, char * str, char * param) { struct args args = { .log_addr = addr, .log_len = strlen(str), .phys_addr = (unsigned long)str, .direction = direct_write }; root_strategy->ops[0][opcode_trans]((void*)root_strategy, &args, param); return args.success; } addr_t boot(char * str, char * param) { struct args args = { .log_len = DEFAULT_TRANSFER, .reader = FALSE, .exclu = TRUE, .action = action_wait, .melt = TRUE, .try_len = DEFAULT_TRANSFER, .op_code = opcode_gadr }; root_strategy->ops[0][opcode_gadr]((void*)root_strategy, &args, param); if(!args.success) { printf("!!!!! gadr failed\n"); exit(-1); } args.log_len = strlen(str); args.phys_addr = (unsigned long)str; args.direction = direct_write; args.op_code = opcode_trans; root_strategy->ops[0][opcode_trans]((void*)root_strategy, &args, param); if(!args.success) { printf("!!!!! trans '%s' failed\n", str); exit(-1); } return args.log_addr; } char str[256]; addr_t control = DEFAULT_TRANSFER; // basic level #if 0 addr_t dev = boot("brick:=device_dummy_linux\n output:=out", "testfile"); sprintf(str, "brick:=buffer_dummy_linux\n \n connect dev:=%llx:out\n output:=out {\n", dev); addr_t buffer = boot(str, ""); sprintf(str, "brick:=map_simple\n connect in:=%llx:out\noutput:=out", buffer); #else sprintf(str, "brick:=map_dummy\n output:=out{\n"); #endif addr_t map = boot(str, ""); sprintf(str, "brick:=adapt_meta\n connect in:=%llx:out\n output:=out\n", map); addr_t meta = boot(str, ""); // create root hook cmd(0, "output:=_root", ""); cmd(meta, "connect hook:=0:_root", ""); // strategy level sprintf(str, "brick:=fs_simple\n connect strat:=%llx:control\n output:=control{\n", control); addr_t fs = boot(str, "_root"); // testing sprintf(str, "brick:=bench_fs\n connect strat:=%llx:control\n", fs); addr_t bench = boot(str, ""); printf("================== STARTING BENCH ================\n"); cmd(bench, "output:=dummy", "1"); printf("================== END BENCH ================\n"); cmd(meta, "brick/=adapt_meta", ""); printf("------------------------------------\n"); printf("size_input=%u\n", (unsigned) sizeof(struct input)); printf("size_output=%u\n", (unsigned) sizeof(struct output)); printf("size_conn=%u\n", (unsigned) sizeof(struct connector_header)); printf("size_brick=%u\n", (unsigned) sizeof(struct brick_header)); struct timespec t0, t1; printf("------------------------------------\n"); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0); int i; for(i = 0; i < 1000000; i++) { getpid(); getpid(); } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1); printf("getpid time=%11lld\n", ((long long)t1.tv_sec-(long long)t0.tv_sec)*1000LL + ((long long)t1.tv_nsec-(long long)t0.tv_nsec)/1000000LL); printf("------------------------------------\n"); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0); for(i = 0; i < 1000000; i++) { int fd = open("/etc/passwd", O_RDONLY); close(fd); } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1); printf("open time=%11lld\n", ((long long)t1.tv_sec-(long long)t0.tv_sec)*1000LL + ((long long)t1.tv_nsec-(long long)t0.tv_nsec)/1000000LL); printf("------------------------------------\n"); int fd = open("/etc/services", O_RDONLY); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0); for(i = 0; i < 1000000; i++) { char buf[4096]; lseek(fd, 0, SEEK_SET); read(fd, buf, 4096); } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1); close(fd); printf("read time=%11lld\n", ((long long)t1.tv_sec-(long long)t0.tv_sec)*1000LL + ((long long)t1.tv_nsec-(long long)t0.tv_nsec)/1000000LL); printf("------------------------------------\n"); sprintf(str, "brick:=adapt_meta\n connect in:=%llx:out\n", map); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0); for(i = 0; i < 1000000; i++) { struct conn_info conn1 = { .conn_addr = meta, .conn_name = "in" }; struct conn_info conn2 = { .conn_addr = map, .conn_name = "out" }; struct args args = { .log_addr = meta, .name = "adapt_meta", .conn1 = &conn1, .conn2 = &conn2 }; root_strategy->ops[0][opcode_instbrick]((void*)root_strategy, &args, ""); root_strategy->ops[0][opcode_connect]((void*)root_strategy, &args, ""); root_strategy->ops[0][opcode_deinstbrick]((void*)root_strategy, &args, ""); #if 0 addr_t adr = cmd(meta, str, ""); cmd(meta, "brick/=adapt_meta\n", ""); #endif } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1); printf("inst time=%11lld\n", ((long long)t1.tv_sec-(long long)t0.tv_sec)*1000LL + ((long long)t1.tv_nsec-(long long)t0.tv_nsec)/1000000LL); printf("------------------------------------\n"); cmd(map, "brick/=map_dummy", ""); #ifdef DEBUG close_debug(); #endif return 0; }
/* * IMAPFilter: an IMAP mail filtering utility. */ int main(int argc, char *argv[]) { int c; char *cafile = NULL, *capath = NULL; setlocale(LC_CTYPE, ""); opts.verbose = 0; opts.interactive = 0; opts.log = NULL; opts.config = NULL; opts.oneline = NULL; opts.debug = NULL; opts.truststore = NULL; if (exists_dir("/etc/ssl/certs")) opts.truststore = "/etc/ssl/certs"; else if (exists_file("/etc/ssl/cert.pem")) opts.truststore = "/etc/ssl/cert.pem"; env.home = NULL; env.pathmax = -1; while ((c = getopt(argc, argv, "Vc:d:e:il:t:v?")) != -1) { switch (c) { case 'V': version(); /* NOTREACHED */ break; case 'c': opts.config = optarg; break; case 'd': opts.debug = optarg; break; case 'e': opts.oneline = optarg; break; case 'i': opts.interactive = 1; break; case 'l': opts.log = optarg; break; case 't': opts.truststore = optarg; break; case 'v': opts.verbose = 1; break; case '?': default: usage(); /* NOTREACHED */ break; } } get_pathmax(); open_debug(); create_homedir(); catch_signals(); open_log(); if (opts.config == NULL) opts.config = get_filepath("config.lua"); buffer_init(&ibuf, INPUT_BUF); buffer_init(&obuf, OUTPUT_BUF); buffer_init(&nbuf, NAMESPACE_BUF); buffer_init(&cbuf, CONVERSION_BUF); regexp_compile(responses); SSL_library_init(); SSL_load_error_strings(); ssl3ctx = SSL_CTX_new(SSLv3_client_method()); ssl23ctx = SSL_CTX_new(SSLv23_client_method()); tls1ctx = SSL_CTX_new(TLSv1_client_method()); #if OPENSSL_VERSION_NUMBER >= 0x01000100fL tls11ctx = SSL_CTX_new(TLSv1_1_client_method()); tls12ctx = SSL_CTX_new(TLSv1_2_client_method()); #endif if (exists_dir(opts.truststore)) capath = opts.truststore; else if (exists_file(opts.truststore)) cafile = opts.truststore; SSL_CTX_load_verify_locations(ssl3ctx, cafile, capath); SSL_CTX_load_verify_locations(ssl23ctx, cafile, capath); SSL_CTX_load_verify_locations(tls1ctx, cafile, capath); #if OPENSSL_VERSION_NUMBER >= 0x01000100fL SSL_CTX_load_verify_locations(tls11ctx, cafile, capath); SSL_CTX_load_verify_locations(tls12ctx, cafile, capath); #endif start_lua(); #if LUA_VERSION_NUM < 502 { list *l; session *s; l = sessions; while (l != NULL) { s = l->data; l = l->next; request_logout(s); } } #endif stop_lua(); SSL_CTX_free(ssl3ctx); SSL_CTX_free(ssl23ctx); SSL_CTX_free(tls1ctx); #if OPENSSL_VERSION_NUMBER >= 0x01000100fL SSL_CTX_free(tls11ctx); SSL_CTX_free(tls12ctx); #endif ERR_free_strings(); regexp_free(responses); buffer_free(&ibuf); buffer_free(&obuf); buffer_free(&nbuf); buffer_free(&cbuf); xfree(env.home); close_log(); close_debug(); exit(0); }
/* * IMAPFilter: an IMAP mail filtering utility. */ int main(int argc, char *argv[]) { int c; setlocale(LC_CTYPE, ""); opts.verbose = 0; opts.interactive = 0; opts.log = NULL; opts.config = NULL; opts.oneline = NULL; opts.debug = NULL; env.home = NULL; env.pathmax = -1; while ((c = getopt(argc, argv, "Vc:d:e:il:v?")) != -1) { switch (c) { case 'V': version(); /* NOTREACHED */ break; case 'c': opts.config = optarg; break; case 'd': opts.debug = optarg; break; case 'e': opts.oneline = optarg; break; case 'i': opts.interactive = 1; break; case 'l': opts.log = optarg; break; case 'v': opts.verbose = 1; break; case '?': default: usage(); /* NOTREACHED */ break; } } get_pathmax(); open_debug(); create_homedir(); catch_signals(); open_log(); if (opts.config == NULL) opts.config = get_filepath("config.lua"); buffer_init(&ibuf, INPUT_BUF); buffer_init(&obuf, OUTPUT_BUF); buffer_init(&nbuf, NAMESPACE_BUF); buffer_init(&cbuf, CONVERSION_BUF); regexp_compile(responses); SSL_library_init(); SSL_load_error_strings(); start_lua(); #if LUA_VERSION_NUM < 502 { list *l; session *s; l = sessions; while (l != NULL) { s = l->data; l = l->next; request_logout(s); } } #endif stop_lua(); ERR_free_strings(); regexp_free(responses); buffer_free(&ibuf); buffer_free(&obuf); buffer_free(&nbuf); buffer_free(&cbuf); xfree(env.home); close_log(); close_debug(); exit(0); }