Implement client-server feature negotiation.
[paraslash.git] / command.h
index 347dd81ceedc753eb7f89a204ae5372ddb079dc7..851c00ba2f4ab4450493d29f878ea65125462588 100644 (file)
--- a/command.h
+++ b/command.h
@@ -1,5 +1,23 @@
 /** \file command.h The structure of server and afs commands. */
 
+/** Per connection data available to command handlers. */
+struct command_context {
+       /** Network address of the peer. */
+       const char *peer;
+       /** The paraslash user that executes this command. */
+       struct user *u;
+       /** Argument count. */
+       int argc;
+       /** Argument vector. */
+       char **argv;
+       /** The command being executed. */
+       struct server_command *cmd;
+       /** File descriptor and crypto keys. */
+       struct stream_cipher_context scc;
+       /** Whether to use the sideband API for this command. */
+       bool use_sideband;
+};
+
 /**
  * Defines one command of para_server.
  */
@@ -7,7 +25,7 @@ struct server_command {
        /** The name of the command. */
        const char *name;
        /** Pointer to the function that handles the command. */
-       int (*handler)(struct rc4_context *, int, char * const * const);
+       int (*handler)(struct command_context *);
        /** The privileges a user must have to execute this command. */
        unsigned int perms;
        /** One-line description of the command. */