free(pcd);
}
-/* connect to para_server and register the client task */
-static int client_connect(struct private_client_data *pcd)
-{
- int ret;
-
- pcd->fd = -1;
- ret = makesock(AF_UNSPEC, IPPROTO_TCP, 0, pcd->conf.hostname_arg,
- pcd->conf.server_port_arg);
- if (ret < 0)
- return ret;
- pcd->fd = ret;
- pcd->status = CL_CONNECTED;
- ret = mark_fd_nonblocking(pcd->fd);
- if (ret < 0)
- goto err_out;
- pcd->task.pre_select = client_pre_select;
- pcd->task.post_select = client_post_select;
- pcd->task.private_data = pcd;
- sprintf(pcd->task.status, "client");
- register_task(&pcd->task);
- return 1;
-err_out:
- close(pcd->fd);
- pcd->fd = -1;
- return ret;
-}
-
-/**
- * Open connection to para_server.
- *
- * \param argc Usual argument count.
- * \param argv Usual argument vector.
- * \param pcd_ptr Points to dynamically allocated and initialized private client data
- * upon successful return.
- *
- * Check the command line options given by \a argc and argv, set default values
- * for user name and rsa key file, read further option from the config file.
- * Finally, establish a connection to para_server.
- *
- * \return Standard.
- */
-int client_open(int argc, char *argv[], struct private_client_data **pcd_ptr)
-{
- char *home = para_homedir();
- struct stat statbuf;
- int ret;
- struct private_client_data *pcd =
- para_calloc(sizeof(struct private_client_data));
-
- *pcd_ptr = pcd;
- pcd->fd = -1;
- ret = client_cmdline_parser(argc, argv, &pcd->conf);
- HANDLE_VERSION_FLAG("client", pcd->conf);
- ret = -E_CLIENT_SYNTAX;
- if (!pcd->conf.inputs_num)
- goto out;
- pcd->user = pcd->conf.user_given?
- para_strdup(pcd->conf.user_arg) : para_logname();
-
- pcd->key_file = pcd->conf.key_file_given?
- para_strdup(pcd->conf.key_file_arg) :
- make_message("%s/.paraslash/key.%s", home, pcd->user);
-
- pcd->config_file = pcd->conf.config_file_given?
- para_strdup(pcd->conf.config_file_arg) :
- make_message("%s/.paraslash/client.conf", home);
- ret = stat(pcd->config_file, &statbuf);
- if (ret && pcd->conf.config_file_given) {
- ret = -E_NO_CONFIG;
- goto out;
- }
- if (!ret) {
- struct client_cmdline_parser_params params = {
- .override = 0,
- .initialize = 0,
- .check_required = 0,
- .check_ambiguity = 0
- };
- client_cmdline_parser_config_file(pcd->config_file,
- &pcd->conf, ¶ms);
- }
- ret = 1;
- PARA_INFO_LOG("loglevel: %d\n", pcd->conf.loglevel_arg);
- PARA_INFO_LOG("config_file: %s\n", pcd->config_file);
- PARA_INFO_LOG("key_file: %s\n", pcd->key_file);
- PARA_NOTICE_LOG("connecting %s:%d\n", pcd->conf.hostname_arg,
- pcd->conf.server_port_arg);
- ret = client_connect(pcd);
-out:
- free(home);
- if (ret < 0) {
- PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
- client_close(pcd);
- *pcd_ptr = NULL;
- }
- return ret;
-}
-
/**
* The preselect hook for server commands.
*
*
* \sa register_task() client_open(), struct sched, struct task.
*/
-void client_pre_select(struct sched *s, struct task *t)
+static void client_pre_select(struct sched *s, struct task *t)
{
struct private_client_data *pcd = t->private_data;
*
* \sa struct sched, struct task.
*/
-void client_post_select(struct sched *s, struct task *t)
+static void client_post_select(struct sched *s, struct task *t)
{
struct private_client_data *pcd = t->private_data;
return;
}
}
+
+/* connect to para_server and register the client task */
+static int client_connect(struct private_client_data *pcd)
+{
+ int ret;
+
+ pcd->fd = -1;
+ ret = makesock(AF_UNSPEC, IPPROTO_TCP, 0, pcd->conf.hostname_arg,
+ pcd->conf.server_port_arg);
+ if (ret < 0)
+ return ret;
+ pcd->fd = ret;
+ pcd->status = CL_CONNECTED;
+ ret = mark_fd_nonblocking(pcd->fd);
+ if (ret < 0)
+ goto err_out;
+ pcd->task.pre_select = client_pre_select;
+ pcd->task.post_select = client_post_select;
+ pcd->task.private_data = pcd;
+ sprintf(pcd->task.status, "client");
+ register_task(&pcd->task);
+ return 1;
+err_out:
+ close(pcd->fd);
+ pcd->fd = -1;
+ return ret;
+}
+
+/**
+ * Open connection to para_server.
+ *
+ * \param argc Usual argument count.
+ * \param argv Usual argument vector.
+ * \param pcd_ptr Points to dynamically allocated and initialized private client data
+ * upon successful return.
+ *
+ * Check the command line options given by \a argc and argv, set default values
+ * for user name and rsa key file, read further option from the config file.
+ * Finally, establish a connection to para_server.
+ *
+ * \return Standard.
+ */
+int client_open(int argc, char *argv[], struct private_client_data **pcd_ptr)
+{
+ char *home = para_homedir();
+ struct stat statbuf;
+ int ret;
+ struct private_client_data *pcd =
+ para_calloc(sizeof(struct private_client_data));
+
+ *pcd_ptr = pcd;
+ pcd->fd = -1;
+ ret = client_cmdline_parser(argc, argv, &pcd->conf);
+ HANDLE_VERSION_FLAG("client", pcd->conf);
+ ret = -E_CLIENT_SYNTAX;
+ if (!pcd->conf.inputs_num)
+ goto out;
+ pcd->user = pcd->conf.user_given?
+ para_strdup(pcd->conf.user_arg) : para_logname();
+
+ pcd->key_file = pcd->conf.key_file_given?
+ para_strdup(pcd->conf.key_file_arg) :
+ make_message("%s/.paraslash/key.%s", home, pcd->user);
+
+ pcd->config_file = pcd->conf.config_file_given?
+ para_strdup(pcd->conf.config_file_arg) :
+ make_message("%s/.paraslash/client.conf", home);
+ ret = stat(pcd->config_file, &statbuf);
+ if (ret && pcd->conf.config_file_given) {
+ ret = -E_NO_CONFIG;
+ goto out;
+ }
+ if (!ret) {
+ struct client_cmdline_parser_params params = {
+ .override = 0,
+ .initialize = 0,
+ .check_required = 0,
+ .check_ambiguity = 0
+ };
+ client_cmdline_parser_config_file(pcd->config_file,
+ &pcd->conf, ¶ms);
+ }
+ ret = 1;
+ PARA_INFO_LOG("loglevel: %d\n", pcd->conf.loglevel_arg);
+ PARA_INFO_LOG("config_file: %s\n", pcd->config_file);
+ PARA_INFO_LOG("key_file: %s\n", pcd->key_file);
+ PARA_NOTICE_LOG("connecting %s:%d\n", pcd->conf.hostname_arg,
+ pcd->conf.server_port_arg);
+ ret = client_connect(pcd);
+out:
+ free(home);
+ if (ret < 0) {
+ PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+ client_close(pcd);
+ *pcd_ptr = NULL;
+ }
+ return ret;
+}
+