void add_router_to_favorites(HWND hDlg,char *router,char favtype) { if(hDlgRouterRestrictions) { char *favtmp2,*favtmp3; int favtmpsize; int i; favtmpsize=SendDlgItemMessage(hDlgRouterRestrictions,15101,WM_GETTEXTLENGTH,0,0); favtmp2=tor_malloc(favtmpsize+256+5);favtmp3=favtmp2; GetDlgItemText(hDlgRouterRestrictions,15101,favtmp2,favtmpsize+1);favtmp2+=favtmpsize; if((favtmpsize>2)&&((*(favtmp2-1)!=0x0d)&&(*(favtmp2-1)!=0x0a))) { *favtmp2++=0x0d;*favtmp2++=0x0a;} *favtmp2++='[';*favtmp2++=favtype;*favtmp2++=']';*favtmp2++=32; for(i=0;router[i];i++) *favtmp2++=router[i]; *favtmp2++=13;*favtmp2++=10;*favtmp2++=0; tor_snprintf(favtmp2,100,get_lang_str(LANG_MB_FAV_ADDED),favtmp3+favtmpsize); LangMessageBox(hDlg,favtmp2,LANG_MB_FAVORITES,MB_OK); log(LOG_NOTICE,LD_APP,favtmp2); SetDlgItemText(hDlgRouterRestrictions,15101,favtmp3); refreshFavoriteNodes(); tor_free(favtmp3); } else if(favtype=='X') { char *tmp1=routerset_to_string(tmpOptions->ExitNodes); int i=strlen(tmp1)+256+5; char *tmp2=tor_malloc(i),*tmp3=tor_malloc(256); tor_snprintf(tmp2,i,"%s,%s",tmp1,router); r1=tmpOptions->ExitNodes; r2=routerset_new(); routerset_parse(r2,tmp2,"ExitNodes"); tmpOptions->ExitNodes=r2; if(r1) routerset_free(r1); tor_snprintf(tmp3,256,"[X] %s",router); tor_snprintf(tmp2,100,get_lang_str(LANG_MB_FAV_ADDED),tmp3); LangMessageBox(hDlg,tmp2,LANG_MB_FAVORITES,MB_OK); log(LOG_NOTICE,LD_APP,tmp2); tor_free(tmp1);tor_free(tmp2);tor_free(tmp3); } else if(favtype=='E') { char *tmp1=routerset_to_string(tmpOptions->EntryNodes); int i=strlen(tmp1)+256+5; char *tmp2=tor_malloc(i),*tmp3=tor_malloc(256); tor_snprintf(tmp2,i,"%s,%s",tmp1,router); r1=tmpOptions->EntryNodes; r2=routerset_new(); routerset_parse(r2,tmp2,"EntryNodes"); tmpOptions->EntryNodes=r2; if(r1) routerset_free(r1); tor_snprintf(tmp3,256,"[E] %s",router); tor_snprintf(tmp2,100,get_lang_str(LANG_MB_FAV_ADDED),tmp3); LangMessageBox(hDlg,tmp2,LANG_MB_FAVORITES,MB_OK); log(LOG_NOTICE,LD_APP,tmp2); tor_free(tmp1);tor_free(tmp2);tor_free(tmp3); } }
/** Main service entry point. Starts the service control dispatcher and waits * until the service status is set to SERVICE_STOPPED. */ static void nt_service_main(void) { SERVICE_TABLE_ENTRY table[2]; DWORD result = 0,thread_id; char *errmsg; nt_service_loadlibrary(); table[0].lpServiceName = (char*)GENSRV_SERVICENAME; table[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)nt_service_body; table[1].lpServiceName = NULL; table[1].lpServiceProc = NULL; if (!service_fns.StartServiceCtrlDispatcherA_fn(table)) { result = GetLastError(); errmsg = nt_strerror(result); printf("Service error %d : %s\n", (int) result, errmsg); LocalFree(errmsg); if (result == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) { if (tor_init(backup_argc, backup_argv) < 0) return; switch (get_options()->command) { case CMD_RUN_TOR: WaitForSingleObject(CreateThread(0,0,(LPTHREAD_START_ROUTINE)tor_thread,0,0,(LPDWORD)&thread_id),INFINITE); break; case CMD_LIST_FINGERPRINT: case CMD_HASH_PASSWORD: case CMD_VERIFY_CONFIG: log_err(LD_CONFIG,get_lang_str(LANG_LOG_NTMAIN_CMDLINE_UNSUPPORTED_COMMAND)); break; case CMD_RUN_UNITTESTS: default: log_err(LD_CONFIG,get_lang_str(LANG_LOG_NTMAIN_INTERNAL_ERROR),get_options()->command); } tor_cleanup(); } } }
/** Loads functions used by NT services. Returns on success, or prints a * complaint to stdout and exits on error. */ static void nt_service_loadlibrary(void) { HMODULE library = 0; void *fn; if (service_fns.loaded) return; /* XXXX Possibly, we should hardcode the location of this DLL. */ if (!(library = LoadLibrary("advapi32.dll"))) { log_err(LD_GENERAL,get_lang_str(LANG_LOG_NTMAIN_ADVAPI32_LOAD_ERROR)); goto err; } #define LOAD(f) STMT_BEGIN \ if (!(fn = GetProcAddress(library, #f))) { \ log_err(LD_BUG,get_lang_str(LANG_LOG_NTMAIN_ADVAPI32_WITHOUT_API),#f); \ goto err; \ } else { \ service_fns.f ## _fn = fn; \ } \ STMT_END LOAD(ChangeServiceConfig2A); LOAD(CloseServiceHandle); LOAD(ControlService); LOAD(CreateServiceA); LOAD(DeleteService); LOAD(OpenSCManagerA); LOAD(OpenServiceA); LOAD(QueryServiceStatus); LOAD(RegisterServiceCtrlHandlerA); LOAD(SetServiceStatus); LOAD(StartServiceCtrlDispatcherA); LOAD(StartServiceA); LOAD(LookupAccountNameA); service_fns.loaded = 1; return; err: printf("Unable to load library support for NT services: exiting.\n"); exit(1); }
/** Handles service control requests, such as stopping or starting the * Tor service. */ static void nt_service_control(DWORD request) { static struct timeval exit_now; exit_now.tv_sec = 0; exit_now.tv_usec = 0; nt_service_loadlibrary(); switch (request) { case SERVICE_CONTROL_STOP: case SERVICE_CONTROL_SHUTDOWN: log_notice(LD_GENERAL,get_lang_str(LANG_LOG_NTMAIN_SHUTDOWN)); service_status.dwCurrentState = SERVICE_STOP_PENDING; event_loopexit(&exit_now); return; } service_fns.SetServiceStatus_fn(hStatus, &service_status); }
void faq_open(ManualLang lang) { gchar *lang_str; gchar *file_uri; lang_str = get_lang_str(lang); if (!lang_str) return; file_uri = g_strconcat("file://", #ifdef G_OS_WIN32 get_startup_dir(), G_DIR_SEPARATOR_S "doc" G_DIR_SEPARATOR_S "faq", #else FAQDIR, #endif G_DIR_SEPARATOR_S, lang_str, G_DIR_SEPARATOR_S, FAQ_HTML_INDEX, NULL); debug_print("Opening FAQ: %s\n", file_uri); open_uri(file_uri, prefs_common.uri_cmd); g_free(file_uri); }
void add_router_to_banlist(HWND hDlg,char *router,char bantype) { if(hDlgRouterRestrictions) { char *bantmp2,*bantmp3; int bantmpsize,i; bantmpsize=SendDlgItemMessage(hDlgRouterRestrictions,15100,WM_GETTEXTLENGTH,0,0); bantmp2=tor_malloc(bantmpsize+256+5);bantmp3=bantmp2; GetDlgItemText(hDlgRouterRestrictions,15100,bantmp2,bantmpsize+1);bantmp2+=bantmpsize; if((bantmpsize>2)&&((*(bantmp2-1)!=0x0d)&&(*(bantmp2-1)!=0x0a))) { *bantmp2++=0x0d;*bantmp2++=0x0a;} if(bantype){ *bantmp2++='[';*bantmp2++=bantype;*bantmp2++=']';*bantmp2++=32;} for(i=0;router[i];i++) *bantmp2++=router[i]; *bantmp2++=13;*bantmp2++=10;*bantmp2++=0; tor_snprintf(bantmp2,100,get_lang_str(LANG_MB_BAN_ADDED),bantmp3+bantmpsize); if(hDlg) LangMessageBox(hDlg,bantmp2,LANG_MB_BANS,MB_OK); log(LOG_NOTICE,LD_APP,bantmp2); SetDlgItemText(hDlgRouterRestrictions,15100,bantmp3); refreshBannedNodes(); tor_free(bantmp3); } else if(bantype) { char *tmp1=routerset_to_string(tmpOptions->ExcludeExitNodes); int i=strlen(tmp1)+256+5; char *tmp2=tor_malloc(i),*tmp3=tor_malloc(256);; tor_snprintf(tmp2,i,"%s,%s",tmp1,router); r1=tmpOptions->ExcludeExitNodes; r2=routerset_new(); routerset_parse(r2,tmp2,"ExcludeExitNodes"); tmpOptions->ExcludeExitNodes=r2; if(r1) routerset_free(r1); tor_snprintf(tmp3,256,"[X] %s",router); tor_snprintf(tmp2,100,get_lang_str(LANG_MB_BAN_ADDED),tmp3); if(hDlg) LangMessageBox(hDlg,tmp2,LANG_MB_BANS,MB_OK); log(LOG_NOTICE,LD_APP,tmp2); tor_free(tmp1);tor_free(tmp2);tor_free(tmp3); if(tmpOptions->ExcludeExitNodes || tmpOptions->ExcludeNodes) { r2 = tmpOptions->_ExcludeExitNodesUnion; r1 = routerset_new(); routerset_union(r1,tmpOptions->ExcludeExitNodes); routerset_union(r1,tmpOptions->ExcludeNodes); tmpOptions->_ExcludeExitNodesUnion = r1; if(r2) routerset_free(r2); } } else { char *tmp1=routerset_to_string(tmpOptions->ExcludeNodes); int i=strlen(tmp1)+256+5; char *tmp2=tor_malloc(i); tor_snprintf(tmp2,i,"%s,%s",tmp1,router); r1=tmpOptions->ExcludeNodes; r2=routerset_new(); routerset_parse(r2,tmp2,"ExcludeNodes"); tmpOptions->ExcludeNodes=r2; if(r1) routerset_free(r1); tor_snprintf(tmp2,100,get_lang_str(LANG_MB_BAN_ADDED),router); if(hDlg) LangMessageBox(hDlg,tmp2,LANG_MB_BANS,MB_OK); log(LOG_NOTICE,LD_APP,tmp2); tor_free(tmp1);tor_free(tmp2); if(tmpOptions->ExcludeExitNodes || tmpOptions->ExcludeNodes) { r2 = tmpOptions->_ExcludeExitNodesUnion; r1 = routerset_new(); routerset_union(r1,tmpOptions->ExcludeExitNodes); routerset_union(r1,tmpOptions->ExcludeNodes); tmpOptions->_ExcludeExitNodesUnion = r1; if(r2) routerset_free(r2); } } }