X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=client.h;h=1c9a8c22ae4dabd73a20547c8ce6bc195989e218;hp=8f7b9a5dc1b47d4783da5ead2274cd87607a296f;hb=82008b5367b438f01bb3899a93b406a6066d2b1f;hpb=4b16f9ed84133d5c475eaeb887df6475ab0091bc diff --git a/client.h b/client.h index 8f7b9a5d..1c9a8c22 100644 --- a/client.h +++ b/client.h @@ -19,39 +19,72 @@ /** \file client.h common client functions and exported symbols from client_common.c */ #include + +/** + * the different states of a connection from the view of the client + */ enum { + /** tcp connection is established */ CL_CONNECTED, + /** server sends the welcome message */ CL_RECEIVED_WELCOME, + /** client sends the authentification request */ CL_SENT_AUTH, + /** server sends a challenge */ CL_RECEIVED_CHALLENGE, + /** clientd solves the challenge and sends the result */ CL_SENT_CH_RESPONSE, + /** server accepts this authentication */ CL_RECEIVED_PROCEED, + /** client sends the command */ CL_SENT_COMMAND, - CL_SENDING_STDIN, - CL_RECEIVING_SERVER_OUTPUT + /** server expects data */ + CL_SENDING, + /** client expects data */ + CL_RECEIVING, }; #define CLIENT_BUFSIZE 8192 +/** + * data specific to a client task + */ struct private_client_data { + /** the state of the connection */ int status; + /** the file descriptor */ int fd; + /** the configuration (including the command) */ struct client_args_info conf; + /** the config file for client options */ char *config_file; + /** the RSA private key */ char *key_file; + /** paraslash user name */ char *user; + /** session key for receiving data */ RC4_KEY rc4_recv_key; + /** session key for sending data */ RC4_KEY rc4_send_key; + /** the client task structure */ struct task task; + /** non-zero if task is unregistered */ int eof; + /** the buffer used for handshake and receiving */ char buf[CLIENT_BUFSIZE]; + /** number of bytes loaded in \p buf */ size_t loaded; + /** non-zero if the pre_select hook added \p fd to the read fd set */ int check_r; + /** non-zero if the pre_select hook added \p fd to the write fd set */ int check_w; + /** the decrypted challenge */ long unsigned challenge_nr; - /* only used if stdin gets sent to para_server */ + /** pointer to the data to be sent to para_server */ char *inbuf; + /** number of bytes loaded in \p inbuf */ size_t *in_loaded; + /** non-zero if input task encountered an eof or an errro condition */ int *in_eof; };