Backport changes from epic5 to make recv_nick, sent_nick and sent_body

per-server, and apply new version of do_oops from flewid (the BX2 version). 

This means that /oops, "/query .", "/query ,", "/msg ." and "/msg ," are now
per-server, along with the $. $, and $B aliases.



git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@87 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
Kevin Easton
2010-06-26 08:18:34 +00:00
parent 56d5c9e643
commit 789ed916cd
10 changed files with 100 additions and 37 deletions

View File

@@ -1,6 +1,11 @@
[Changes 1.2c01] [Changes 1.2c01]
* Handle error return from getcwd() in /cd (caf). * Backport changes from epic5 to make recv_nick, sent_nick and sent_body
per-server, and apply new version of do_oops from flewid. This means
that /oops, "/query .", "/query ,", "/msg ." and "/msg ," are per-server,
along with the $. $, and $B aliases. (caf)
* Handle error return from getcwd() in /cd. (caf)
* Fix alloca warnings on freebsd. (caf) * Fix alloca warnings on freebsd. (caf)

View File

@@ -616,8 +616,8 @@ enum FUNCTION_VALUE
SCREEN_LIST, SCREEN_LIST,
IRCLOG_FP, IRCLOG_FP,
DOING_NOTICE, DOING_NOTICE,
LAST_SENT_MSG_BODY, LAST_SENT_MSG_BODY, /* NO LONGER USED */
SENT_NICK, SENT_NICK, /* NO LONGER USED */
DLL_FUNCTIONS, DLL_FUNCTIONS,
DLL_NUMERIC, DLL_NUMERIC,

View File

@@ -678,8 +678,6 @@ extern Function_ptr *global;
#define autoreply_array (*((NickTab *)global[AUTOREPLY_ARRAY])) #define autoreply_array (*((NickTab *)global[AUTOREPLY_ARRAY]))
#define identd (*((int *)global[IDENTD_SOCKET])) #define identd (*((int *)global[IDENTD_SOCKET]))
#define doing_notice ((int) *((int *)global[DOING_NOTICE])) #define doing_notice ((int) *((int *)global[DOING_NOTICE]))
#define last_sent_msg_body (*((char **)global[LAST_SENT_MSG_BODY]))
#define sent_nick (*((char **)global[SENT_NICK]))
#define default_output_function (*(void (**)(char *))global[DEFAULT_OUTPUT_FUNCTION]) #define default_output_function (*(void (**)(char *))global[DEFAULT_OUTPUT_FUNCTION])

View File

@@ -165,6 +165,12 @@ typedef struct
int ssl_error; int ssl_error;
SSL* ssl_fd; SSL* ssl_fd;
#endif #endif
/* recv_nick: the nickname of the last person to send you a privmsg */
char *recv_nick;
/* sent_nick: the nickname of the last person to whom you sent a privmsg */
char *sent_nick;
char *sent_body;
} Server; } Server;
typedef struct ser_group_list typedef struct ser_group_list
@@ -251,6 +257,13 @@ extern SGroup *server_group_list;
time_t get_server_awaytime (int); time_t get_server_awaytime (int);
void set_server_awaytime (int, time_t); void set_server_awaytime (int, time_t);
void set_server_recv_nick(int server, const char *nick);
char *get_server_recv_nick(int server);
void set_server_sent_nick(int server, const char *nick);
char *get_server_sent_nick(int server);
void set_server_sent_body(int server, const char *msg_body);
char *get_server_sent_body(int server);
void server_redirect (int, char *); void server_redirect (int, char *);
int BX_check_server_redirect (char *); int BX_check_server_redirect (char *);
char * BX_get_server_network (int); char * BX_get_server_network (int);

View File

@@ -119,7 +119,6 @@ extern int doing_notice;
static void oper_password_received (char *, char *); static void oper_password_received (char *, char *);
int no_hook_notify = 0; int no_hook_notify = 0;
char *last_sent_msg_body = NULL;
int load_depth = -1; int load_depth = -1;
extern char cx_function[]; extern char cx_function[];
@@ -139,13 +138,6 @@ extern char cx_function[];
/* The maximum number of recursive LOAD levels allowed */ /* The maximum number of recursive LOAD levels allowed */
#define MAX_LOAD_DEPTH 10 #define MAX_LOAD_DEPTH 10
/* recv_nick: the nickname of the last person to send you a privmsg */
char *recv_nick = NULL;
/* sent_nick: the nickname of the last person to whom you sent a privmsg */
char *sent_nick = NULL;
char *sent_body = NULL;
int interactive = 0; int interactive = 0;
@@ -1085,18 +1077,18 @@ BUILT_IN_COMMAND(blesscmd)
BUILT_IN_COMMAND(do_oops) BUILT_IN_COMMAND(do_oops)
{ {
char *newmsg; const char *to = next_arg(args, &args);
const char *sent_nick = get_server_sent_nick(from_server);
const char *sent_body = get_server_sent_body(from_server);
if (sent_nick && sent_body && to && *to)
if (args && *args && last_sent_msg_body)
{ {
newmsg = next_arg(args, &args);
send_to_server("PRIVMSG %s :Oops, that /msg wasn't for you", sent_nick); send_to_server("PRIVMSG %s :Oops, that /msg wasn't for you", sent_nick);
send_to_server("PRIVMSG %s :%s", newmsg, last_sent_msg_body); send_to_server("PRIVMSG %s :%s", to, sent_body);
if (window_display && do_hook(SEND_MSG_LIST, "%s %s", newmsg, last_sent_msg_body)) if (window_display && do_hook(SEND_MSG_LIST, "%s %s", to, sent_body))
put_it("%s", convert_output_format(fget_string_var(FORMAT_SEND_MSG_FSET),"%s %s %s %s", update_clock(GET_TIME), newmsg, get_server_nickname(from_server), last_sent_msg_body)); put_it("%s", convert_output_format(fget_string_var(FORMAT_SEND_MSG_FSET), "%s %s %s %s", update_clock(GET_TIME),
to, get_server_nickname(from_server), sent_body));
} }
return;
} }
/* /*
@@ -1640,7 +1632,7 @@ BUILT_IN_COMMAND(my_whois)
{ {
char *nick = NULL; char *nick = NULL;
if (!strcmp(command, "WILM")) if (!strcmp(command, "WILM"))
nick = recv_nick; nick = get_server_recv_nick(from_server);
else if (!strcmp(command, "WILN")) else if (!strcmp(command, "WILN"))
nick = last_notice[0].to; nick = last_notice[0].to;
else if (!strcmp(command, "WILC")) else if (!strcmp(command, "WILC"))
@@ -3312,7 +3304,7 @@ BUILT_IN_COMMAND(e_privmsg)
{ {
if (!strcmp(nick, ".")) if (!strcmp(nick, "."))
{ {
if (!(nick = sent_nick)) if (!(nick = get_server_sent_nick(from_server)))
{ {
bitchsay("You have not sent a message to anyone yet"); bitchsay("You have not sent a message to anyone yet");
return; return;
@@ -3320,7 +3312,7 @@ BUILT_IN_COMMAND(e_privmsg)
} }
else if (!strcmp(nick, ",")) else if (!strcmp(nick, ","))
{ {
if (!(nick = recv_nick)) if (!(nick = get_server_recv_nick(from_server)))
{ {
bitchsay("You have not received a message from anyone yet"); bitchsay("You have not received a message from anyone yet");
return; return;
@@ -4004,8 +3996,6 @@ struct target_type target[4] =
logmsg(LOG_SEND_MSG, target[i].nick_list, 0, "%s", copy); logmsg(LOG_SEND_MSG, target[i].nick_list, 0, "%s", copy);
/* save this for /oops */ /* save this for /oops */
malloc_strcpy(&last_sent_msg_body, copy);
if (i == 1 || i == 3) if (i == 1 || i == 3)
{ {
char *channel; char *channel;
@@ -4040,7 +4030,8 @@ struct target_type target[4] =
if ((i == 0)) if ((i == 0))
{ {
malloc_strcpy(&sent_nick, target[0].nick_list); set_server_sent_nick(from_server, target[0].nick_list);
set_server_sent_body(from_server, copy);
add_last_type(&last_sent_msg[0], MAX_LAST_MSG, NULL, NULL, target[i].nick_list, copy); add_last_type(&last_sent_msg[0], MAX_LAST_MSG, NULL, NULL, target[i].nick_list, copy);
} }
else if ((i == 2) || (i == 3)) else if ((i == 2) || (i == 3))

View File

@@ -1084,9 +1084,9 @@ static char *alias_dollar (void) { return m_strdup("$"); }
static char *alias_detected (void) { return m_strdup(last_notify_nick); } static char *alias_detected (void) { return m_strdup(last_notify_nick); }
static char *alias_nick (void) { return m_strdup((current_window->server != -1? get_server_nickname(current_window->server) : empty_string)); } static char *alias_nick (void) { return m_strdup((current_window->server != -1? get_server_nickname(current_window->server) : empty_string)); }
char *alias_away (void) { return m_strdup(get_server_away(from_server)); } char *alias_away (void) { return m_strdup(get_server_away(from_server)); }
static char *alias_sent_nick (void) { return m_strdup((sent_nick) ? sent_nick : empty_string); } static char *alias_sent_nick (void) { return m_strdup(get_server_sent_nick(from_server)); }
static char *alias_recv_nick (void) { return m_strdup((recv_nick) ? recv_nick : empty_string); } static char *alias_recv_nick (void) { return m_strdup(get_server_recv_nick(from_server)); }
static char *alias_msg_body (void) { return m_strdup((sent_body) ? sent_body : empty_string); } static char *alias_msg_body (void) { return m_strdup(get_server_sent_body(from_server)); }
static char *alias_joined_nick (void) { return m_strdup((joined_nick) ? joined_nick : empty_string); } static char *alias_joined_nick (void) { return m_strdup((joined_nick) ? joined_nick : empty_string); }
static char *alias_public_nick (void) { return m_strdup((public_nick) ? public_nick : empty_string); } static char *alias_public_nick (void) { return m_strdup((public_nick) ? public_nick : empty_string); }
static char *alias_show_realname (void) { return m_strdup(realname); } static char *alias_show_realname (void) { return m_strdup(realname); }

View File

@@ -77,7 +77,6 @@ Packages *install_pack = NULL;
extern int BX_read_sockets(); extern int BX_read_sockets();
extern int identd; extern int identd;
extern int doing_notice; extern int doing_notice;
extern char *sent_nick, *last_sent_msg_body;
extern int (*dcc_open_func) (int, int, unsigned long, int); extern int (*dcc_open_func) (int, int, unsigned long, int);
extern int (*dcc_output_func) (int, int, char *, int); extern int (*dcc_output_func) (int, int, char *, int);
@@ -661,8 +660,8 @@ static int already_done = 0;
global_table[OUTPUT_SCREEN] = (Function_ptr) &output_screen; global_table[OUTPUT_SCREEN] = (Function_ptr) &output_screen;
global_table[SCREEN_LIST] = (Function_ptr) &screen_list; global_table[SCREEN_LIST] = (Function_ptr) &screen_list;
global_table[DOING_NOTICE] = (Function_ptr) &doing_notice; global_table[DOING_NOTICE] = (Function_ptr) &doing_notice;
global_table[SENT_NICK] = (Function_ptr) &sent_nick; global_table[SENT_NICK] = 0; /* No longer used */
global_table[LAST_SENT_MSG_BODY] = (Function_ptr) &last_sent_msg_body; global_table[LAST_SENT_MSG_BODY] = 0; /* No longer used */
global_table[IRCLOG_FP] = (Function_ptr) &irclog_fp; global_table[IRCLOG_FP] = (Function_ptr) &irclog_fp;
#ifdef WANT_DLL #ifdef WANT_DLL

View File

@@ -627,7 +627,7 @@ static void p_privmsg(char *from, char **Args)
{ {
if (!no_flood) if (!no_flood)
break; break;
malloc_strcpy(&recv_nick, from); set_server_recv_nick(from_server, from);
#ifdef WANT_CDCC #ifdef WANT_CDCC
if ((msgcdcc(from, to, ptr)) == NULL) if ((msgcdcc(from, to, ptr)) == NULL)
break; break;
@@ -1179,7 +1179,6 @@ static void p_invite(char *from, char **ArgList)
} }
if (!(chan = lookup_channel(invite_channel, from_server, 0))) if (!(chan = lookup_channel(invite_channel, from_server, 0)))
check_auto_join(from_server, from, invite_channel, ArgList[2]); check_auto_join(from_server, from, invite_channel, ArgList[2]);
malloc_strcpy(&recv_nick, from);
add_last_type(&last_invite_channel[0], 1, from, FromUserHost, ArgList[1], ArgList[2]?ArgList[2]:empty_string); add_last_type(&last_invite_channel[0], 1, from, FromUserHost, ArgList[1], ArgList[2]?ArgList[2]:empty_string);
reset_display_target(); reset_display_target();
} }

View File

@@ -143,6 +143,10 @@ void BX_close_server (int cs_index, char *message)
server_list[cs_index].awaytime = 0; server_list[cs_index].awaytime = 0;
new_free(&server_list[cs_index].away); new_free(&server_list[cs_index].away);
new_free(&server_list[cs_index].recv_nick);
new_free(&server_list[cs_index].sent_nick);
new_free(&server_list[cs_index].sent_body);
if (server_list[cs_index].write > -1) if (server_list[cs_index].write > -1)
{ {
if (message && *message && !server_list[cs_index].closing) if (message && *message && !server_list[cs_index].closing)
@@ -830,6 +834,9 @@ void remove_from_server_list (int i)
new_free(&server_list[i].s_nickname); new_free(&server_list[i].s_nickname);
new_free(&server_list[i].d_nickname); new_free(&server_list[i].d_nickname);
new_free(&server_list[i].umodes); new_free(&server_list[i].umodes);
new_free(&server_list[i].recv_nick);
new_free(&server_list[i].sent_nick);
new_free(&server_list[i].sent_body);
#ifdef HAVE_SSL #ifdef HAVE_SSL
SSL_CTX_free(server_list[i].ctx); SSL_CTX_free(server_list[i].ctx);
#endif #endif
@@ -3071,6 +3078,57 @@ unsigned short port = 113;
#endif #endif
} }
void set_server_recv_nick(int server, const char *nick)
{
if (server <= -1 || server >= number_of_servers)
return;
if (nick)
malloc_strcpy(&server_list[server].recv_nick, nick);
else
new_free(&server_list[server].recv_nick);
}
char *get_server_recv_nick(int server)
{
if (server <= -1 || server >= number_of_servers)
return NULL;
return server_list[server].recv_nick;
}
void set_server_sent_nick(int server, const char *nick)
{
if (server <= -1 || server >= number_of_servers)
return;
if (nick)
malloc_strcpy(&server_list[server].sent_nick, nick);
else
new_free(&server_list[server].sent_nick);
}
char *get_server_sent_nick(int server)
{
if (server <= -1 || server >= number_of_servers)
return NULL;
return server_list[server].sent_nick;
}
void set_server_sent_body(int server, const char *msg_body)
{
if (server <= -1 || server >= number_of_servers)
return;
if (msg_body)
malloc_strcpy(&server_list[server].sent_body, msg_body);
else
new_free(&server_list[server].sent_body);
}
char *get_server_sent_body(int server)
{
if (server <= -1 || server >= number_of_servers)
return NULL;
return server_list[server].sent_body;
}
Sping *get_server_sping(int server, char *sname) Sping *get_server_sping(int server, char *sname)
{ {
if (server <= -1) if (server <= -1)

View File

@@ -3744,12 +3744,12 @@ Window *window_query (Window *window, char **args, char *usage)
host = *args; host = *args;
if (!strcmp(nick, ".")) if (!strcmp(nick, "."))
{ {
if (!(nick = sent_nick)) if (!(nick = get_server_sent_nick(window->server)))
say("You have not messaged anyone yet"); say("You have not messaged anyone yet");
} }
else if (!strcmp(nick, ",")) else if (!strcmp(nick, ","))
{ {
if (!(nick = recv_nick)) if (!(nick = get_server_recv_nick(window->server)))
say("You have not recieved a message yet"); say("You have not recieved a message yet");
} }
else if (!strcmp(nick, "*") && else if (!strcmp(nick, "*") &&