From 4ce2f293e84d6fca66d1c507833a182f31200689 Mon Sep 17 00:00:00 2001 From: Aleteoryx Date: Mon, 28 Jul 2025 03:19:18 -0400 Subject: [PATCH] dynamic dispatch refactored --- src/common/ctcp.c | 2 +- src/common/dcc.c | 10 ++-- src/common/hexchat.c | 8 +-- src/common/hexchat.h | 46 +++++------------ src/common/inbound.c | 24 ++++----- src/common/modes.c | 3 +- src/common/notify.c | 9 ++-- src/common/outbound.c | 95 +++++++++++++++++------------------ src/common/proto-irc.c | 110 ++++++++++++----------------------------- src/common/proto-irc.h | 27 ++++++++++ src/common/server.c | 3 +- src/common/server.h | 2 +- src/fe-gtk/chanlist.c | 4 +- src/fe-gtk/joind.c | 2 +- src/fe-gtk/maingui.c | 20 ++++---- src/fe-text/fe-text.c | 7 +-- 16 files changed, 165 insertions(+), 207 deletions(-) diff --git a/src/common/ctcp.c b/src/common/ctcp.c index d46e7ceb21afe3639c569871337b15ecc2dc4b84..75d1e01be667df5584b0c8bf51cba79fe89e7a18 100644 --- a/src/common/ctcp.c +++ b/src/common/ctcp.c @@ -147,7 +147,7 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip, g_snprintf (outbuf, sizeof (outbuf), "VERSION HexChat "PACKAGE_VERSION" / %s", get_sys_str (1)); #endif - serv->p_nctcp (serv, nick, outbuf); + irc_nctcp (serv, nick, outbuf); } if (word[4][1] == '\0') diff --git a/src/common/dcc.c b/src/common/dcc.c index c56c1b2fe6a882045fe4238ea1daae9258b4f449..1044e18ef5d72d7a861bd867ab7b196dc70967ad 100644 --- a/src/common/dcc.c +++ b/src/common/dcc.c @@ -1392,7 +1392,7 @@ dcc_connect (struct DCC *dcc) else g_snprintf (tbuf, sizeof (tbuf), "DCC CHAT chat %u %d %d", dcc->addr, dcc->port, dcc->pasvid); - dcc->serv->p_ctcp (dcc->serv, dcc->nick, tbuf); + irc_ctcp (dcc->serv, dcc->nick, tbuf); } else { @@ -1897,7 +1897,7 @@ dcc_send (struct session *sess, char *to, char *filename, gint64 maxcps, int pas file_part (dcc->file), dcc->addr, dcc->port, dcc->size); } - sess->server->p_ctcp (sess->server, to, outbuf); + irc_ctcp (sess->server, to, outbuf); EMIT_SIGNAL (XP_TE_DCCOFFER, sess, file_part (dcc->file), to, dcc->file, NULL, 0); @@ -2323,7 +2323,7 @@ dcc_chat (struct session *sess, char *nick, int passive) g_snprintf (outbuf, sizeof (outbuf), "DCC CHAT chat %u %d", dcc->addr, dcc->port); } - dcc->serv->p_ctcp (dcc->serv, nick, outbuf); + irc_ctcp (dcc->serv, nick, outbuf); EMIT_SIGNAL (XP_TE_DCCCHATOFFERING, sess, nick, NULL, NULL, NULL, 0); } else { @@ -2356,7 +2356,7 @@ dcc_resume (struct DCC *dcc) if (dcc->pasvid) sprintf (tbuf + strlen (tbuf), " %d", dcc->pasvid); - dcc->serv->p_ctcp (dcc->serv, dcc->nick, tbuf); + irc_ctcp (dcc->serv, dcc->nick, tbuf); return 1; } @@ -2601,7 +2601,7 @@ handle_dcc (struct session *sess, char *nick, char *word[], char *word_eol[], "DCC ACCEPT %s %d %" G_GUINT64_FORMAT, file_part (dcc->file), port, dcc->resumable); - dcc->serv->p_ctcp (dcc->serv, dcc->nick, tbuf); + irc_ctcp (dcc->serv, dcc->nick, tbuf); } sprintf (tbuf, "%" G_GUINT64_FORMAT, dcc->pos); EMIT_SIGNAL_TAGS (XP_TE_DCCRESUMEREQUEST, sess, nick, file_part (dcc->file), diff --git a/src/common/hexchat.c b/src/common/hexchat.c index fb413c5e6c684ae9ebf55e8d9d5a121d10d65e60..6742f241ce8fdbe0152a7b5f695b4ec3e6ead5d2 100644 --- a/src/common/hexchat.c +++ b/src/common/hexchat.c @@ -48,6 +48,7 @@ #include "plugin-timer.h" #include "notify.h" #include "server.h" +#include "proto-irc.h" #include "servlist.h" #include "outbound.h" #include "text.h" @@ -271,7 +272,7 @@ lag_check (void) else { g_snprintf (tbuf, sizeof (tbuf), "LAG%lu", tim); - serv->p_ping (serv, "", tbuf); + irc_ping (serv, "", tbuf); if (!serv->lag_sent) { @@ -317,8 +318,7 @@ doover: { sess->done_away_check = TRUE; sess->doing_who = TRUE; - /* this'll send a WHO #channel */ - sess->server->p_away_status (sess->server, sess->channel); + irc_who (sess->server, sess->channel); sent += sess->total; } } @@ -518,7 +518,7 @@ new_ircwindow (ircconn *serv, char *name, int type, int focus) switch (type) { case SESS_SERVER: - serv = server_new (); + serv = ircconn_new (); if (prefs.hex_gui_tab_server) sess = session_new (serv, name, SESS_SERVER, focus); else diff --git a/src/common/hexchat.h b/src/common/hexchat.h index 813a4e65426415702e33f413f404c449db8a0dc8..275093a42e9abb1a6ed72fe84d9a06b1a2870567 100644 --- a/src/common/hexchat.h +++ b/src/common/hexchat.h @@ -433,13 +433,22 @@ typedef struct session #define MECH_SCRAM_SHA_256 3 #define MECH_SCRAM_SHA_512 4 +typedef struct conn +{ + +} conn; + typedef struct ircconn { + struct conn c; + /* server control operations (in server*.c) */ int (*cleanup)(struct ircconn *); void (*flush_queue)(struct ircconn *); void (*auto_reconnect)(struct ircconn *, int send_quit, int err); + /* irc protocol functions (in proto*.c) */ + void (*p_inline)(struct ircconn *, char *buf, int len); void (*p_connected)(struct ircconn *); void (*p_disconnected)(struct ircconn *, int, int); void (*p_ssl_message)(struct ircconn *, const char *); @@ -455,42 +464,9 @@ typedef struct ircconn void (*p_throttle_update)(struct ircconn *); void (*p_cleanup)(struct ircconn *); void (*p_stopconnect)(struct ircconn *); - - /* irc protocol functions (in proto*.c) */ - void (*p_inline)(struct ircconn *, char *buf, int len); - void (*p_invite)(struct ircconn *, char *channel, char *nick); - void (*p_cycle)(struct ircconn *, char *channel, char *key); - void (*p_ctcp)(struct ircconn *, char *to, char *msg); - void (*p_nctcp)(struct ircconn *, char *to, char *msg); + int (*p_cmp)(const char *s1, const char *s2); void (*p_quit)(struct ircconn *); - void (*p_kick)(struct ircconn *, char *channel, char *nick, char *reason); - void (*p_part)(struct ircconn *, char *channel, char *reason); - void (*p_ns_identify)(struct ircconn *, char *pass); - void (*p_ns_ghost)(struct ircconn *, char *usname, char *pass); - void (*p_join)(struct ircconn *, char *channel, char *key); - void (*p_join_list)(struct ircconn *, GSList *favorites); - void (*p_login)(struct ircconn *, char *user, char *realname); - void (*p_join_info)(struct ircconn *, char *channel); - void (*p_mode)(struct ircconn *, char *target, char *mode); - void (*p_user_list)(struct ircconn *, char *channel); - void (*p_away_status)(struct ircconn *, char *channel); - void (*p_whois)(struct ircconn *, char *nicks); - void (*p_get_ip)(struct ircconn *, char *nick); - void (*p_get_ip_uh)(struct ircconn *, char *nick); - void (*p_set_back)(struct ircconn *); - void (*p_set_away)(struct ircconn *, char *reason); - void (*p_message)(struct ircconn *, char *channel, char *text); - void (*p_action)(struct ircconn *, char *channel, char *act); - void (*p_notice)(struct ircconn *, char *channel, char *text); - void (*p_topic)(struct ircconn *, char *channel, char *topic); - void (*p_list_channels)(struct ircconn *, char *arg, int min_users); - void (*p_change_nick)(struct ircconn *, char *new_nick); - void (*p_names)(struct ircconn *, char *channel); - void (*p_ping)(struct ircconn *, char *to, char *timestring); -/* void (*p_set_away)(struct ircconn *);*/ - int (*p_raw)(struct ircconn *, char *raw); - int (*p_cmp)(const char *s1, const char *s2); - + int port; int sok; /* is equal to sok4 or sok6 (the one we are using) */ int sok4; /* tcp4 socket */ diff --git a/src/common/inbound.c b/src/common/inbound.c index dd94dd8cec349a1a7a901d6bb55744455e334f23..a5a8c2772a7f17d9d8a6b71b83b5acb2bd87807f 100644 --- a/src/common/inbound.c +++ b/src/common/inbound.c @@ -42,6 +42,7 @@ #include "outbound.h" #include "inbound.h" #include "server.h" +#include "proto-irc.h" #include "servlist.h" #include "text.h" #include "ctcp.h" @@ -471,7 +472,7 @@ inbound_chanmsg (ircconn *serv, session *sess, char *chan, char *from, if (fromme) { if (prefs.hex_away_auto_unmark && serv->is_away && !tags_data->timestamp) - sess->server->p_set_back (sess->server); + irc_set_back (sess->server); EMIT_SIGNAL_TAGS (XP_TE_UCHANMSG, sess, from, text, nickchar, NULL, 0, tags_data); return; } @@ -619,14 +620,13 @@ inbound_ujoin (ircconn *serv, char *chan, char *nick, char *ip, sess->end_of_names = FALSE; /* sends a MODE */ - serv->p_join_info (sess->server, chan); + irc_join_info (sess->server, chan); EMIT_SIGNAL_TAGS (XP_TE_UJOIN, sess, nick, chan, ip, NULL, 0, tags_data); if (prefs.hex_irc_who_join) { - /* sends WHO #channel */ - serv->p_user_list (sess->server, chan); + irc_who (sess->server, chan); sess->doing_who = TRUE; } } @@ -642,7 +642,7 @@ inbound_ukick (ircconn *serv, char *chan, char *kicker, char *reason, clear_channel (sess); if (prefs.hex_irc_auto_rejoin) { - serv->p_join (serv, chan, sess->channelkey); + irc_join (serv, chan, sess->channelkey); safe_strcpy (sess->waitchannel, chan, CHANLEN); } } @@ -1172,7 +1172,7 @@ check_autojoin_channels (ircconn *serv) if (sess_channels) { - serv->p_join_list (serv, sess_channels); + irc_join_list (serv, sess_channels); g_slist_free_full (sess_channels, (GDestroyNotify) servlist_favchan_free); } else @@ -1180,7 +1180,7 @@ check_autojoin_channels (ircconn *serv) /* If there's no session, just autojoin to favorites. */ if (serv->favlist) { - serv->p_join_list (serv, serv->favlist); + irc_join_list (serv, serv->favlist); i++; /* FIXME this is not going to work and is not needed either. server_free() does the job already. */ @@ -1213,7 +1213,7 @@ inbound_next_nick (session *sess, char *nick, int error, { newnick = net->nick2; } - serv->p_change_nick (serv, newnick); + irc_change_nick (serv, newnick); if (error) { EMIT_SIGNAL_TAGS (XP_TE_NICKERROR, sess, nick, newnick, NULL, NULL, 0, tags_data); @@ -1225,7 +1225,7 @@ inbound_next_nick (session *sess, char *nick, int error, break; case 3: - serv->p_change_nick (serv, prefs.hex_irc_nick3); + irc_change_nick (serv, prefs.hex_irc_nick3); if (error) { EMIT_SIGNAL_TAGS (XP_TE_NICKERROR, sess, nick, prefs.hex_irc_nick3, NULL, NULL, 0, tags_data); @@ -1329,7 +1329,7 @@ set_default_modes (ircconn *serv) if (modes[1] != '\0') { - serv->p_mode (serv, serv->nick, modes); + irc_mode (serv, serv->nick, modes); } } @@ -1544,7 +1544,7 @@ inbound_login_end (session *sess, char *text, const message_tags_data *tags_data if (prefs.hex_dcc_ip_from_server && serv->use_who) { serv->skip_next_userhost = TRUE; - serv->p_get_ip_uh (serv, serv->nick); /* sends USERHOST mynick */ + irc_userhost (serv, serv->nick); /* sends USERHOST mynick */ } set_default_modes (serv); @@ -1567,7 +1567,7 @@ inbound_login_end (session *sess, char *text, const message_tags_data *tags_data /* send nickserv password */ if (net && net->pass && inbound_nickserv_login (serv)) { - serv->p_ns_identify (serv, net->pass); + irc_ns_identify (serv, net->pass); } /* wait for join if command or nickserv set */ diff --git a/src/common/modes.c b/src/common/modes.c index f39d6b081c125f5f9ee17683a0b405b2ce3d7d8b..da6c018c18e02277a72862489adf4252152a56a0 100644 --- a/src/common/modes.c +++ b/src/common/modes.c @@ -24,6 +24,7 @@ #include "hexchatc.h" #include "modes.h" #include "server.h" +#include "proto-irc.h" #include "text.h" #include "fe.h" #include "util.h" @@ -117,7 +118,7 @@ send_channel_modes (session *sess, char *tbuf, char *word[], int wpos, strcat (tbuf, " "); strcat (tbuf, word[wpos + i]); } - serv->p_mode (serv, sess->channel, tbuf); + irc_mode (serv, sess->channel, tbuf); wpos += usable_modes; } diff --git a/src/common/notify.c b/src/common/notify.c index 2989dba1701065f1299aca1b958a40aa07249c31..0d57524b3d2db4f9bee0324697ec94f7cc3df3a3 100644 --- a/src/common/notify.c +++ b/src/common/notify.c @@ -35,6 +35,7 @@ #include "cfgfiles.h" #include "fe.h" #include "server.h" +#include "proto-irc.h" #include "text.h" #include "util.h" #include "hexchatc.h" @@ -247,7 +248,7 @@ notify_announce_online (ircconn * serv, struct notify_per_server *servnot, /* Let's do whois with idle time (like in /quote WHOIS %s %s) */ char *wii_str = g_strdup_printf ("%s %s", nick, nick); - serv->p_whois (serv, wii_str); + irc_user_whois (serv, wii_str); g_free (wii_str); } } @@ -350,7 +351,7 @@ notify_watch (ircconn * serv, char *nick, int add) else return; - serv->p_raw (serv, tbuf); + irc_raw (serv, tbuf); } static void @@ -387,7 +388,7 @@ notify_flush_watches (ircconn * serv, GSList *from, GSList *end) g_strlcat (tbuf, notify->name, sizeof(tbuf)); list = list->next; } - serv->p_raw (serv, tbuf); + irc_raw (serv, tbuf); } /* called when logging in. e.g. when End of motd. */ @@ -521,7 +522,7 @@ notify_checklist_for_server (ircconn *serv) } if (i) - serv->p_raw (serv, outbuf); + irc_raw (serv, outbuf); } int diff --git a/src/common/outbound.c b/src/common/outbound.c index 65eb70bec4b692fb0c20613168cc6c9c1d499c21..58a0873adbb92ebb74ac072b5fb1f07a5475cc4c 100644 --- a/src/common/outbound.c +++ b/src/common/outbound.c @@ -52,6 +52,7 @@ #include "hexchatc.h" #include "servlist.h" #include "server.h" +#include "proto-irc.h" #include "tree.h" #include "outbound.h" #include "chanopt.h" @@ -81,12 +82,12 @@ server_sendpart (ircconn * serv, char *channel, char *reason) if (!reason) { reason = random_line (prefs.hex_irc_part_reason); - serv->p_part (serv, channel, reason); + irc_part (serv, channel, reason); g_free (reason); } else { /* reason set by /quit, /close argument */ - serv->p_part (serv, channel, reason); + irc_part (serv, channel, reason); } } @@ -316,7 +317,7 @@ cmd_away (struct session *sess, char *tbuf, char *word[], char *word_eol[]) /* must manage memory pointed to by random_line() */ reason = random_line (prefs.hex_away_reason); } - sess->server->p_set_away (sess->server, reason); + irc_set_away (sess->server, reason); if (sess->server->last_away_reason != reason) { @@ -339,7 +340,7 @@ cmd_back (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { if (sess->server->is_away) { - sess->server->p_set_back (sess->server); + irc_set_back (sess->server); } else { @@ -475,7 +476,7 @@ ban (session * sess, char *tbuf, char *mask, char *bantypestr, int deop) if (banmask) { - serv->p_mode (serv, sess->channel, banmask); + irc_mode (serv, sess->channel, banmask); g_free (banmask); } } @@ -490,7 +491,7 @@ cmd_ban (struct session *sess, char *tbuf, char *word[], char *word_eol[]) ban (sess, tbuf, mask, word[3], 0); } else { - sess->server->p_mode (sess->server, sess->channel, "+b"); /* banlist */ + irc_mode (sess->server, sess->channel, "+b"); /* banlist */ } return TRUE; @@ -634,7 +635,7 @@ cmd_ctcp (struct session *sess, char *tbuf, char *word[], char *word_eol[]) cmd += mbl; } - sess->server->p_ctcp (sess->server, to, msg); + irc_ctcp (sess->server, to, msg); EMIT_SIGNAL (XP_TE_CTCPSEND, sess, to, msg, NULL, NULL, 0); @@ -688,7 +689,7 @@ cmd_cycle (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (chan_sess && chan_sess->type == SESS_CHANNEL) { key = chan_sess->channelkey; - sess->server->p_cycle (sess->server, chan, key); + irc_cycle (sess->server, chan, key); return TRUE; } } @@ -1309,7 +1310,7 @@ static int mkick_cb (struct User *user, multidata *data) { if (!user->op && !user->me) - data->sess->server->p_kick (data->sess->server, data->sess->channel, user->nick, data->reason); + irc_kick (data->sess->server, data->sess->channel, user->nick, data->reason); return TRUE; } @@ -1317,7 +1318,7 @@ static int mkickops_cb (struct User *user, multidata *data) { if (user->op && !user->me) - data->sess->server->p_kick (data->sess->server, data->sess->channel, user->nick, data->reason); + irc_kick (data->sess->server, data->sess->channel, user->nick, data->reason); return TRUE; } @@ -1377,7 +1378,7 @@ cmd_dns (struct session *sess, char *tbuf, char *word[], char *word_eol[]) do_dns (sess, user->nick, user->hostname, &no_tags); } else { - sess->server->p_get_ip (sess->server, nick); + irc_who (sess->server, nick); sess->server->doing_dns = TRUE; } } else @@ -2103,7 +2104,7 @@ cmd_ghost (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (!word[2][0]) return FALSE; - sess->server->p_ns_ghost (sess->server, word[2], word[3]); + irc_ns_ghost (sess->server, word[2], word[3]); return TRUE; } @@ -2277,7 +2278,7 @@ cmd_id (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { if (word[2][0]) { - sess->server->p_ns_identify (sess->server, word[2]); + irc_ns_identify (sess->server, word[2]); return TRUE; } @@ -2367,9 +2368,9 @@ cmd_invite (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (!*word[2]) return FALSE; if (*word[3]) - sess->server->p_invite (sess->server, word[3], word[2]); + irc_invite (sess->server, word[3], word[2]); else - sess->server->p_invite (sess->server, sess->channel, word[2]); + irc_invite (sess->server, sess->channel, word[2]); return TRUE; } @@ -2385,7 +2386,7 @@ cmd_join (struct session *sess, char *tbuf, char *word[], char *word_eol[]) sess_find = find_channel (sess->server, chan); if (!sess_find) { - sess->server->p_join (sess->server, chan, pass); + irc_join (sess->server, chan, pass); if (sess->channel[0] == 0 && sess->waitchannel[0]) { po = strchr (chan, ','); @@ -2409,7 +2410,7 @@ cmd_kick (struct session *sess, char *tbuf, char *word[], char *word_eol[]) char *reason = word_eol[3]; if (*nick) { - sess->server->p_kick (sess->server, sess->channel, nick, reason); + irc_kick (sess->server, sess->channel, nick, reason); return TRUE; } return FALSE; @@ -2435,7 +2436,7 @@ cmd_kickban (struct session *sess, char *tbuf, char *word[], char *word_eol[]) } else ban (sess, tbuf, nick, "", (user && user->op)); - sess->server->p_kick (sess->server, sess->channel, nick, reason); + irc_kick (sess->server, sess->channel, nick, reason); return TRUE; } @@ -2680,7 +2681,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { /* print it to screen */ inbound_action (sess, sess->channel, sess->server->nick, "", act, TRUE, FALSE, - &no_tags); + &no_tags); } else { /* DCC CHAT failed, try through server */ @@ -2688,7 +2689,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { while ((split_text = split_up_text (sess, act + offset, cmd_length, split_text))) { - sess->server->p_action (sess->server, sess->channel, split_text); + irc_action (sess->server, sess->channel, split_text); /* print it to screen */ if (!sess->server->have_echo_message) inbound_action (sess, sess->channel, sess->server->nick, "", @@ -2701,7 +2702,7 @@ cmd_me (struct session *sess, char *tbuf, char *word[], char *word_eol[]) g_free (split_text); } - sess->server->p_action (sess->server, sess->channel, act + offset); + irc_action (sess->server, sess->channel, act + offset); /* print it to screen */ if (!sess->server->have_echo_message) inbound_action (sess, sess->channel, sess->server->nick, "", @@ -2730,13 +2731,13 @@ cmd_mode (struct session *sess, char *tbuf, char *word[], char *word_eol[]) && (is_channel (sess->server, word[2]) || !rfc_casecmp (sess->server->nick, word[2]))) ) { - sess->server->p_mode (sess->server, word[2], word_eol[3]); + irc_mode (sess->server, word[2], word_eol[3]); } else { if(sess->channel[0] == 0) return FALSE; - sess->server->p_mode (sess->server, sess->channel, word_eol[2]); + irc_mode (sess->server, sess->channel, word_eol[2]); } return TRUE; } @@ -2809,14 +2810,14 @@ cmd_msg (struct session *sess, char *tbuf, char *word[], char *word_eol[]) while ((split_text = split_up_text (sess, msg + offset, cmd_length, split_text))) { - sess->server->p_message (sess->server, nick, split_text); + irc_message (sess->server, nick, split_text); if (*split_text) offset += strlen(split_text); g_free (split_text); } - sess->server->p_message (sess->server, nick, msg + offset); + irc_message (sess->server, nick, msg + offset); offset = 0; } newsess = find_dialog (sess->server, nick); @@ -2865,9 +2866,9 @@ static int cmd_names (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { if (*word[2]) - sess->server->p_names (sess->server, word[2]); + irc_names (sess->server, word[2]); else - sess->server->p_names (sess->server, sess->channel); + irc_names (sess->server, sess->channel); return TRUE; } @@ -2876,7 +2877,7 @@ cmd_nctcp (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { if (*word_eol[3]) { - sess->server->p_nctcp (sess->server, word[2], word_eol[3]); + irc_nctcp (sess->server, word[2], word_eol[3]); return TRUE; } return FALSE; @@ -2904,7 +2905,7 @@ cmd_nick (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (*nick) { if (sess->server->connected) - sess->server->p_change_nick (sess->server, nick); + irc_change_nick (sess->server, nick); else { message_tags_data no_tags = MESSAGE_TAGS_DATA_INIT; @@ -2928,7 +2929,7 @@ cmd_notice (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { while ((split_text = split_up_text (sess, text + offset, cmd_length, split_text))) { - sess->server->p_notice (sess->server, word[2], split_text); + irc_notice (sess->server, word[2], split_text); EMIT_SIGNAL (XP_TE_NOTICESEND, sess, word[2], split_text, NULL, NULL, 0); if (*split_text) @@ -2937,7 +2938,7 @@ cmd_notice (struct session *sess, char *tbuf, char *word[], char *word_eol[]) g_free (split_text); } - sess->server->p_notice (sess->server, word[2], text + offset); + irc_notice (sess->server, word[2], text + offset); EMIT_SIGNAL (XP_TE_NOTICESEND, sess, word[2], text + offset, NULL, NULL, 0); return TRUE; @@ -3031,7 +3032,7 @@ cmd_ping (struct session *sess, char *tbuf, char *word[], char *word_eol[]) tim = make_ping_time (); g_snprintf (timestring, sizeof (timestring), "%lu", tim); - sess->server->p_ping (sess->server, to, timestring); + irc_ping (sess->server, to, timestring); return TRUE; } @@ -3085,7 +3086,7 @@ cmd_query (struct session *sess, char *tbuf, char *word[], char *word_eol[]) while ((split_text = split_up_text (sess, msg + offset, cmd_length, split_text))) { - sess->server->p_message (sess->server, nick, split_text); + irc_message (sess->server, nick, split_text); inbound_chanmsg (nick_sess->server, nick_sess, nick_sess->channel, nick_sess->server->nick, split_text, TRUE, FALSE, &no_tags); @@ -3095,7 +3096,7 @@ cmd_query (struct session *sess, char *tbuf, char *word[], char *word_eol[]) g_free (split_text); } - sess->server->p_message (sess->server, nick, msg + offset); + irc_message (sess->server, nick, msg + offset); inbound_chanmsg (nick_sess->server, nick_sess, nick_sess->channel, nick_sess->server->nick, msg + offset, TRUE, FALSE, &no_tags); @@ -3124,13 +3125,13 @@ cmd_quiet (struct session *sess, char *tbuf, char *word[], char *word_eol[]) if (quietmask) { - serv->p_mode (serv, sess->channel, quietmask); + irc_mode (serv, sess->channel, quietmask); g_free (quietmask); } } else { - serv->p_mode (serv, sess->channel, "+q"); /* quietlist */ + irc_mode (serv, sess->channel, "+q"); /* quietlist */ } return TRUE; @@ -3166,7 +3167,7 @@ cmd_quote (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { char *raw = word_eol[2]; - return sess->server->p_raw (sess->server, raw); + return irc_raw (sess->server, raw); } static int @@ -3549,9 +3550,9 @@ static int cmd_topic (struct session *sess, char *tbuf, char *word[], char *word_eol[]) { if (word[2][0] && is_channel (sess->server, word[2])) - sess->server->p_topic (sess->server, word[2], word_eol[3]); + irc_topic (sess->server, word[2], word_eol[3]); else - sess->server->p_topic (sess->server, sess->channel, word_eol[2]); + irc_topic (sess->server, sess->channel, word_eol[2]); return TRUE; } @@ -3707,9 +3708,9 @@ url_join_only (ircconn *serv, char *tbuf, char *channel, char *key) /* tbuf is 4kb */ safe_strcpy ((tbuf + 1), channel, 256); if (key) - serv->p_join (serv, tbuf, key); + irc_join (serv, tbuf, key); else - serv->p_join (serv, tbuf, ""); + irc_join (serv, tbuf, ""); } static int @@ -3832,7 +3833,7 @@ wallchop_cb (struct User *user, multidata *data) data->i = 0; sprintf (data->tbuf + strlen (data->tbuf), " :[@%s] %s", data->sess->channel, data->reason); - data->sess->server->p_raw (data->sess->server, data->tbuf); + irc_raw (data->sess->server, data->tbuf); strcpy (data->tbuf, "NOTICE "); } @@ -3859,8 +3860,8 @@ cmd_wallchop (struct session *sess, char *tbuf, char *word[], if (data.i) { sprintf (tbuf + strlen (tbuf), - " :[@%s] %s", sess->channel, word_eol[2]); - sess->server->p_raw (sess->server, tbuf); + " :[@%s] %s", sess->channel, word_eol[2]); + irc_raw (sess->server, tbuf); } return TRUE; @@ -4599,7 +4600,7 @@ handle_say (session *sess, char *text, int check_spch) if (!sess->server->have_echo_message) inbound_chanmsg (sess->server, sess, sess->channel, sess->server->nick, split_text, TRUE, FALSE, &no_tags); - sess->server->p_message (sess->server, sess->channel, split_text); + irc_message (sess->server, sess->channel, split_text); if (*split_text) offset += strlen(split_text); @@ -4610,7 +4611,7 @@ handle_say (session *sess, char *text, int check_spch) if (!sess->server->have_echo_message) inbound_chanmsg (sess->server, sess, sess->channel, sess->server->nick, text + offset, TRUE, FALSE, &no_tags); - sess->server->p_message (sess->server, sess->channel, text + offset); + irc_message (sess->server, sess->channel, text + offset); } else { notc_msg (sess); @@ -4814,7 +4815,7 @@ handle_command (session *sess, char *cmd, int check_spch) else { /* unknown command, just send it to the server and hope */ - sess->server->p_raw (sess->server, cmd); + irc_raw (sess->server, cmd); } } diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 9782c2fea0508f471fdc9cc50eae25c3d53355a7..4b0e1f8a8b971318e8155f4a0d501fb6b28cfd6b 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -99,7 +99,7 @@ irc_nickserv (ircconn *serv, char *cmd, char *arg1, char *arg2, char *arg3) } } -static void +void irc_ns_identify (ircconn *serv, char *pass) { switch (serv->loginmethod) @@ -117,7 +117,7 @@ irc_ns_identify (ircconn *serv, char *pass) } } -static void +void irc_ns_ghost (ircconn *serv, char *usname, char *pass) { if (serv->loginmethod != LOGIN_CHALLENGEAUTH) @@ -126,7 +126,7 @@ irc_ns_ghost (ircconn *serv, char *usname, char *pass) } } -static void +void irc_join (ircconn *serv, char *channel, char *key) { if (key[0]) @@ -161,7 +161,7 @@ irc_join_list_flush (ircconn *serv, GString *channels, GString *keys, int send_k * to get around the 512 limit. */ -static void +void irc_join_list (ircconn *serv, GSList *favorites) { int first_item = 1; /* determine whether we add commas or not */ @@ -229,7 +229,7 @@ irc_join_list (ircconn *serv, GSList *favorites) g_slist_free (favlist); } -static void +void irc_part (ircconn *serv, char *channel, char *reason) { if (reason[0]) @@ -263,13 +263,13 @@ irc_quit (ircconn *serv) } } -static void +void irc_set_back (ircconn *serv) { tcp_send_len (serv, "AWAY\r\n", 6); } -static void +void irc_set_away (ircconn *serv, char *reason) { if (reason) @@ -285,25 +285,25 @@ irc_set_away (ircconn *serv, char *reason) tcp_sendf (serv, "AWAY :%s\r\n", reason); } -static void +void irc_ctcp (ircconn *serv, char *to, char *msg) { tcp_sendf (serv, "PRIVMSG %s :\001%s\001\r\n", to, msg); } -static void +void irc_nctcp (ircconn *serv, char *to, char *msg) { tcp_sendf (serv, "NOTICE %s :\001%s\001\r\n", to, msg); } -static void +void irc_cycle (ircconn *serv, char *channel, char *key) { tcp_sendf (serv, "PART %s\r\nJOIN %s %s\r\n", channel, channel, key); } -static void +void irc_kick (ircconn *serv, char *channel, char *nick, char *reason) { if (reason[0]) @@ -312,13 +312,13 @@ irc_kick (ircconn *serv, char *channel, char *nick, char *reason) tcp_sendf (serv, "KICK %s %s\r\n", channel, nick); } -static void +void irc_invite (ircconn *serv, char *channel, char *nick) { tcp_sendf (serv, "INVITE %s %s\r\n", nick, channel); } -static void +void irc_mode (ircconn *serv, char *target, char *mode) { tcp_sendf (serv, "MODE %s %s\r\n", target, mode); @@ -326,16 +326,14 @@ irc_mode (ircconn *serv, char *target, char *mode) /* find channel info when joined */ -static void +void irc_join_info (ircconn *serv, char *channel) { tcp_sendf (serv, "MODE %s\r\n", channel); } -/* initiate userlist retreival */ - -static void -irc_user_list (ircconn *serv, char *channel) +void +irc_who (ircconn *serv, char *channel) { if (serv->have_whox) tcp_sendf (serv, "WHO %s %%chtsunfra,152\r\n", channel); @@ -345,57 +343,42 @@ irc_user_list (ircconn *serv, char *channel) /* userhost */ -static void +void irc_userhost (ircconn *serv, char *nick) { tcp_sendf (serv, "USERHOST %s\r\n", nick); } -static void -irc_away_status (ircconn *serv, char *channel) -{ - if (serv->have_whox) - tcp_sendf (serv, "WHO %s %%chtsunfra,152\r\n", channel); - else - tcp_sendf (serv, "WHO %s\r\n", channel); -} - -/*static void -irc_get_ip (ircconn *serv, char *nick) -{ - tcp_sendf (serv, "WHO %s\r\n", nick); -}*/ - /* * Command: WHOIS * Parameters: [] [,[,...]] */ -static void +void irc_user_whois (ircconn *serv, char *nicks) { tcp_sendf (serv, "WHOIS %s\r\n", nicks); } -static void +void irc_message (ircconn *serv, char *channel, char *text) { tcp_sendf (serv, "PRIVMSG %s :%s\r\n", channel, text); } -static void +void irc_action (ircconn *serv, char *channel, char *act) { tcp_sendf (serv, "PRIVMSG %s :\001ACTION %s\001\r\n", channel, act); } -static void +void irc_notice (ircconn *serv, char *channel, char *text) { tcp_sendf (serv, "NOTICE %s :%s\r\n", channel, text); } -static void +void irc_topic (ircconn *serv, char *channel, char *topic) { if (!topic) @@ -406,7 +389,7 @@ irc_topic (ircconn *serv, char *channel, char *topic) tcp_sendf (serv, "TOPIC %s\r\n", channel); } -static void +void irc_list_channels (ircconn *serv, char *arg, int min_users) { if (arg[0]) @@ -421,19 +404,19 @@ irc_list_channels (ircconn *serv, char *arg, int min_users) tcp_send_len (serv, "LIST\r\n", 6); } -static void +void irc_names (ircconn *serv, char *channel) { tcp_sendf (serv, "NAMES %s\r\n", channel); } -static void +void irc_change_nick (ircconn *serv, char *new_nick) { tcp_sendf (serv, "NICK %s\r\n", new_nick); } -static void +void irc_ping (ircconn *serv, char *to, char *timestring) { if (*to) @@ -442,7 +425,7 @@ irc_ping (ircconn *serv, char *to, char *timestring) tcp_sendf (serv, "PING %s\r\n", timestring); } -static int +int irc_raw (ircconn *serv, char *raw) { int len; @@ -760,12 +743,12 @@ process_numeric (session * sess, int n, } break; - case 354: /* undernet WHOX: used as a reply for irc_away_status */ + case 354: /* undernet WHOX: used as a reply for irc_who */ { unsigned int away = 0; session *who_sess; - /* irc_away_status and irc_user_list sends out a "152" */ + /* irc_who sends out a "152" */ if (!strcmp (word[4], "152")) { who_sess = find_channel (serv, word[5]); @@ -775,8 +758,8 @@ process_numeric (session * sess, int n, /* :server 354 yournick 152 #channel ~ident host servname nick H account :realname */ inbound_user_info (sess, word[5], word[6], word[7], word[8], - word[9], word_eol[12]+1, word[11], away, - tags_data); + word[9], word_eol[12]+1, word[11], away, + tags_data); /* try to show only user initiated whos */ if (!who_sess || !who_sess->doing_who) @@ -2013,36 +1996,5 @@ proto_fill_her_up (ircconn *serv) serv->p_quit = irc_quit; serv->p_inline = irc_inline; - - serv->p_invite = irc_invite; - serv->p_cycle = irc_cycle; - serv->p_ctcp = irc_ctcp; - serv->p_nctcp = irc_nctcp; - serv->p_kick = irc_kick; - serv->p_part = irc_part; - serv->p_ns_identify = irc_ns_identify; - serv->p_ns_ghost = irc_ns_ghost; - serv->p_join = irc_join; - serv->p_join_list = irc_join_list; - serv->p_login = irc_login; - serv->p_join_info = irc_join_info; - serv->p_mode = irc_mode; - serv->p_user_list = irc_user_list; - serv->p_away_status = irc_away_status; - /*serv->p_get_ip = irc_get_ip;*/ - serv->p_whois = irc_user_whois; - serv->p_get_ip = irc_user_list; - serv->p_get_ip_uh = irc_userhost; - serv->p_set_back = irc_set_back; - serv->p_set_away = irc_set_away; - serv->p_message = irc_message; - serv->p_action = irc_action; - serv->p_notice = irc_notice; - serv->p_topic = irc_topic; - serv->p_list_channels = irc_list_channels; - serv->p_change_nick = irc_change_nick; - serv->p_names = irc_names; - serv->p_ping = irc_ping; - serv->p_raw = irc_raw; serv->p_cmp = rfc_casecmp; /* can be changed by 005 in modes.c */ } diff --git a/src/common/proto-irc.h b/src/common/proto-irc.h index 472de918c47ecf81ba882f1a4c3f96cafa6e579a..4566f49df7f8555462660842aa165028fbe06bd0 100644 --- a/src/common/proto-irc.h +++ b/src/common/proto-irc.h @@ -51,4 +51,31 @@ void message_tags_data_free (message_tags_data *tags_data); void proto_fill_her_up (ircconn *serv); +void irc_invite (ircconn *serv, char *channel, char *nick); +void irc_cycle (ircconn *serv, char *channel, char *key); +void irc_kick (ircconn *, char *channel, char *nick, char *reason); +void irc_part (ircconn *, char *channel, char *reason); +void irc_ns_identify (ircconn *, char *pass); +void irc_ns_ghost (ircconn *, char *usname, char *pass); +void irc_join_list (ircconn *, GSList *favorites); +void irc_set_back (ircconn *serv); +void irc_set_away (ircconn *serv, char *reason); +void irc_who (ircconn *, char *channel); +void irc_userhost (ircconn *, char *nick); +void irc_message (ircconn *, char *channel, char *text); +void irc_action (ircconn *, char *channel, char *act); +void irc_notice (ircconn *, char *channel, char *text); +void irc_topic (ircconn *, char *channel, char *topic); +void irc_change_nick (ircconn *serv, char *new_nick); +void irc_names (ircconn *, char *channel); +void irc_user_whois (ircconn *serv, char *nicks); +void irc_ping (ircconn *, char *to, char *timestring); +void irc_join_info (ircconn *, char *channel); +int irc_raw (ircconn *, char *raw); +void irc_list_channels (ircconn *, char *arg, int min_users); +void irc_mode (ircconn *, char *target, char *mode); +void irc_join (ircconn *serv, char *channel, char *key); +void irc_ctcp (ircconn *serv, char *to, char *msg); +void irc_nctcp (ircconn *serv, char *to, char *msg); + #endif diff --git a/src/common/server.c b/src/common/server.c index 3ab1d2ff1da223561b344af5f80d5514bbfd9606..5d1d4c8a8c39aff82001d389bb136eeac3fcfef9 100644 --- a/src/common/server.c +++ b/src/common/server.c @@ -51,7 +51,6 @@ #include "text.h" #include "util.h" #include "url.h" -#include "proto-irc.h" #include "servlist.h" #include "server.h" @@ -1531,7 +1530,7 @@ server_set_encoding (ircconn *serv, char *new_encoding) } ircconn * -server_new (void) +ircconn_new (void) { static int id = 0; ircconn *serv; diff --git a/src/common/server.h b/src/common/server.h index acde01208bad152daf18156cd83a7b01f371af54..df1c6d32792793986bd32825ba297aa788ecb250 100644 --- a/src/common/server.h +++ b/src/common/server.h @@ -27,7 +27,7 @@ int tcp_send_len (ircconn *serv, char *buf, int len); void tcp_sendf (ircconn *serv, const char *fmt, ...) G_GNUC_PRINTF (2, 3); int tcp_send_real (void *ssl, int sok, GIConv write_converter, char *buf, int len); -ircconn *server_new (void); +ircconn *ircconn_new (void); int is_server (ircconn *serv); void server_fill_her_up (ircconn *serv); void server_set_encoding (ircconn *serv, char *new_encoding); diff --git a/src/fe-gtk/chanlist.c b/src/fe-gtk/chanlist.c index 933fa254c01ccc43ac2fa272b978ec5df5d856c2..869e8ac694e02cd933f8759c32f59ea121cb31f8 100644 --- a/src/fe-gtk/chanlist.c +++ b/src/fe-gtk/chanlist.c @@ -303,14 +303,14 @@ chanlist_do_refresh (ircconn *serv) if (serv->use_listargs) { /* yes - it will download faster */ - serv->p_list_channels (serv, "", serv->gui->chanlist_minusers); + irc_list_channels (serv, "", serv->gui->chanlist_minusers); /* don't allow the spin button below this value from now on */ serv->gui->chanlist_minusers_downloaded = serv->gui->chanlist_minusers; } else { /* download all, filter minusers locally only */ - serv->p_list_channels (serv, "", 1); + irc_list_channels (serv, "", 1); serv->gui->chanlist_minusers_downloaded = 1; } diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c index 97359373c65549574dc1fec91604c7caa397da52..5c4e3178adc5aee49d5bf3c3db97f6aa704e6211 100644 --- a/src/fe-gtk/joind.c +++ b/src/fe-gtk/joind.c @@ -91,7 +91,7 @@ joind_ok_cb (GtkWidget *ok, ircconn *serv) fe_message (_("Channel name too short, try again."), FE_MSG_ERROR); return; } - serv->p_join (serv, text, ""); + irc_join (serv, text, ""); goto xit; } diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index 0ff7d95fd882c96728689a5c11615ef3f057a821..2a7e81251b8568571711bcbb00c9ee58aa7aede0 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -1770,7 +1770,7 @@ mg_topic_cb (GtkWidget *entry, gpointer userdata) text = (char *)gtk_entry_get_text (GTK_ENTRY (entry)); if (text[0] == 0) text = NULL; - sess->server->p_topic (sess->server, sess->channel, text); + irc_topic (sess->server, sess->channel, text); } else gtk_entry_set_text (GTK_ENTRY (entry), ""); /* restore focus to the input widget, where the next input will most @@ -1913,8 +1913,8 @@ mg_change_flag (GtkWidget * wid, session *sess, char flag) mode[0] = '+'; else mode[0] = '-'; - serv->p_mode (serv, sess->channel, mode); - serv->p_join_info (serv, sess->channel); + irc_mode (serv, sess->channel, mode); + irc_join_info (serv, sess->channel); sess->ignore_mode = TRUE; sess->ignore_date = TRUE; } @@ -1940,8 +1940,8 @@ flagl_hit (GtkWidget * wid, struct session *sess) return; } g_snprintf (modes, sizeof (modes), "+l %d", atoi (limit_str)); - serv->p_mode (serv, sess->channel, modes); - serv->p_join_info (serv, sess->channel); + irc_mode (serv, sess->channel, modes); + irc_join_info (serv, sess->channel); } } else mg_change_flag (wid, sess, 'l'); @@ -1961,7 +1961,7 @@ flagk_hit (GtkWidget * wid, struct session *sess) if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wid))) modes[0] = '+'; - serv->p_mode (serv, sess->channel, modes); + irc_mode (serv, sess->channel, modes); } } @@ -2030,8 +2030,8 @@ mg_key_entry_cb (GtkWidget * igad, gpointer userdata) { g_snprintf (modes, sizeof (modes), "+k %s", gtk_entry_get_text (GTK_ENTRY (igad))); - serv->p_mode (serv, sess->channel, modes); - serv->p_join_info (serv, sess->channel); + irc_mode (serv, sess->channel, modes); + irc_join_info (serv, sess->channel); } } @@ -2053,8 +2053,8 @@ mg_limit_entry_cb (GtkWidget * igad, gpointer userdata) } g_snprintf (modes, sizeof(modes), "+l %d", atoi (gtk_entry_get_text (GTK_ENTRY (igad)))); - serv->p_mode (serv, sess->channel, modes); - serv->p_join_info (serv, sess->channel); + irc_mode (serv, sess->channel, modes); + irc_join_info (serv, sess->channel); } } diff --git a/src/fe-text/fe-text.c b/src/fe-text/fe-text.c index 3059f120909bae4ef3c6727ef514a77aab5bce5a..7bd134177203055e0aa1c3549624d37f9d3ed81d 100644 --- a/src/fe-text/fe-text.c +++ b/src/fe-text/fe-text.c @@ -41,6 +41,7 @@ #include "../common/outbound.h" #include "../common/util.h" #include "../common/fe.h" +#include "../common/proto-irc.h" #include "fe-text.h" @@ -847,8 +848,8 @@ fe_flash_window (struct session *sess) { } void fe_get_file (const char *title, char *initial, - void (*callback) (void *userdata, char *file), void *userdata, - int flags) + void (*callback) (void *userdata, char *file), void *userdata, + int flags) { } void fe_tray_set_flash (const char *filename1, const char *filename2, int timeout){} @@ -859,7 +860,7 @@ void fe_userlist_update (session *sess, struct User *user){} void fe_open_chan_list (ircconn *serv, char *filter, int do_refresh) { - serv->p_list_channels (serv, filter, 1); + irc_list_channels (serv, filter, 1); } const char * fe_get_default_font (void)