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]
* 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)

View File

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

View File

@@ -678,8 +678,6 @@ extern Function_ptr *global;
#define autoreply_array (*((NickTab *)global[AUTOREPLY_ARRAY]))
#define identd (*((int *)global[IDENTD_SOCKET]))
#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])

View File

@@ -165,6 +165,12 @@ typedef struct
int ssl_error;
SSL* ssl_fd;
#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;
typedef struct ser_group_list
@@ -251,6 +257,13 @@ extern SGroup *server_group_list;
time_t get_server_awaytime (int);
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 *);
int BX_check_server_redirect (char *);
char * BX_get_server_network (int);

View File

@@ -119,7 +119,6 @@ extern int doing_notice;
static void oper_password_received (char *, char *);
int no_hook_notify = 0;
char *last_sent_msg_body = NULL;
int load_depth = -1;
extern char cx_function[];
@@ -139,13 +138,6 @@ extern char cx_function[];
/* The maximum number of recursive LOAD levels allowed */
#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;
@@ -1085,18 +1077,18 @@ BUILT_IN_COMMAND(blesscmd)
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 (args && *args && last_sent_msg_body)
if (sent_nick && sent_body && to && *to)
{
newmsg = next_arg(args, &args);
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);
if (window_display && do_hook(SEND_MSG_LIST, "%s %s", newmsg, 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), newmsg, get_server_nickname(from_server), last_sent_msg_body));
send_to_server("PRIVMSG %s :%s", to, sent_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),
to, get_server_nickname(from_server), sent_body));
}
return;
}
/*
@@ -1640,7 +1632,7 @@ BUILT_IN_COMMAND(my_whois)
{
char *nick = NULL;
if (!strcmp(command, "WILM"))
nick = recv_nick;
nick = get_server_recv_nick(from_server);
else if (!strcmp(command, "WILN"))
nick = last_notice[0].to;
else if (!strcmp(command, "WILC"))
@@ -3312,7 +3304,7 @@ BUILT_IN_COMMAND(e_privmsg)
{
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");
return;
@@ -3320,7 +3312,7 @@ BUILT_IN_COMMAND(e_privmsg)
}
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");
return;
@@ -4004,8 +3996,6 @@ struct target_type target[4] =
logmsg(LOG_SEND_MSG, target[i].nick_list, 0, "%s", copy);
/* save this for /oops */
malloc_strcpy(&last_sent_msg_body, copy);
if (i == 1 || i == 3)
{
char *channel;
@@ -4040,7 +4030,8 @@ struct target_type target[4] =
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);
}
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_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)); }
static char *alias_sent_nick (void) { return m_strdup((sent_nick) ? sent_nick : empty_string); }
static char *alias_recv_nick (void) { return m_strdup((recv_nick) ? recv_nick : empty_string); }
static char *alias_msg_body (void) { return m_strdup((sent_body) ? sent_body : 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(get_server_recv_nick(from_server)); }
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_public_nick (void) { return m_strdup((public_nick) ? public_nick : empty_string); }
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 identd;
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_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[SCREEN_LIST] = (Function_ptr) &screen_list;
global_table[DOING_NOTICE] = (Function_ptr) &doing_notice;
global_table[SENT_NICK] = (Function_ptr) &sent_nick;
global_table[LAST_SENT_MSG_BODY] = (Function_ptr) &last_sent_msg_body;
global_table[SENT_NICK] = 0; /* No longer used */
global_table[LAST_SENT_MSG_BODY] = 0; /* No longer used */
global_table[IRCLOG_FP] = (Function_ptr) &irclog_fp;
#ifdef WANT_DLL

View File

@@ -627,7 +627,7 @@ static void p_privmsg(char *from, char **Args)
{
if (!no_flood)
break;
malloc_strcpy(&recv_nick, from);
set_server_recv_nick(from_server, from);
#ifdef WANT_CDCC
if ((msgcdcc(from, to, ptr)) == NULL)
break;
@@ -1179,7 +1179,6 @@ static void p_invite(char *from, char **ArgList)
}
if (!(chan = lookup_channel(invite_channel, from_server, 0)))
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);
reset_display_target();
}

View File

@@ -143,6 +143,10 @@ void BX_close_server (int cs_index, char *message)
server_list[cs_index].awaytime = 0;
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 (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].d_nickname);
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
SSL_CTX_free(server_list[i].ctx);
#endif
@@ -3071,6 +3078,57 @@ unsigned short port = 113;
#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)
{
if (server <= -1)

View File

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