Add missing files for para_afh.
[paraslash.git] / client_common.c
index 78f9cb3..c25e88f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1997-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1997-2008 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -71,104 +71,6 @@ void client_close(struct private_client_data *pcd)
        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, &params);
-       }
-       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.
  *
@@ -183,7 +85,7 @@ out:
  *
  * \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;
 
@@ -255,7 +157,7 @@ static ssize_t client_recv_buffer(struct private_client_data *pcd)
  *
  * \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;
 
@@ -293,7 +195,7 @@ void client_post_select(struct sched *s, struct task *t)
                        PARA_ERROR_LOG("received the following: %s\n", pcd->buf);
                        return;
                }
-               PARA_INFO_LOG("%s", "<-- [challenge]\n");
+               PARA_INFO_LOG("<-- [challenge]\n");
                /* decrypt challenge number */
                t->ret = para_decrypt_challenge(pcd->key_file, &pcd->challenge_nr,
                        (unsigned char *) pcd->buf, 64);
@@ -326,7 +228,7 @@ void client_post_select(struct sched *s, struct task *t)
                pcd->status = CL_RECEIVED_PROCEED;
                if (bytes_received < PROCEED_MSG_LEN + 32)
                        return;
-               PARA_INFO_LOG("%s", "decrypting session key\n");
+               PARA_INFO_LOG("decrypting session key\n");
                t->ret = para_decrypt_buffer(pcd->key_file, rc4_buf,
                        (unsigned char *)pcd->buf + PROCEED_MSG_LEN + 1,
                        bytes_received - PROCEED_MSG_LEN - 1);
@@ -377,3 +279,102 @@ void client_post_select(struct sched *s, struct task *t)
                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, &params);
+       }
+       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;
+}
+