int main(int argc, char **argv){ //onion_log=onion_log_syslog; char *port="8080"; char *hostname="::"; const char *dirname="."; #ifdef HAVE_WEBDAV int withwebdav=1; #endif int i; for (i=1;i<argc;i++){ if ((strcmp(argv[i],"--port")==0) || (strcmp(argv[i],"-p")==0)){ port=argv[++i]; ONION_INFO("Listening at port %s",port); } if ((strcmp(argv[i],"--listen")==0) || (strcmp(argv[i],"-l")==0)){ hostname=argv[++i]; ONION_INFO("Listening at hostname %s",hostname); } else if (strcmp(argv[i],"--help")==0 || strcmp(argv[i],"-h")==0){ return show_help(); } #ifdef HAVE_WEBDAV else if (strcmp(argv[i],"--no-webdav")==0){ ONION_INFO("WebDAV support disabled"); withwebdav=0; } #endif else{ dirname=argv[i]; ONION_INFO("Exporting directory %s", dirname); } } onion_handler *root=onion_handler_new((onion_handler_handler)fileserver_page, (void *)dirname, NULL); #ifdef HAVE_WEBDAV if (withwebdav) onion_handler_add(root, onion_handler_webdav(dirname, NULL)); // fallback. else #endif onion_handler_add(root, onion_handler_export_local_new(dirname)); // This is the root directory where the translations are. #define W "." setenv("LANGUAGE","locale",1); // Remove LANGUAGE env var, set it to the locale name, setlocale(LC_ALL,""); bindtextdomain("locale", W); // This is necesary because of the fake name bindtextdomain("es", W); // One per language supported. bindtextdomain("zh", W); bindtextdomain("fr", W); bindtextdomain("pl", W); textdomain("C"); // Default language // All is configured now, now in hands of dgettext(LANG, txt); o=onion_new(O_POOL); onion_set_root_handler(o, root); onion_set_port(o, port); onion_set_hostname(o, hostname); signal(SIGINT, free_onion); int error=onion_listen(o); if (error){ perror("Cant create the server"); } onion_free(o); return 0; }
void t03_handle_path_request(){ INIT_LOCAL(); onion *server=onion_new(0); onion_listen_point *lp=onion_buffer_listen_point_new(); onion_add_listen_point(server, NULL, NULL, lp); onion_url *urls=onion_url_new(); onion_url_add_static(urls, "^$", "Test index\n", HTTP_OK); onion_url_add_static(urls, "^index.html$", "Index test", 200); onion_url *pathu=onion_url_new(); onion_handler *path=onion_url_to_handler(pathu); onion_url_add_url(pathu, "^test/", urls); onion_handler_add(path, onion_handler_static("Internal error", 500 ) ); onion_set_root_handler(server, path); onion_request *request; onion_response *response; request=onion_request_new(lp); FILL(request,"GET / HTTP/1.1\n"); onion_request_polish(request); response=onion_response_new(request); onion_handler_handle(path, request, response); onion_response_free(response); const char *buffer=onion_buffer_listen_point_get_buffer_data(request); FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 500 INTERNAL ERROR\r\n"); FAIL_IF_NOT_STRSTR(buffer, "Content-Length: 14\r\n"); FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nInternal error"); onion_request_free(request); // gives error, as such url does not exist. request=onion_request_new(lp); FILL(request,"GET /test/ HTTP/1.1\n"); onion_request_polish(request); response=onion_response_new(request); onion_handler_handle(path, request, response); onion_response_free(response); buffer=onion_buffer_listen_point_get_buffer_data(request); FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 200 OK\r\n"); FAIL_IF_NOT_STRSTR(buffer, "Content-Length: 11\r\n"); FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nTest index\n"); onion_request_free(request); request=onion_request_new(lp); FILL(request,"GET /test/index.html HTTP/1.1\n"); onion_request_polish(request); response=onion_response_new(request); onion_handler_handle(path, request, response); onion_response_free(response); buffer=onion_buffer_listen_point_get_buffer_data(request); FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 200 OK\r\n"); FAIL_IF_NOT_STRSTR(buffer, "Content-Length: 10\r\n"); FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nIndex test"); onion_request_free(request); onion_free(server); END_LOCAL(); }
int main(int argc, char **argv){ char *port="8080"; char *hostname="::"; const char *dirname="."; const char *certfile="cert.pem"; const char *pamname="login"; int i; for (i=1;i<argc;i++){ if ((strcmp(argv[i],"--port")==0) || (strcmp(argv[i],"-p")==0)){ port=argv[++i]; ONION_INFO("Listening at port %s",port); } if ((strcmp(argv[i],"--listen")==0) || (strcmp(argv[i],"-l")==0)){ hostname=argv[++i]; ONION_INFO("Listening at hostname %s",hostname); } else if (strcmp(argv[i],"--pem")==0){ if (argc<i+1) return show_help(); certfile=argv[++i]; ONION_INFO("Certificate file set to %s",certfile); } else if (strcmp(argv[i],"--pam")==0){ if (argc<i+1) return show_help(); pamname=argv[++i]; ONION_INFO("Pam name is now %s",pamname); } else if (strcmp(argv[i],"--help")==0 || strcmp(argv[i],"-h")==0){ return show_help(); } else dirname=argv[i]; } upload_file_data data={ dirname }; onion_handler *root=onion_handler_new((void*)upload_file,(void*)&data,NULL); onion_handler *dir=onion_handler_export_local_new(argc==2 ? argv[1] : "."); onion_handler_export_local_set_footer(dir, upload_file_footer); onion_handler_add(dir, onion_handler_static("<h1>404 - File not found.</h1>", 404) ); onion_handler_add(root,dir); onion_handler *pam=onion_handler_auth_pam("Onion Fileserver", pamname, root); o=onion_new(O_THREADED); onion_set_root_handler(o, pam); onion_set_certificate(o, O_SSL_CERTIFICATE_KEY, certfile, certfile); onion_set_port(o, port); onion_set_hostname(o, hostname); signal(SIGINT, free_onion); int error=onion_listen(o); if (error){ perror("Cant create the server"); } onion_free(o); return 0; }