From d7dbef2fae8eeb3c077faca6eb59e86f636191b8 Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Sun, 1 Jul 2007 13:38:52 +0000 Subject: Introducing /reconnect command --- vchat-client.c | 6 ++++- vchat-commands.c | 72 +++++++++++++++++++++++++++++++++----------------------- vchat-help.h | 26 ++++++++++---------- vchat.h | 2 +- 4 files changed, 63 insertions(+), 43 deletions(-) diff --git a/vchat-client.c b/vchat-client.c index dc06015..f521432 100755 --- a/vchat-client.c +++ b/vchat-client.c @@ -40,6 +40,8 @@ unsigned int loggedin = 0; int status = 1; /* we set this, we WANT to quit */ int ownquit = 0; +/* we set this, we DONT want to quit */ +int wantreconnect = 0; /* error string to show after exit */ char errstr[ERRSTRSIZE] = "\0"; @@ -549,8 +551,10 @@ main (int argc, char **argv) /* sanely close connection to server */ vcdisconnect (); - if( !ownquit && getintoption( CF_AUTORECONN ) ) + if( !ownquit && ( getintoption( CF_AUTORECONN ) || wantreconnect ) ) status = 1; + + wantreconnect = 0; } /* call cleanup-hook without signal */ diff --git a/vchat-commands.c b/vchat-commands.c index 8a4f475..651878c 100755 --- a/vchat-commands.c +++ b/vchat-commands.c @@ -29,6 +29,8 @@ char *vchat_cm_version = "$Id$"; /* from vchat-client.c */ extern int ownquit; +extern int wantreconnect; +extern int status; /* our "/command " table */ enum { @@ -48,21 +50,23 @@ COMMAND_PMSHORT, COMMAND_QUERY, COMMAND_QUITSHORT, COMMAND_PLAIN, +COMMAND_RECONNECT, COMMAND_NONE }; -static void command_quit ( char *tail); -static void command_user ( char *tail); -static void command_pm ( char *tail); -static void command_action ( char *tail); -static void command_help ( char *tail); -static void command_flt ( char *tail); -static void command_lsflt ( char *tail); -static void command_clflt ( char *tail); -static void command_rmflt ( char *tail); - void command_version ( char *tail); -static void command_none ( char *line); -static void command_query ( char *tail); +static void command_quit ( char *tail); +static void command_user ( char *tail); +static void command_pm ( char *tail); +static void command_action ( char *tail); +static void command_help ( char *tail); +static void command_flt ( char *tail); +static void command_lsflt ( char *tail); +static void command_clflt ( char *tail); +static void command_rmflt ( char *tail); + void command_version ( char *tail); +static void command_none ( char *line); +static void command_query ( char *tail); +static void command_reconnect ( char *tail); static void output_default ( char *tail); @@ -70,23 +74,24 @@ static void output_default ( char *tail); static commandentry commandtable[] = { -{ COMMAND_VERSION, "VERSION", 7, command_version, SHORT_HELPTEXT_VERSION, LONG_HELPTEXT_VERSION }, -{ COMMAND_LSFLT, "LSFLT", 5, command_lsflt, NULL, LONG_HELPTEXT_LSFLT }, -{ COMMAND_RMFLT, "RMFLT", 5, command_rmflt, NULL, LONG_HELPTEXT_RMFLT }, -{ COMMAND_CLFLT, "CLFLT", 5, command_clflt, NULL, LONG_HELPTEXT_CLFLT }, -{ COMMAND_HELP, "HELP", 4, command_help, SHORT_HELPTEXT_HELP, LONG_HELPTEXT_HELP }, -{ COMMAND_FILTERS, "FILTERS", 7, command_help, SHORT_HELPTEXT_FILTERS, LONG_HELPTEXT_FILTERS }, -{ COMMAND_KEYS, "KEYS", 4, command_help, SHORT_HELPTEXT_KEYS, LONG_HELPTEXT_KEYS }, -{ COMMAND_QUERY, "QUERY", 5, command_query, NULL, NULL }, -{ COMMAND_QUIT, "QUIT", 4, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, -{ COMMAND_USER, "USER", 4, command_user, SHORT_HELPTEXT_USER, LONG_HELPTEXT_USER }, -{ COMMAND_FLT, "FLT", 3, command_flt, NULL, LONG_HELPTEXT_FLT }, -{ COMMAND_PM, "MSG", 3, command_pm, SHORT_HELPTEXT_MSG, LONG_HELPTEXT_MSG }, -{ COMMAND_ACTION, "ME", 2, command_action, SHORT_HELPTEXT_ME, LONG_HELPTEXT_ME }, -{ COMMAND_PMSHORT, "M", 1, command_pm, NULL, SHORT_HELPTEXT_MSG }, -{ COMMAND_QUITSHORT,"Q", 1, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, -{ COMMAND_PLAIN, "/", 1, output_default, NULL, NULL }, -{ COMMAND_NONE, "", 0, command_none, NULL, NULL } +{ COMMAND_VERSION, "VERSION", 7, command_version, SHORT_HELPTEXT_VERSION, LONG_HELPTEXT_VERSION }, +{ COMMAND_LSFLT, "LSFLT", 5, command_lsflt, NULL, LONG_HELPTEXT_LSFLT }, +{ COMMAND_RMFLT, "RMFLT", 5, command_rmflt, NULL, LONG_HELPTEXT_RMFLT }, +{ COMMAND_CLFLT, "CLFLT", 5, command_clflt, NULL, LONG_HELPTEXT_CLFLT }, +{ COMMAND_HELP, "HELP", 4, command_help, SHORT_HELPTEXT_HELP, LONG_HELPTEXT_HELP }, +{ COMMAND_FILTERS, "FILTERS", 7, command_help, SHORT_HELPTEXT_FILTERS, LONG_HELPTEXT_FILTERS }, +{ COMMAND_RECONNECT, "RECONNECT", 9, command_reconnect, SHORT_HELPTEXT_RECONNECT, LONG_HELPTEXT_RECONNECT }, +{ COMMAND_KEYS, "KEYS", 4, command_help, SHORT_HELPTEXT_KEYS, LONG_HELPTEXT_KEYS }, +{ COMMAND_QUERY, "QUERY", 5, command_query, NULL, NULL }, +{ COMMAND_QUIT, "QUIT", 4, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, +{ COMMAND_USER, "USER", 4, command_user, SHORT_HELPTEXT_USER, LONG_HELPTEXT_USER }, +{ COMMAND_FLT, "FLT", 3, command_flt, NULL, LONG_HELPTEXT_FLT }, +{ COMMAND_PM, "MSG", 3, command_pm, SHORT_HELPTEXT_MSG, LONG_HELPTEXT_MSG }, +{ COMMAND_ACTION, "ME", 2, command_action, SHORT_HELPTEXT_ME, LONG_HELPTEXT_ME }, +{ COMMAND_PMSHORT, "M", 1, command_pm, NULL, SHORT_HELPTEXT_MSG }, +{ COMMAND_QUITSHORT, "Q", 1, command_quit, SHORT_HELPTEXT_QUIT, LONG_HELPTEXT_QUIT }, +{ COMMAND_PLAIN, "/", 1, output_default, NULL, NULL }, +{ COMMAND_NONE, "", 0, command_none, NULL, NULL } }; /* parse "/command" */ @@ -372,6 +377,15 @@ command_action(char *tail) doaction( tail); } +/* handle a "/reconnect" request */ +static void +command_reconnect(char *tail) +{ + status = 0; + wantreconnect = 1; + ownquit = 0; +} + /* handle a "/quit " exit */ static void command_quit(char *tail) diff --git a/vchat-help.h b/vchat-help.h index 9cfe04b..aec0fcf 100755 --- a/vchat-help.h +++ b/vchat-help.h @@ -51,16 +51,18 @@ ^X - switch off message window or\n\ toggle private window\n\ TAB - nick completion" -#define SHORT_HELPTEXT_QUIT "/QUIT [REASON] Leave the chat for reason Reason" -#define LONG_HELPTEXT_QUIT NULL -#define SHORT_HELPTEXT_USER "/USER REGEX Lists all users matching regex REGEX" -#define LONG_HELPTEXT_USER NULL -#define SHORT_HELPTEXT_MSG "/M[SG] USER MESSAGE Send private message to user USER" -#define LONG_HELPTEXT_MSG NULL -#define SHORT_HELPTEXT_ME "/ME ACTION Let the user do an action" -#define LONG_HELPTEXT_ME NULL -#define SHORT_HELPTEXT_M SHORT_HELPTEXT_MSG -#define LONG_HELPTEXT_M LONG_HELPTEXT_MSG -#define SHORT_HELPTEXT_FILTERS "/HELP FILTERS Show summary of filter commands" -#define LONG_HELPTEXT_FILTERS SHORT_HELPTEXT_FLT "\n" SHORT_HELPTEXT_RMFLT "\n" SHORT_HELPTEXT_LSFLT "\n" SHORT_HELPTEXT_CLFLT +#define SHORT_HELPTEXT_QUIT "/QUIT [REASON] Leave the chat for reason Reason" +#define LONG_HELPTEXT_QUIT NULL +#define SHORT_HELPTEXT_USER "/USER REGEX Lists all users matching regex REGEX" +#define LONG_HELPTEXT_USER NULL +#define SHORT_HELPTEXT_MSG "/M[SG] USER MESSAGE Send private message to user USER" +#define LONG_HELPTEXT_MSG NULL +#define SHORT_HELPTEXT_ME "/ME ACTION Let the user do an action" +#define LONG_HELPTEXT_ME NULL +#define SHORT_HELPTEXT_M SHORT_HELPTEXT_MSG +#define LONG_HELPTEXT_M LONG_HELPTEXT_MSG +#define SHORT_HELPTEXT_FILTERS "/HELP FILTERS Show summary of filter commands" +#define LONG_HELPTEXT_FILTERS SHORT_HELPTEXT_FLT "\n" SHORT_HELPTEXT_RMFLT "\n" SHORT_HELPTEXT_LSFLT "\n" SHORT_HELPTEXT_CLFLT +#define LONG_HELPTEXT_RECONNECT NULL +#define SHORT_HELPTEXT_RECONNECT "/RECONNECT Forces client to reconnect" diff --git a/vchat.h b/vchat.h index 613c0cd..d8054bd 100755 --- a/vchat.h +++ b/vchat.h @@ -204,7 +204,7 @@ void handleline (char *); /* struct for defining "/command" handlers */ typedef struct { int number; - char name[8]; + char name[10]; int len; void (*handler)(char *); char *short_help; -- cgit v1.2.3