int test_ccnet_config(const char *config_dir, int max_users) { g_type_init (); config_dir = ccnet_expand_path (config_dir); if (ccnet_log_init ("-", "debug") < 0) { fprintf (stderr, "ccnet_log_init error: %s\n", strerror(errno)); return -1; } srand (time(NULL)); session = (CcnetSession *)ccnet_server_session_new (); if (!session) { fprintf (stderr, "Error: failed to create ccnet session\n"); return -1; } event_init (); evdns_init (); ccnet_user_manager_set_max_users (((struct CcnetServerSession *)session)->user_mgr, max_users); if (ccnet_session_prepare(session, config_dir, TRUE) < 0) { return -1; } return 0; }
int applet_log_init (const char *config_dir) { char *logdir = g_build_filename (config_dir, "logs", NULL); char *logfile = g_build_filename(logdir, "applet.log", NULL); checkdir_with_mkdir (logdir); g_free (logdir); g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, applet_log, NULL); g_log_set_handler ("Ccnet", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, applet_log, NULL); /* record all log message */ applet_log_level = G_LOG_LEVEL_DEBUG; char *file = ccnet_expand_path (logfile); g_free (logfile); #ifdef DEBUG logfp = stderr; #else if ((logfp = (FILE *)(long)g_fopen (file, "a+")) == NULL) { applet_warning ("Open file %s failed errno=%d\n", file, errno); g_free (file); return -1; } #endif g_free (file); return 0; }
int seafile_log_init (const char *_logfile, const char *ccnet_debug_level_str, const char *seafile_debug_level_str) { g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, seafile_log, NULL); g_log_set_handler ("Ccnet", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, ccnet_log, NULL); /* record all log message */ ccnet_log_level = get_debug_level(ccnet_debug_level_str, G_LOG_LEVEL_INFO); seafile_log_level = get_debug_level(seafile_debug_level_str, G_LOG_LEVEL_DEBUG); if (strcmp(_logfile, "-") == 0) { logfp = stdout; logfile = g_strdup (_logfile); } else { logfile = ccnet_expand_path(_logfile); if ((logfp = g_fopen (logfile, "a+")) == NULL) { seaf_message ("Failed to open file %s\n", logfile); return -1; } } return 0; }
int seafile_applet_start (int argc, char **argv) { int c; char *temp_confdir; const char *env; env = g_getenv("CCNET_CONF_DIR"); if (env) temp_confdir = g_strdup(env); else temp_confdir = g_strdup(DEFAULT_CONFIG_DIR); static const char *short_options = "hvc:"; static const struct option long_options[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'v' }, { "config-dir", required_argument, NULL, 'c' }, { NULL, 0, NULL, 0, }, }; while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF) { switch (c) { case 'h': applet_exit (1); break; case 'v': applet_exit (1); break; case 'c': if (temp_confdir) g_free(temp_confdir); temp_confdir = g_strdup(optarg); break; default: applet_exit (1); } } applet->config_dir = ccnet_expand_path (temp_confdir); g_free (temp_confdir); /* Check and create config dirs. Also start logging. */ init_ccnet (); init_seafile (); /* start ccnet daemon and periodically check. */ start_ccnet (); start_conn_daemon_timer (1000, NULL); return 0; }
int ccnet_session_load_config (CcnetSession *session, const char *config_dir_r) { int ret = 0; char *config_file, *config_dir; char *id = 0, *name = 0, *port_str = 0, *lport_str, *user_name = 0; #ifdef CCNET_SERVER char *service_url; #endif int port, local_port = 0; unsigned char sha1[20]; GKeyFile *key_file; config_dir = ccnet_expand_path (config_dir_r); if (checkdir(config_dir) < 0) { ccnet_error ("Config dir %s does not exist or is not " "a directory.\n", config_dir); return -1; } config_file = g_build_filename (config_dir, SESSION_CONFIG_FILENAME, NULL); key_file = g_key_file_new (); g_key_file_set_list_separator (key_file, ','); if (!g_key_file_load_from_file (key_file, config_file, G_KEY_FILE_KEEP_COMMENTS, NULL)) { ccnet_warning ("Can't load config file %s.\n", config_file); return -1; } id = ccnet_key_file_get_string (key_file, "General", "ID"); user_name = ccnet_key_file_get_string (key_file, "General", "USER_NAME"); name = ccnet_key_file_get_string (key_file, "General", "NAME"); #ifdef CCNET_SERVER service_url = ccnet_key_file_get_string (key_file, "General", "SERVICE_URL"); #endif port_str = ccnet_key_file_get_string (key_file, "Network", "PORT"); lport_str = ccnet_key_file_get_string (key_file, "Client", "PORT"); if (port_str == NULL) port = DEFAULT_PORT; else port = atoi (port_str); if (lport_str != NULL) local_port = atoi (lport_str); if ( (id == NULL) || (strlen (id) != SESSION_ID_LENGTH) || (hex_to_sha1 (id, sha1) < 0) ) { ccnet_error ("Wrong ID\n"); ret = -1; goto onerror; } memcpy (session->base.id, id, 40); session->base.id[40] = '\0'; session->base.name = g_strdup(name); session->base.user_name = g_strdup(user_name); session->base.public_port = port; #ifdef CCNET_SERVER session->base.service_url = g_strdup(service_url); #endif session->config_file = config_file; session->config_dir = config_dir; session->local_port = local_port; session->keyf = key_file; load_rsakey(session); ret = 0; onerror: g_free (id); g_free (name); g_free (user_name); g_free (port_str); #ifdef CCNET_SERVER g_free (service_url); #endif return ret; }
int main (int argc, char **argv) { if (argc <= 1) { usage (); exit (1); } char *config_dir = DEFAULT_CONFIG_DIR; char *central_config_dir = NULL; char *seafile_dir = NULL; char *logdir = NULL; char *ccnet_debug_level_str = "info"; char *seafile_debug_level_str = "debug"; int daemon_mode = 1; gboolean test_conf = FALSE; int c; while ((c = getopt_long (argc, argv, short_opts, long_opts, NULL)) != EOF) { switch (c) { case 'h': usage (); exit(1); break; case 'v': fprintf (stderr, "seafile-controller version 1.0\n"); break; case 't': test_conf = TRUE; break; case 'c': config_dir = optarg; break; case 'F': central_config_dir = g_strdup(optarg); break; case 'd': seafile_dir = g_strdup(optarg); break; case 'f': daemon_mode = 0; break; case 'L': logdir = g_strdup(optarg); break; case 'g': ccnet_debug_level_str = optarg; break; case 'G': seafile_debug_level_str = optarg; break; case 'P': controller_pidfile = optarg; break; default: usage (); exit (1); } } #if !GLIB_CHECK_VERSION(2, 35, 0) g_type_init(); #endif #if !GLIB_CHECK_VERSION(2,32,0) g_thread_init (NULL); #endif if (!seafile_dir) { fprintf (stderr, "<seafile_dir> must be specified with --seafile-dir\n"); exit(1); } if (!central_config_dir) { fprintf (stderr, "<central_config_dir> must be specified with --central-config-dir\n"); exit(1); } central_config_dir = ccnet_expand_path (central_config_dir); config_dir = ccnet_expand_path (config_dir); seafile_dir = ccnet_expand_path (seafile_dir); if (test_conf) { test_config (central_config_dir, config_dir, seafile_dir); } ctl = g_new0 (SeafileController, 1); if (seaf_controller_init (ctl, central_config_dir, config_dir, seafile_dir, logdir) < 0) { controller_exit(1); } char *logfile = g_build_filename (ctl->logdir, "controller.log", NULL); if (seafile_log_init (logfile, ccnet_debug_level_str, seafile_debug_level_str) < 0) { seaf_warning ("Failed to init log.\n"); controller_exit (1); } if (init_syslog_config () < 0) { controller_exit (1); } set_signal_handlers (); if (seaf_controller_start () < 0) controller_exit (1); #ifndef WIN32 if (daemon_mode) { #ifndef __APPLE__ daemon (1, 0); #else /* __APPLE */ /* daemon is deprecated under APPLE * use fork() instead * */ switch (fork ()) { case -1: seaf_warning ("Failed to daemonize"); exit (-1); break; case 0: /* all good*/ break; default: /* kill origin process */ exit (0); } #endif /* __APPLE */ } #endif /* !WIN32 */ if (controller_pidfile == NULL) { controller_pidfile = g_strdup(g_getenv ("SEAFILE_PIDFILE")); } if (controller_pidfile != NULL) { if (write_controller_pidfile () < 0) { seaf_warning ("Failed to write pidfile %s\n", controller_pidfile); return -1; } } run_controller_loop (); return 0; }
int main (int argc, char **argv) { int c; char *config_dir; char *cluster_config_dir = NULL; char *log_file = 0; const char *debug_str = 0; int daemon_mode = 0; int redirect = 0; const char *log_level_str = "debug"; config_dir = DEFAULT_CONFIG_DIR; #ifdef WIN32 argv = get_argv_utf8 (&argc); #endif while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF) { switch (c) { case 'h': usage(); exit(0); break; case 'v': exit (1); break; case 'c': config_dir = optarg; break; case 'C': cluster_config_dir = optarg; break; case 'f': log_file = optarg; break; case 'D': debug_str = optarg; break; case 'd': daemon_mode = 1; break; case 'P': pidfile = optarg; break; case 'r': redirect = 1; break; default: fprintf (stderr, "unknown option \"-%c\"\n", (char)c); usage(); exit (1); } } argc -= optind; argv += optind; if (config_dir == NULL) { fprintf (stderr, "Missing config dir\n"); exit (1); } if (cluster_config_dir == NULL) { fprintf (stderr, "Missing cluster config dir\n"); exit (1); } #ifndef WIN32 if (daemon_mode) daemon (1, 0); #endif #if !GLIB_CHECK_VERSION(2, 36, 0) g_type_init (); #endif /* log */ if (!debug_str) debug_str = g_getenv("CCNET_DEBUG"); ccnet_debug_set_flags_string (debug_str); config_dir = ccnet_expand_path (config_dir); if (!log_file) { char *logdir = g_build_filename (cluster_config_dir, "logs", NULL); checkdir_with_mkdir (logdir); g_free (logdir); log_file = g_build_filename (cluster_config_dir, "logs", "ccnet.log", NULL); } if (ccnet_log_init (log_file, log_level_str) < 0) { fprintf (stderr, "ccnet_log_init error: %s, %s\n", strerror(errno), log_file); exit (1); } srand (time(NULL)); session = (CcnetSession *)ccnet_outer_session_new (); if (!session) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } inner_session = (CcnetSession *)ccnet_inner_session_new (); if (!inner_session) { fputs ("Error: failed to start cluster ccnet session, " "see log file for the detail.\n", stderr); return -1; } event_init (); evdns_init (); if (ccnet_session_prepare(session, config_dir) < 0) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } if (ccnet_session_prepare(inner_session, cluster_config_dir) < 0) { fputs ("Error: failed to start cluster ccnet session, " "see log file for the detail.\n", stderr); return -1; } /* write pidfile after session_prepare success, if there is * another instance of ccnet session_prepare will failed. */ if (pidfile) { if (write_pidfile (pidfile) < 0) { ccnet_message ("Failed to write pidfile\n"); return -1; } } atexit (on_ccnet_exit); #ifndef WIN32 setSigHandlers(); #endif ccnet_session_start (session); ccnet_session_start (inner_session); ccnet_start_rpc(session); /* actually enter the event loop */ cluster_mgr = ccnet_cluster_manager_new (); ccnet_cluster_manager_start (cluster_mgr); if (redirect) cluster_mgr->redirect = 1; event_dispatch (); return 0; }
int main (int argc, char **argv) { #ifdef HAVE_BREAKPAD_SUPPORT #ifdef WIN32 #define DUMPS_DIR "~/ccnet/logs/dumps/" #else #define DUMPS_DIR "~/.ccnet/logs/dumps/" #endif const char *dump_dir = ccnet_expand_path(DUMPS_DIR); checkdir_with_mkdir(dump_dir); CBPWrapperExceptionHandler bp_exception_handler = newCBPWrapperExceptionHandler(dump_dir); #endif int c; char *config_dir = DEFAULT_CONFIG_DIR; char *seafile_dir = NULL; char *worktree_dir = NULL; char *logfile = NULL; const char *debug_str = NULL; int daemon_mode = 0; CcnetClient *client; char *ccnet_debug_level_str = "info"; char *seafile_debug_level_str = "debug"; #ifdef WIN32 LoadLibraryA ("exchndl.dll"); argv = get_argv_utf8 (&argc); #endif while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF) { switch (c) { case 'h': usage(); exit (1); break; case 'v': exit (1); break; case 'c': config_dir = optarg; break; case 'd': seafile_dir = g_strdup(optarg); break; case 'b': daemon_mode = 1; break; case 'D': debug_str = optarg; break; case 'w': worktree_dir = g_strdup(optarg); break; case 'l': logfile = g_strdup(optarg); break; case 'g': ccnet_debug_level_str = optarg; break; case 'G': seafile_debug_level_str = optarg; break; default: usage (); exit (1); } } argc -= optind; argv += optind; #ifndef WIN32 if (daemon_mode) { #ifndef __APPLE__ daemon (1, 0); #else /* __APPLE */ /* daemon is deprecated under APPLE * use fork() instead * */ switch (fork ()) { case -1: seaf_warning ("Failed to daemonize"); exit (-1); break; case 0: /* all good*/ break; default: /* kill origin process */ exit (0); } #endif /* __APPLE */ } #endif /* !WIN32 */ cdc_init (); #if !GLIB_CHECK_VERSION(2, 35, 0) g_type_init(); #endif #if !GLIB_CHECK_VERSION(2, 31, 0) g_thread_init(NULL); #endif if (!debug_str) debug_str = g_getenv("SEAFILE_DEBUG"); seafile_debug_set_flags_string (debug_str); if (logfile == NULL) logfile = g_build_filename (config_dir, "logs", "seafile.log", NULL); if (seafile_log_init (logfile, ccnet_debug_level_str, seafile_debug_level_str) < 0) { seaf_warning ("Failed to init log.\n"); exit (1); } if (!bind_ccnet_service (config_dir)) { seaf_warning ("Failed to bind ccnet service\n"); exit (1); } /* init ccnet */ client = ccnet_init (NULL, config_dir); if (!client) exit (1); start_rpc_service (client); create_sync_rpc_clients (config_dir); appletrpc_client = ccnet_create_async_rpc_client (client, NULL, "applet-rpcserver"); /* init seafile */ if (seafile_dir == NULL) seafile_dir = g_build_filename (config_dir, "seafile-data", NULL); if (worktree_dir == NULL) worktree_dir = g_build_filename (g_get_home_dir(), "seafile", NULL); seaf = seafile_session_new (seafile_dir, worktree_dir, client); if (!seaf) { seaf_warning ("Failed to create seafile session.\n"); exit (1); } seaf->ccnetrpc_client = ccnetrpc_client; seaf->appletrpc_client = appletrpc_client; seaf_message ("starting seafile client "SEAFILE_CLIENT_VERSION"\n"); #if defined(SEAFILE_SOURCE_COMMIT_ID) seaf_message ("seafile source code version "SEAFILE_SOURCE_COMMIT_ID"\n"); #endif g_free (seafile_dir); g_free (worktree_dir); g_free (logfile); set_signal_handlers (seaf); seafile_curl_init(); seafile_session_prepare (seaf); seafile_session_start (seaf); seafile_session_config_set_string (seaf, "wktree", seaf->worktree_dir); ccnet_main (client); seafile_curl_deinit(); return 0; }
SeafileSession * seafile_session_new(const char *seafile_dir, CcnetClient *ccnet_session) { char *abs_seafile_dir; char *tmp_file_dir; char *config_file_path; GKeyFile *config; SeafileSession *session = NULL; if (!ccnet_session) return NULL; abs_seafile_dir = ccnet_expand_path (seafile_dir); tmp_file_dir = g_build_filename (abs_seafile_dir, "tmpfiles", NULL); config_file_path = g_build_filename (abs_seafile_dir, "seafile.conf", NULL); if (checkdir_with_mkdir (abs_seafile_dir) < 0) { g_warning ("Config dir %s does not exist and is unable to create\n", abs_seafile_dir); goto onerror; } if (checkdir_with_mkdir (tmp_file_dir) < 0) { g_warning ("Temp file dir %s does not exist and is unable to create\n", tmp_file_dir); goto onerror; } GError *error = NULL; config = g_key_file_new (); if (!g_key_file_load_from_file (config, config_file_path, G_KEY_FILE_NONE, &error)) { g_warning ("Failed to load config file.\n"); g_key_file_free (config); goto onerror; } session = g_new0(SeafileSession, 1); session->seaf_dir = abs_seafile_dir; session->tmp_file_dir = tmp_file_dir; session->session = ccnet_session; session->config = config; if (load_database_config (session) < 0) { g_warning ("Failed to load database config.\n"); goto onerror; } if (load_thread_pool_config (session) < 0) { g_warning ("Failed to load thread pool config.\n"); goto onerror; } session->fs_mgr = seaf_fs_manager_new (session, abs_seafile_dir); if (!session->fs_mgr) goto onerror; session->block_mgr = seaf_block_manager_new (session, abs_seafile_dir); if (!session->block_mgr) goto onerror; session->commit_mgr = seaf_commit_manager_new (session); if (!session->commit_mgr) goto onerror; session->repo_mgr = seaf_repo_manager_new (session); if (!session->repo_mgr) goto onerror; session->branch_mgr = seaf_branch_manager_new (session); if (!session->branch_mgr) goto onerror; session->cs_mgr = seaf_cs_manager_new (session); if (!session->cs_mgr) goto onerror; session->share_mgr = seaf_share_manager_new (session); if (!session->share_mgr) goto onerror; session->web_at_mgr = seaf_web_at_manager_new (session); if (!session->web_at_mgr) goto onerror; session->token_mgr = seaf_token_manager_new (session); if (!session->token_mgr) goto onerror; session->passwd_mgr = seaf_passwd_manager_new (session); if (!session->passwd_mgr) goto onerror; session->quota_mgr = seaf_quota_manager_new (session); if (!session->quota_mgr) goto onerror; session->listen_mgr = seaf_listen_manager_new (session); if (!session->listen_mgr) goto onerror; session->job_mgr = ccnet_job_manager_new (session->sync_thread_pool_size); ccnet_session->job_mgr = ccnet_job_manager_new (session->rpc_thread_pool_size); session->size_sched = size_scheduler_new (session); session->ev_mgr = cevent_manager_new (); if (!session->ev_mgr) goto onerror; session->mq_mgr = seaf_mq_manager_new (session); if (!session->mq_mgr) goto onerror; return session; onerror: free (abs_seafile_dir); g_free (tmp_file_dir); g_free (config_file_path); g_free (session); return NULL; }
int main (int argc, char **argv) { int c; char *config_dir; char *log_file = 0; const char *debug_str = 0; int daemon_mode = 0; int max_users = 0; const char *log_level_str = "debug"; gboolean test_config = FALSE; config_dir = DEFAULT_CONFIG_DIR; #ifdef WIN32 argv = get_argv_utf8 (&argc); #endif while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF) { switch (c) { case 'h': usage(); exit(0); break; case 'v': exit (1); break; case 'c': config_dir = optarg; break; case 'f': log_file = optarg; break; case 'D': debug_str = optarg; break; case 'd': daemon_mode = 1; break; case 'P': pidfile = optarg; break; case 'M': max_users = atoi(optarg); break; case 't': test_config = TRUE; break; default: fprintf (stderr, "unknown option \"-%c\"\n", (char)c); usage(); exit (1); } } argc -= optind; argv += optind; if (config_dir == NULL) { fprintf (stderr, "Missing config dir\n"); exit (1); } if (test_config) { /* test ccnet configuration and exit */ return test_ccnet_config (config_dir, max_users); } #ifndef WIN32 #ifndef __APPLE__ if (daemon_mode) daemon (1, 0); #endif #else WSADATA wsadata; WSAStartup(0x0101, &wsadata); #endif g_type_init (); /* log */ if (!debug_str) debug_str = g_getenv("CCNET_DEBUG"); ccnet_debug_set_flags_string (debug_str); config_dir = ccnet_expand_path (config_dir); if (!log_file) { char *logdir = g_build_filename (config_dir, "logs", NULL); checkdir_with_mkdir (logdir); g_free (logdir); log_file = g_build_filename (config_dir, "logs", "ccnet.log", NULL); } if (ccnet_log_init (log_file, log_level_str) < 0) { fprintf (stderr, "ccnet_log_init error: %s, %s\n", strerror(errno), log_file); exit (1); } srand (time(NULL)); session = (CcnetSession *)ccnet_server_session_new (); if (!session) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } event_init (); evdns_init (); ccnet_user_manager_set_max_users (((struct CcnetServerSession *)session)->user_mgr, max_users); if (ccnet_session_prepare(session, config_dir, FALSE) < 0) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } /* write pidfile after session_prepare success, if there is * another instance of ccnet session_prepare will failed. */ if (pidfile) { if (write_pidfile (pidfile) < 0) { ccnet_message ("Failed to write pidfile\n"); return -1; } } atexit (on_ccnet_exit); #ifndef WIN32 setSigHandlers(); #endif ccnet_session_start (session); ccnet_start_rpc(session); /* actually enter the event loop */ event_dispatch (); return 0; }
SeafileSession * seafile_session_new(const char *seafile_dir, const char *worktree_dir, struct _CcnetClient *ccnet_session) { char *abs_seafile_dir; char *abs_worktree_dir; char *tmp_file_dir; char *db_path; char *deleted_store; sqlite3 *config_db; SeafileSession *session = NULL; #ifndef SEAF_TOOL if (!ccnet_session) return NULL; #endif abs_worktree_dir = ccnet_expand_path (worktree_dir); abs_seafile_dir = ccnet_expand_path (seafile_dir); tmp_file_dir = g_build_filename (abs_seafile_dir, "tmpfiles", NULL); db_path = g_build_filename (abs_seafile_dir, "config.db", NULL); deleted_store = g_build_filename (abs_seafile_dir, "deleted_store", NULL); if (checkdir_with_mkdir (abs_seafile_dir) < 0) { seaf_warning ("Config dir %s does not exist and is unable to create\n", abs_seafile_dir); goto onerror; } if (checkdir_with_mkdir (abs_worktree_dir) < 0) { seaf_warning ("Worktree %s does not exist and is unable to create\n", abs_worktree_dir); goto onerror; } if (checkdir_with_mkdir (tmp_file_dir) < 0) { seaf_warning ("Temp file dir %s does not exist and is unable to create\n", tmp_file_dir); goto onerror; } if (create_deleted_store_dirs (deleted_store) < 0) goto onerror; config_db = seafile_session_config_open_db (db_path); if (!config_db) { seaf_warning ("Failed to open config db.\n"); goto onerror; } session = g_object_new (SEAFILE_TYPE_SESSION, NULL); session->seaf_dir = abs_seafile_dir; session->tmp_file_dir = tmp_file_dir; session->worktree_dir = abs_worktree_dir; session->session = ccnet_session; session->config_db = config_db; session->deleted_store = deleted_store; session->fs_mgr = seaf_fs_manager_new (session, abs_seafile_dir); if (!session->fs_mgr) goto onerror; session->block_mgr = seaf_block_manager_new (session, abs_seafile_dir); if (!session->block_mgr) goto onerror; session->commit_mgr = seaf_commit_manager_new (session); if (!session->commit_mgr) goto onerror; session->repo_mgr = seaf_repo_manager_new (session); if (!session->repo_mgr) goto onerror; session->branch_mgr = seaf_branch_manager_new (session); if (!session->branch_mgr) goto onerror; session->transfer_mgr = seaf_transfer_manager_new (session); if (!session->transfer_mgr) goto onerror; session->clone_mgr = seaf_clone_manager_new (session); if (!session->clone_mgr) goto onerror; session->sync_mgr = seaf_sync_manager_new (session); if (!session->sync_mgr) goto onerror; session->wt_monitor = seaf_wt_monitor_new (session); if (!session->wt_monitor) goto onerror; session->http_tx_mgr = http_tx_manager_new (session); if (!session->http_tx_mgr) goto onerror; session->filelock_mgr = seaf_filelock_manager_new (session); if (!session->filelock_mgr) goto onerror; session->job_mgr = ccnet_job_manager_new (MAX_THREADS); ccnet_session->job_mgr = ccnet_job_manager_new (MAX_THREADS); session->ev_mgr = cevent_manager_new (); if (!session->ev_mgr) goto onerror; session->mq_mgr = seaf_mq_manager_new (session); if (!session->mq_mgr) goto onerror; return session; onerror: free (abs_seafile_dir); free (abs_worktree_dir); g_free (tmp_file_dir); g_free (db_path); g_free (deleted_store); g_free (session); return NULL; }
int main (int argc, char **argv) { if (argc <= 1) { usage (); exit (1); } char *bin_dir = NULL; char *config_dir = DEFAULT_CONFIG_DIR; char *seafile_dir = NULL; char *logfile = NULL; char *ccnet_debug_level_str = "info"; char *seafile_debug_level_str = "debug"; int daemon_mode = 1; gboolean cloud_mode = FALSE; int c; while ((c = getopt_long (argc, argv, short_opts, long_opts, NULL)) != EOF) { switch (c) { case 'h': usage (); exit(1); break; case 'v': fprintf (stderr, "seafile-controller version 1.0\n"); break; case 'b': bin_dir = optarg; break; case 'c': config_dir = optarg; break; case 'd': seafile_dir = g_strdup(optarg); break; case 'f': daemon_mode = 0; break; case 'l': logfile = g_strdup(optarg); break; case 'C': cloud_mode = TRUE; break; case 'g': ccnet_debug_level_str = optarg; break; case 'G': seafile_debug_level_str = optarg; break; default: usage (); exit (1); } } if (daemon_mode) daemon (1, 0); g_type_init (); #if !GLIB_CHECK_VERSION(2,32,0) g_thread_init (NULL); #endif if (!seafile_dir) { seaf_warning ("<seafile_dir> must be specified with --seafile-dir\n"); controller_exit(1); } if (bin_dir) bin_dir = ccnet_expand_path(bin_dir); config_dir = ccnet_expand_path (config_dir); seafile_dir = ccnet_expand_path(seafile_dir); ctl = g_new0 (SeafileController, 1); if (seaf_controller_init (ctl, bin_dir, config_dir, seafile_dir, cloud_mode) < 0) { controller_exit(1); } if (!logfile) { logfile = g_build_filename (seafile_dir, "controller.log", NULL); } if (seafile_log_init (logfile, ccnet_debug_level_str, seafile_debug_level_str) < 0) { seaf_warning ("Failed to init log.\n"); controller_exit (1); } set_signal_handlers (); if (ctl->bin_dir) set_path_env (ctl->bin_dir); if (seaf_controller_start (ctl) < 0) controller_exit (1); run_controller_loop (); return 0; }
int main (int argc, char **argv) { int c; char *config_dir; char *log_file = 0; const char *debug_str = 0; int daemon_mode = 0; const char *log_level_str = "debug"; config_dir = DEFAULT_CONFIG_DIR; #ifdef WIN32 argv = get_argv_utf8 (&argc); #endif while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF) { switch (c) { case 'h': usage(); exit(0); break; case 'v': exit (1); break; case 'c': config_dir = optarg; break; case 'f': log_file = optarg; break; case 'D': debug_str = optarg; break; case 'd': daemon_mode = 1; break; default: usage(); exit (1); } } argc -= optind; argv += optind; if (config_dir == NULL) { fprintf (stderr, "Missing config dir\n"); exit (1); } #ifndef WIN32 #ifndef __APPLE__ if (daemon_mode) daemon (1, 0); #endif #else WSADATA wsadata; WSAStartup(0x0101, &wsadata); #endif g_type_init (); /* log */ if (!debug_str) debug_str = g_getenv("CCNET_DEBUG"); ccnet_debug_set_flags_string (debug_str); config_dir = ccnet_expand_path (config_dir); if (!log_file) { char *logdir = g_build_filename (config_dir, "logs", NULL); checkdir_with_mkdir (logdir); g_free (logdir); log_file = g_build_filename (config_dir, "logs", "ccnet.log", NULL); } if (ccnet_log_init (log_file, log_level_str) < 0) { fprintf (stderr, "ccnet_log_init error: %s, %s\n", strerror(errno), log_file); exit (1); } ccnet_message ("starting ccnet "PACKAGE_VERSION"\n"); srand (time(NULL)); session = (CcnetSession *)ccnet_daemon_session_new (); if (!session) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } event_init (); evdns_init (); if (ccnet_session_prepare(session, config_dir) < 0) { fputs ("Error: failed to start ccnet session, " "see log file for the detail.\n", stderr); return -1; } #ifndef WIN32 setSigHandlers(); #endif ccnet_session_start (session); ccnet_start_rpc(session); /* actually enter the event loop */ /* event_set_log_callback (logFunc); */ event_dispatch (); return 0; }
int main(int argc, char *argv[]) { GError *error = NULL; GOptionContext *context; context = g_option_context_new (NULL); g_option_context_add_main_entries (context, entries, "seafile"); if (argc == 1) { usage(); return 0; } if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("Option parsing failed: %s\n", error->message); exit (1); } if (print_version) { show_version(); return 0; } if (!seaf_data_dir) { if (!ccnet_conf_dir) { ccnet_conf_dir = ccnet_expand_path(DEFAULT_CONFIG_DIR); if (!ccnet_conf_dir) { fprintf (stderr, "[ERROR] Failed to get ccnet conf dir\n"); return -1; } } seaf_data_dir = get_seaf_data_dir(ccnet_conf_dir); if (!seaf_data_dir) { fprintf (stderr, "[ERROR] Failed to get seafile data directory\n"); return -1; } if(!seaf_data_dir_is_valid()) { fprintf (stderr, "[ERROR] seafile data directory is not valid.\n"); return -1; } } printf ("[INFO] seafile data directory is %s\n", seaf_data_dir); g_type_init (); log_init(); if (!worktree_dir) worktree_dir = g_build_filename (g_get_home_dir(), "seafile", NULL); seaf = seafile_session_new(seaf_data_dir, worktree_dir, NULL); seafile_session_prepare(seaf); if (!seaf) { fprintf (stderr, "[ERROR] Failed to initialize\n"); return -1; } if (list_repos) { do_list_repos (); } if (validate_data) { if (do_validate_prepare() < 0) return -1; do_validate(); return 0; } if (destroy_repo_id) { if (seafile_is_running()) { fprintf (stderr, "seafile is running, close it and try again.\n"); return -1; } do_destroy_repo(destroy_repo_id); return 0; } cleanup (); return 0; }
int main(int argc, char **argv) { char *config_dir; char *config_file; int c; char *name = NULL; program_name = argv[0]; config_dir = DEFAULT_CONFIG_DIR; while ((c = getopt_long(argc, argv, short_opts, long_opts, NULL)) != EOF) { switch (c) { case 'h': usage (1); break; case 'c': config_dir = strdup(optarg); break; case 'n': name = strdup (optarg); break; case 'H': host_str = strdup (optarg); break; case 'P': port_str = strdup (optarg); break; default: usage(1); } } config_dir = ccnet_expand_path (config_dir); /* printf("[conf_dir=%s\n]", config_dir); */ SSLeay_add_all_algorithms(); if (RAND_status() != 1) { /* it should be seeded automatically */ fprintf(stderr, "PRNG is not seeded\n"); exit (1); } if (bits == 0) bits = DEFAULT_BITS; /* create peer key */ if (!name) { usage(-ERR_NAME_NULL); } if (strlen(name) < 2 || strlen (name) > 16 || !is_valid_username(name)) { fprintf (stderr, "The user name should be more than 2 bytes and less than 16 bytes, only digits, alphabetes and '-', '_' are allowed"); exit(-ERR_NAME_INVALID); } user_name = name; peer_name = g_strdup (name); create_peerkey (); peer_id = id_from_pubkey (peer_pubkey); identity_file_peer = g_build_filename (config_dir, PEER_KEYFILE, NULL); /* create dir */ if (ccnet_mkdir(config_dir, 0700) < 0) { fprintf (stderr, "Make dir %s error: %s\n", config_dir, strerror(errno)); exit(-ERR_PERMISSION); } /* save key */ save_privkey (peer_privkey, identity_file_peer); /* make configure file */ config_file = g_build_filename (config_dir, CONFIG_FILE_NAME, NULL); make_configure_file (config_file); printf ("Successly create configuration dir %s.\n", config_dir); exit(0); }
SeafileSession * seafile_session_new(const char *seafile_dir, CcnetClient *ccnet_session) { char *abs_seafile_dir; char *tmp_file_dir; char *config_file_path; struct stat st; GKeyFile *config; SeafileSession *session = NULL; if (!ccnet_session) return NULL; abs_seafile_dir = ccnet_expand_path (seafile_dir); tmp_file_dir = g_build_filename(abs_seafile_dir, "tmpfiles", NULL); config_file_path = g_build_filename (abs_seafile_dir, "seafile.conf", NULL); if (g_stat(abs_seafile_dir, &st) < 0 || !S_ISDIR(st.st_mode)) { g_warning ("Seafile data dir %s does not exist and is unable to create\n", abs_seafile_dir); goto onerror; } if (g_stat(tmp_file_dir, &st) < 0 || !S_ISDIR(st.st_mode)) { g_warning("Seafile tmp dir %s does not exist and is unable to create\n", tmp_file_dir); goto onerror; } GError *error = NULL; config = g_key_file_new (); if (!g_key_file_load_from_file (config, config_file_path, G_KEY_FILE_NONE, &error)) { g_warning ("Failed to load config file.\n"); g_key_file_free (config); goto onerror; } session = g_new0(SeafileSession, 1); session->seaf_dir = abs_seafile_dir; session->tmp_file_dir = tmp_file_dir; session->session = ccnet_session; session->config = config; if (load_database_config (session) < 0) { g_warning ("Failed to load database config.\n"); goto onerror; } session->fs_mgr = seaf_fs_manager_new (session, abs_seafile_dir); if (!session->fs_mgr) goto onerror; session->block_mgr = seaf_block_manager_new (session, abs_seafile_dir); if (!session->block_mgr) goto onerror; session->commit_mgr = seaf_commit_manager_new (session); if (!session->commit_mgr) goto onerror; session->repo_mgr = seaf_repo_manager_new (session); if (!session->repo_mgr) goto onerror; session->branch_mgr = seaf_branch_manager_new (session); if (!session->branch_mgr) goto onerror; return session; onerror: free (abs_seafile_dir); g_free (config_file_path); g_free (session); return NULL; }