diff options
Diffstat (limited to 'src/common/hexchat.c')
-rw-r--r-- | src/common/hexchat.c | 153 |
1 files changed, 71 insertions, 82 deletions
diff --git a/src/common/hexchat.c b/src/common/hexchat.c index 09afa445..a76db332 100644 --- a/src/common/hexchat.c +++ b/src/common/hexchat.c @@ -41,7 +41,9 @@ #include "chanopt.h" #include "ignore.h" #include "hexchat-plugin.h" +#include "inbound.h" #include "plugin.h" +#include "plugin-identd.h" #include "plugin-timer.h" #include "notify.h" #include "server.h" @@ -55,15 +57,6 @@ #include <glib-object.h> /* for g_type_init() */ #endif -#ifdef USE_OPENSSL -#include <openssl/ssl.h> /* SSL_() */ -#include "ssl.h" -#endif - -#ifdef USE_MSPROXY -#include "msproxy.h" -#endif - #ifdef USE_LIBPROXY #include <proxy.h> #endif @@ -118,10 +111,6 @@ struct session *current_tab; struct session *current_sess = 0; struct hexchatprefs prefs; -#ifdef USE_OPENSSL -SSL_CTX *ctx = NULL; -#endif - #ifdef USE_LIBPROXY pxProxyFactory *libproxy_factory; #endif @@ -221,7 +210,7 @@ find_dialog (server *serv, char *nick) } list = list->next; } - return 0; + return NULL; } session * @@ -232,14 +221,14 @@ find_channel (server *serv, char *chan) while (list) { sess = list->data; - if ((!serv || serv == sess->server) && sess->type == SESS_CHANNEL) + if ((serv == sess->server) && sess->type == SESS_CHANNEL) { if (!serv->p_cmp (chan, sess->channel)) return sess; } list = list->next; } - return 0; + return NULL; } static void @@ -269,7 +258,7 @@ lag_check (void) unsigned long tim; char tbuf[128]; time_t now = time (0); - int lag; + time_t lag; tim = make_ping_time (); @@ -279,16 +268,17 @@ lag_check (void) if (serv->connected && serv->end_of_motd) { lag = now - serv->ping_recv; - if (prefs.hex_net_ping_timeout && lag > prefs.hex_net_ping_timeout && lag > 0) + if (prefs.hex_net_ping_timeout != 0 && lag > prefs.hex_net_ping_timeout && lag > 0) { - sprintf (tbuf, "%d", lag); + sprintf (tbuf, "%" G_GINT64_FORMAT, (gint64) lag); EMIT_SIGNAL (XP_TE_PINGTIMEOUT, serv->server_session, tbuf, NULL, NULL, NULL, 0); if (prefs.hex_net_auto_reconnect) serv->auto_reconnect (serv, FALSE, -1); - } else + } + else { - snprintf (tbuf, sizeof (tbuf), "LAG%lu", tim); + g_snprintf (tbuf, sizeof (tbuf), "LAG%lu", tim); serv->p_ping (serv, "", tbuf); if (!serv->lag_sent) @@ -368,9 +358,6 @@ static int hexchat_misc_checks (void) /* this gets called every 1/2 second */ { static int count = 0; -#ifdef USE_MSPROXY - static int count2 = 0; -#endif count++; @@ -386,15 +373,6 @@ hexchat_misc_checks (void) /* this gets called every 1/2 second */ count = 0; } -#ifdef USE_MSPROXY - count2++; - if (count2 >= 720) /* 720 every 6 minutes */ - { - msproxy_keepalive (); - count2 = 0; - } -#endif - return 1; } @@ -405,7 +383,6 @@ irc_init (session *sess) { static int done_init = FALSE; char *buf; - int i; if (done_init) return; @@ -413,6 +390,7 @@ irc_init (session *sess) done_init = TRUE; plugin_add (sess, NULL, NULL, timer_plugin_init, NULL, NULL, FALSE); + plugin_add (sess, NULL, NULL, identd_plugin_init, identd_plugin_deinit, NULL, FALSE); #ifdef USE_PLUGIN if (!arg_skip_plugins) @@ -440,7 +418,8 @@ irc_init (session *sess) if (arg_urls != NULL) { - for (i = 0; i < g_strv_length(arg_urls); i++) + guint i; + for (i = 0; i < g_strv_length (arg_urls); i++) { buf = g_strdup_printf ("%s %s", i==0? "server" : "newserver", arg_urls[i]); handle_command (sess, buf, FALSE); @@ -464,12 +443,7 @@ session_new (server *serv, char *from, int type, int focus) { session *sess; - sess = malloc (sizeof (struct session)); - if (sess == NULL) - { - return NULL; - } - memset (sess, 0, sizeof (struct session)); + sess = g_new0 (struct session, 1); sess->server = serv; sess->logfd = -1; @@ -488,7 +462,10 @@ session_new (server *serv, char *from, int type, int focus) sess->lastact_idx = LACT_NONE; if (from != NULL) - safe_strcpy (sess->channel, from, CHANLEN); + { + safe_strcpy(sess->channel, from, CHANLEN); + safe_strcpy(sess->session_name, from, CHANLEN); + } sess_list = g_slist_prepend (sess_list, sess); @@ -515,7 +492,6 @@ new_ircwindow (server *serv, char *name, int type, int focus) break; case SESS_DIALOG: sess = session_new (serv, name, type, focus); - log_open_or_close (sess); break; default: /* case SESS_CHANNEL: @@ -530,6 +506,16 @@ new_ircwindow (server *serv, char *name, int type, int focus) scrollback_load (sess); if (sess->scrollwritten && sess->scrollback_replay_marklast) sess->scrollback_replay_marklast (sess); + if (type == SESS_DIALOG) + { + struct User *user; + + log_open_or_close (sess); + + user = userlist_find_global (serv, name); + if (user && user->hostname) + set_topic (sess, user->hostname, user->hostname); + } plugin_emit_dummy_print (sess, "Open Context"); return sess; @@ -548,9 +534,8 @@ exec_notify_kill (session * sess) waitpid (re->childpid, NULL, WNOHANG); fe_input_remove (re->iotag); close (re->myfd); - if (re->linebuf) - free(re->linebuf); - free (re); + g_free(re->linebuf); + g_free (re); } #endif } @@ -656,10 +641,8 @@ session_free (session *killsess) send_quit_or_part (killsess); history_free (&killsess->history); - if (killsess->topic) - free (killsess->topic); - if (killsess->current_modes) - free (killsess->current_modes); + g_free (killsess->topic); + g_free (killsess->current_modes); fe_session_callback (killsess); @@ -670,7 +653,7 @@ session_free (session *killsess) current_sess = sess_list->data; } - free (killsess); + g_free (killsess); if (!sess_list && !in_hexchat_exit) hexchat_exit (); /* sess_list is empty, quit! */ @@ -784,20 +767,15 @@ static void xchat_init (void) { char buf[3068]; - const char *cs = NULL; #ifdef WIN32 WSADATA wsadata; -#ifdef USE_IPV6 if (WSAStartup(0x0202, &wsadata) != 0) { MessageBox (NULL, "Cannot find winsock 2.2+", "Error", MB_OK); exit (0); } -#else - WSAStartup(0x0101, &wsadata); -#endif /* !USE_IPV6 */ #endif /* !WIN32 */ #ifdef USE_SIGACTION @@ -826,15 +804,12 @@ xchat_init (void) #endif #endif - if (g_get_charset (&cs)) - prefs.utf8_locale = TRUE; - load_text_events (); sound_load (); notify_load (); ignore_load (); - snprintf (buf, sizeof (buf), + g_snprintf (buf, sizeof (buf), "NAME %s~%s~\n" "CMD query %%s\n\n"\ "NAME %s~%s~\n" "CMD send %%s\n\n"\ "NAME %s~%s~\n" "CMD whois %%s %%s\n\n"\ @@ -890,7 +865,7 @@ xchat_init (void) list_loadconf ("popup.conf", &popup_list, buf); - snprintf (buf, sizeof (buf), + g_snprintf (buf, sizeof (buf), "NAME %s\n" "CMD part\n\n" "NAME %s\n" "CMD getstr # join \"%s\"\n\n" "NAME %s\n" "CMD quote LINKS\n\n" @@ -904,7 +879,7 @@ xchat_init (void) _("Hide Version")); list_loadconf ("usermenu.conf", &usermenu_list, buf); - snprintf (buf, sizeof (buf), + g_snprintf (buf, sizeof (buf), "NAME %s\n" "CMD op %%a\n\n" "NAME %s\n" "CMD deop %%a\n\n" "NAME %s\n" "CMD ban %%s\n\n" @@ -921,7 +896,7 @@ xchat_init (void) _("Dialog")); list_loadconf ("buttons.conf", &button_list, buf); - snprintf (buf, sizeof (buf), + g_snprintf (buf, sizeof (buf), "NAME %s\n" "CMD whois %%s %%s\n\n" "NAME %s\n" "CMD send %%s\n\n" "NAME %s\n" "CMD dcc chat %%s\n\n" @@ -1021,29 +996,37 @@ main (int argc, char *argv[]) int i; int ret; - srand (time (0)); /* CL: do this only once! */ +#ifdef WIN32 + HRESULT coinit_result; +#endif + + srand ((unsigned int) time (NULL)); /* CL: do this only once! */ /* We must check for the config dir parameter, otherwise load_config() will behave incorrectly. * load_config() must come before fe_args() because fe_args() calls gtk_init() which needs to * know the language which is set in the config. The code below is copy-pasted from fe_args() * for the most part. */ - if (argc >= 3) + if (argc >= 2) { - for (i = 1; i < argc - 1; i++) + for (i = 1; i < argc; i++) { - if (strcmp (argv[i], "-d") == 0) + if ((strcmp (argv[i], "-d") == 0 || strcmp (argv[i], "--cfgdir") == 0) + && i + 1 < argc) { - if (xdir) - { - g_free (xdir); - } - - xdir = strdup (argv[i + 1]); + xdir = g_strdup (argv[i + 1]); + } + else if (strncmp (argv[i], "--cfgdir=", 9) == 0) + { + xdir = g_strdup (argv[i] + 9); + } + if (xdir != NULL) + { if (xdir[strlen (xdir) - 1] == G_DIR_SEPARATOR) { xdir[strlen (xdir) - 1] = 0; } + break; } } } @@ -1067,10 +1050,6 @@ main (int argc, char *argv[]) /* we MUST do this after load_config () AND before fe_init (thus gtk_init) otherwise it will fail */ set_locale (); -#ifdef SOCKS - SOCKSinit (argv[0]); -#endif - ret = fe_args (argc, argv); if (ret != -1) return ret; @@ -1083,6 +1062,14 @@ main (int argc, char *argv[]) libproxy_factory = px_proxy_factory_new(); #endif +#ifdef WIN32 + coinit_result = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED); + if (SUCCEEDED (coinit_result)) + { + CoInitializeSecurity (NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); + } +#endif + fe_init (); /* This is done here because cfgfiles.c is too early in @@ -1110,13 +1097,15 @@ main (int argc, char *argv[]) fe_main (); -#ifdef USE_LIBPROXY - px_proxy_factory_free(libproxy_factory); +#ifdef WIN32 + if (SUCCEEDED (coinit_result)) + { + CoUninitialize (); + } #endif -#ifdef USE_OPENSSL - if (ctx) - _SSL_context_free (ctx); +#ifdef USE_LIBPROXY + px_proxy_factory_free(libproxy_factory); #endif #ifdef WIN32 |