void CMultiMoveClientDlg::init_client() { ioCtx_t ctx; ctx.on_error = __error_func; ctx.on_print = __print_func; ctx.ctx = (void*)this; cmInit_t cm_init; cm_init.io_ctx = ctx; cliInit_t init; init.ctx = (void*)this; init.hide_cursor = ::LoadCursor(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDC_CURSOR_BLANK)); init.on_notify = __client_notify; clientInit_t client_init; client_init.cm_init = cm_init; client_init.cli_init = init; if(!Client_Init(&client_init)) { AfxAbort(); } if(!Cli_Start()) { AfxAbort(); } }
static void qtv_init (void) { qtv_cbuf = Cbuf_New (&id_interp); qtv_args = Cbuf_ArgsNew (); Sys_RegisterShutdown (qtv_shutdown); Sys_Init (); COM_ParseConfig (); Cvar_Get ("cmd_warncmd", "1", CVAR_NONE, NULL, NULL); qtv_memory_init (); QFS_Init ("qw"); PI_Init (); qtv_console_plugin = Cvar_Get ("qtv_console_plugin", "server", CVAR_ROM, 0, "Plugin used for the console"); PI_RegisterPlugins (server_plugin_list); Con_Init (qtv_console_plugin->string); if (con_module) con_module->data->console->cbuf = qtv_cbuf; Sys_SetStdPrintf (qtv_print); qtv_sbar_init (); Netchan_Init_Cvars (); Cmd_StuffCmds (qtv_cbuf); Cbuf_Execute_Sets (qtv_cbuf); qtv_net_init (); Server_Init (); Client_Init (); Cmd_AddCommand ("quit", qtv_quit_f, "Shut down qtv"); Cmd_StuffCmds (qtv_cbuf); }
void libevent_work_thread(int fd, short ev, void *arg){ LIBEVENT_WORK_THREAD *me =(LIBEVENT_WORK_THREAD *)arg; char buf[1], *pv_buf; int ffd; WTQ *work_child; int pg_fds, m, pg_len, client_len, pack_len; DBP *_dbp; if (read(fd, buf, 1) != 1) d_log("error Can't read from libevent pipe"); work_child = wtq_queue_tail; wtq_queue_tail = wtq_queue_tail->next; // printf("thread_id:%llu\n", me->thread_id); FIND_WTQPID(work_child, me->thread_id); if(work_child->isjob == JOB_HAS) work_child->isjob = JOB_WORKING; else{ goto ok; } ffd = work_child->rq_item->frontend->ffd; _dbp = me->tdbp; pack_len = PGStartupPacket3(ffd, _dbp); /* 1. F -> B */ if(pack_len == -1)goto ok; pg_fds = Client_Init(conn_global->pg_host, conn_global->pg_port); if(pg_fds == -1){ /*freedbp(_dbp); */ goto ok; } pg_len = Socket_Send(pg_fds, _dbp->inBuf, _dbp->inEnd); /*freedbp(_dbp); */ if(pg_len != pack_len) goto ok; AuthPG(pg_fds, ffd, _dbp); work_child->isjob = JOB_FREE; if(notify_token_thread == NT_FREE){ uint64_t u; ssize_t s; u = 1; s = write(token_efd, &u , sizeof(uint64_t)); if(s != sizeof(uint64_t)){ printf("write error s:%d\n", s); } //printf("token_efd\n"); } ok: close(pg_fds) ; close(work_child->rq_item->frontend->ffd); //if(close(work_child->rq_item->frontend->ffd) == -1)DEBUG("close fd error"); work_child->rq_item->isjob = JOB_FREE; work_child->isjob = JOB_FREE; }
/** * The main() function of ngIRCd. * * Here all starts: this function is called by the operating system loader, * it is the first portion of code executed of ngIRCd. * * @param argc The number of arguments passed to ngIRCd on the command line. * @param argv An array containing all the arguments passed to ngIRCd. * @return Global exit code of ngIRCd, zero on success. */ GLOBAL int main(int argc, const char *argv[]) { bool ok, configtest = false; bool NGIRCd_NoDaemon = false; int i; size_t n; #if defined(DEBUG) && defined(HAVE_MTRACE) /* enable GNU libc memory tracing when running in debug mode * and functionality available */ mtrace(); #endif umask(0077); NGIRCd_SignalQuit = NGIRCd_SignalRestart = false; NGIRCd_Passive = false; #ifdef DEBUG NGIRCd_Debug = false; #endif #ifdef SNIFFER NGIRCd_Sniffer = false; #endif strlcpy(NGIRCd_ConfFile, SYSCONFDIR, sizeof(NGIRCd_ConfFile)); strlcat(NGIRCd_ConfFile, CONFIG_FILE, sizeof(NGIRCd_ConfFile)); Fill_Version(); /* parse conmmand line */ for (i = 1; i < argc; i++) { ok = false; if (argv[i][0] == '-' && argv[i][1] == '-') { /* long option */ if (strcmp(argv[i], "--config") == 0) { if (i + 1 < argc) { /* Ok, there's an parameter left */ strlcpy(NGIRCd_ConfFile, argv[i+1], sizeof(NGIRCd_ConfFile)); /* next parameter */ i++; ok = true; } } if (strcmp(argv[i], "--configtest") == 0) { configtest = true; ok = true; } #ifdef DEBUG if (strcmp(argv[i], "--debug") == 0) { NGIRCd_Debug = true; ok = true; } #endif if (strcmp(argv[i], "--help") == 0) { Show_Version(); puts(""); Show_Help( ); puts( "" ); exit(1); } if (strcmp(argv[i], "--nodaemon") == 0) { NGIRCd_NoDaemon = true; ok = true; } if (strcmp(argv[i], "--passive") == 0) { NGIRCd_Passive = true; ok = true; } #ifdef SNIFFER if (strcmp(argv[i], "--sniffer") == 0) { NGIRCd_Sniffer = true; ok = true; } #endif if (strcmp(argv[i], "--version") == 0) { Show_Version(); exit(1); } } else if(argv[i][0] == '-' && argv[i][1] != '-') { /* short option */ for (n = 1; n < strlen(argv[i]); n++) { ok = false; #ifdef DEBUG if (argv[i][n] == 'd') { NGIRCd_Debug = true; ok = true; } #endif if (argv[i][n] == 'f') { if (!argv[i][n+1] && i+1 < argc) { /* Ok, next character is a blank */ strlcpy(NGIRCd_ConfFile, argv[i+1], sizeof(NGIRCd_ConfFile)); /* go to the following parameter */ i++; n = strlen(argv[i]); ok = true; } } if (argv[i][n] == 'h') { Show_Version(); puts(""); Show_Help(); puts(""); exit(1); } if (argv[i][n] == 'n') { NGIRCd_NoDaemon = true; ok = true; } if (argv[i][n] == 'p') { NGIRCd_Passive = true; ok = true; } #ifdef SNIFFER if (argv[i][n] == 's') { NGIRCd_Sniffer = true; ok = true; } #endif if (argv[i][n] == 't') { configtest = true; ok = true; } if (argv[i][n] == 'V') { Show_Version(); exit(1); } if (!ok) { printf("%s: invalid option \"-%c\"!\n", PACKAGE_NAME, argv[i][n]); printf("Try \"%s --help\" for more information.\n", PACKAGE_NAME); exit(1); } } } if (!ok) { printf("%s: invalid option \"%s\"!\n", PACKAGE_NAME, argv[i]); printf("Try \"%s --help\" for more information.\n", PACKAGE_NAME); exit(1); } } /* Debug level for "VERSION" command */ NGIRCd_DebugLevel[0] = '\0'; #ifdef DEBUG if (NGIRCd_Debug) strcpy(NGIRCd_DebugLevel, "1"); #endif #ifdef SNIFFER if (NGIRCd_Sniffer) { NGIRCd_Debug = true; strcpy(NGIRCd_DebugLevel, "2"); } #endif if (configtest) { Show_Version(); puts(""); exit(Conf_Test()); } while (!NGIRCd_SignalQuit) { /* Initialize global variables */ NGIRCd_Start = time(NULL); (void)strftime(NGIRCd_StartStr, 64, "%a %b %d %Y at %H:%M:%S (%Z)", localtime(&NGIRCd_Start)); NGIRCd_SignalRestart = false; NGIRCd_SignalQuit = false; /* Initialize modules, part I */ Log_Init(!NGIRCd_NoDaemon); Random_Init(); Conf_Init(); Log_ReInit(); /* Initialize the "main program": chroot environment, user and * group ID, ... */ if (!NGIRCd_Init(NGIRCd_NoDaemon)) { Log(LOG_ALERT, "Fatal: Initialization failed"); exit(1); } /* Initialize modules, part II: these functions are eventually * called with already dropped privileges ... */ Channel_Init(); Client_Init(); Conn_Init(); Class_Init(); if (!io_library_init(CONNECTION_POOL)) { Log(LOG_ALERT, "Fatal: Could not initialize IO routines: %s", strerror(errno)); exit(1); } if (!Signals_Init()) { Log(LOG_ALERT, "Fatal: Could not set up signal handlers: %s", strerror(errno)); exit(1); } /* Create protocol and server identification. The syntax * used by ngIRCd in PASS commands and the known "extended * flags" are described in doc/Protocol.txt. */ #ifdef IRCPLUS snprintf(NGIRCd_ProtoID, sizeof NGIRCd_ProtoID, "%s%s %s|%s:%s", PROTOVER, PROTOIRCPLUS, PACKAGE_NAME, PACKAGE_VERSION, IRCPLUSFLAGS); #ifdef ZLIB strcat(NGIRCd_ProtoID, "Z"); #endif if (Conf_OperCanMode) strcat(NGIRCd_ProtoID, "o"); #else /* IRCPLUS */ snprintf(NGIRCd_ProtoID, sizeof NGIRCd_ProtoID, "%s%s %s|%s", PROTOVER, PROTOIRC, PACKAGE_NAME, PACKAGE_VERSION); #endif /* IRCPLUS */ strlcat(NGIRCd_ProtoID, " P", sizeof NGIRCd_ProtoID); #ifdef ZLIB strlcat(NGIRCd_ProtoID, "Z", sizeof NGIRCd_ProtoID); #endif LogDebug("Protocol and server ID is \"%s\".", NGIRCd_ProtoID); Channel_InitPredefined(); if (Conn_InitListeners() < 1) { Log(LOG_ALERT, "Server isn't listening on a single port!" ); Log(LOG_ALERT, "%s exiting due to fatal errors!", PACKAGE_NAME); Pidfile_Delete(); exit(1); } /* Main Run Loop */ Conn_Handler(); Conn_Exit(); Client_Exit(); Channel_Exit(); Class_Exit(); Log_Exit(); } Pidfile_Delete(); return 0; } /* main */