summary refs log tree commit diff stats
path: root/src/common/server.c
AgeCommit message (Collapse)Author
2016-08-27Fix building against openssl 1.1.0Patrick Griffis
Fixes #1759
2016-06-29Introduce and use fe_timeout_add_secondsBen Gamari
This should allow the operating system to be a bit more lax about timeouts, allowing more efficient power management.
2016-06-24Use constant instead of literal.Arnavion
2016-03-28identd: Fix ipv6 support on WindowsPatrick Griffis
2016-03-28identd: Fix respecting USE_GLOBAL network flagPatrick Griffis
2016-03-11Fix loading encoding from network list on connectPatrick Griffis
- Fix setting new encoding when switching networks - Ignore ports when looking for network by hostname - Only set UTF-8 when nothing explicitly set Fixes #1628
2016-02-19Fix possible overflowPatrick Griffis
2016-02-19Properly handle missing SSL certificateInsu Yun
According to OpenSSL document (https://www.openssl.org/docs/manmaster/ssl/SSL_get_verify_result.html), when using SSL_get_verify_result(), the existence of certificate needs to be checked. However, in current code, it does not. Therefore, certificate existence check is required for correctly handling the exception. Closes #1549
2016-01-29Remove DH-AES/DH-BLOWFISH mechanisms and misc cleanupPatrick Griffis
- AES and Blowfish mechanisms are deemed insecure and servers have removed support for them - Remove attempts to retry since we only support one mech - Handle SASL 3.2's new syntax for supported mechs
2016-01-29Add support for CAP 3.2Patrick Griffis
2015-09-11TLS: Set SNI hostname before connectmoparisthebest
2015-01-31Save iconv converters for input and output in the server.Arnavion
These are then used with g_convert_with_iconv instead of making it create a new iconv converter every time for the given from-to-encoding pairs.
2015-01-30ssl: Remove unused server codeTingPing
2015-01-18Detect unknown server encodings and set to UTF-8.Arnavion
2015-01-18Server line text-encoding-related fixes.Arnavion
- Handle server lines that contain sequences which are invalid in the server encoding. Previously, these would cause the whole line to be interpreted in ISO-8859-1, but now they're simply replaced with an appropriate replacement character. - Removed prefs.utf8_locale. - Change default server encoding from system locale to UTF-8. - Always populate server->encoding with a non-null value - UTF-8. Fixes #1198
2015-01-18Removed CP1255-specific handling of server lines.Arnavion
GLib's API is good enough now.
2015-01-18Removed legacy "IRC" encoding.Arnavion
2015-01-14Removed unimplemented, unused function.Arnavion
2014-12-30Rewrite identdTingPing
- Use gio (which is cross platform) - Properly support multiple users - Allow configuring port - Allow other plugins overriding
2014-12-28Remove option to disable ipv6TingPing
It has been default for a while, is the only tested option, and will only get more common.
2014-12-28Remove MSProxy supportTingPing
It's not enabled anywhere, certainly not maintained
2014-12-28Fix building as c89TingPing
2014-12-28Use glib for all allocationsTingPing
- Removes need to check for malloc failure - Removes need for NULL checks on free - Adds checks for integer overflows - Removes some extra memset calls - Removes chance of mixing libc and glib malloc/free
2014-12-15Remove some unnecessary if statementsTingPing
2014-12-15Fixed some more signed-unsigned-comparison warnings.Arnavion
2014-12-08Removed some unnecessary null-checks for calls to g_free and g_strfreevArnavion
2014-11-21ssl: Validate hostnamesTingPing
Closes #524
2014-11-05ssl: Don't use global openssl contextTingPing
Fixes #789
2014-07-18Use GNUC format attribute on print functionsCampbell Barton
Closes #1059
2013-09-07Implement BLOWFISh, AES, and EXTERNAL SASL mechanismsTingPing
Closes #657
2013-06-28Now inbound_cap_ls() can enable extensions when a bouncer uses a namespace forDiogo Sousa
the extension server-time.
2013-05-25Improved server_get_network(): if we don't have the current network in theDiogo Sousa
network list use the server name in received in event 005. (This fixes the problem that the network (%n) in the log file names would be "NETWORK" instead of the real network name (this happened if the network was not in the network list).)
2013-05-22Merge pull request #603 from orium/lag-meter-stuckTingPing
Fix an issue where the lag meter could get stuck after reconnect
2013-05-16Fix an issue where the lag meter would be stuck after a reconnect caused by aDiogo Sousa
ping timeout.
2013-05-14Fix warningsBerke Viktor
2013-05-14Fix initial autojoins and some erroneous copies/freesBerke Viktor
2013-05-12Fix favorite channels except in inbound.cBerke Viktor
2013-05-04Replace g_strdup_printf with g_build_filename where possibleBerke Viktor
2013-05-03Merge pull request #565 from bviktor/nickservtypeTingPing
Make NickServ registration configurable per-network
2013-05-03Line breaks and typofixBerke Viktor
2013-04-28Make NickServ registration configurable per-networkBerke Viktor
Fixes #394
2013-04-28Make /msg nickserv the default registration typeBerke Viktor
Fixes #394 and hopefully doesn't break others
2013-04-03Add MONITOR supportTingPing
2013-04-03Support account-notify and extended-join capabilitiesTingPing
2013-04-03Merge pull request #448 from TingPing/awaynotify2TingPing
Add away-notify support
2013-03-25Remove old CAPAB stuffTingPing
We already check for identify-msg elsewhere
2013-03-20Redesign the Ban List window. Closes Issues #303, #342, #427RichardHitt
This is a combination of 18 commits. The first commit's message is: Here is the initial banlist branch of RichardHitt/hexchat. Changed files are only src/fe-gtk/{banlist.c,fe-gtk.h}. This version works and contains my first efforts at selective sensitization of radio buttons and control buttons. From this point I intend to undertake a stepwise redesign. Step 1 will be to make the existing banlist code work for multiple simultaneous banlist windows (for different channels, obviously). It will be a hackathon with the only goal of getting it working. Step 2 will be the objectization and alpha-stage tidying-up of all the terrible looking stuff I will have done in Step 1. This is the 2nd commit message: Here's the post-Step-1 commit. It works for multiple banlist windows. Note particularly what I've done to banlist.h. Note that for many functions in banlist.c the argument is now a banlist_info *, rather than a session *. Note in banlist.c the initialization of array modes[] which contains driving information for the checkboxes. Of course those checkboxes aren't yet implemented. Maybe in Step 2 I will change to checkboxes from radio buttons; but definitely I will change to letting modes[] drive processing. This is the 3rd commit message: Converted to checkboxes. Much additional work. Note that the infrastructure for Auto-invite is not yet present in the hexchat tree. I'm nearly done with banlist, I think! This is the 4th commit message: Fleshed out 'invite'. Tagged masks uniformly, e.g. (b) (e) (I). General cleanup, nearly at the point of beta quality. This is the 5th commit message: Added fourth mode type: quiet. Did lots and lots of cleanup. Beta-ready? This is the 6th commit message: Get the banlist timestamps properly sortable. This is the 7th commit message: Redesign the supports_foo() routines. Now they're responsible for setting the flags in ->capable, ->readable, ->writeable. This is the 8th commit message: Deleted a couple of RBH comments. This is the 9th commit message: Now the ESC key will close the banlist window. This is the 10th commit message: Fix the fe-text occurrence of fe_add_ban_list(). This is the 11th commit message: Fixed also fe_ban_list_end() and removed fe_is_banwindow(). This is the 12th commit message: Use old-style initialization for array of structures modes[] This is the 13th commit message: Oops, incomplete regression of modes[] initialization. This fixes. This is the 14th commit message: Fixed strptime buy implementing a special version here. Fixed column width concerns by setting resizable and autosize. This is the 15th commit message: Get rid of testing line. This is the 16th commit message: Changed to gtkutil_destroy_on_esc () This is the 17th commit message: Remove no-longer-used functnion This is the 18th commit message: Minor cleanups to banlist.c, banlist.h Please enter the commit message for your changes. Lines starting with '#' will be ignored, and an empty message aborts the commit. Author: RichardHitt <rbh00@netcom.com> Committer: Richard Hitt <rbh00@f17.rbh00.pacbell.net> Not currently on any branch. Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: src/common/fe.h modified: src/common/hexchat.h modified: src/common/inbound.c modified: src/common/modes.c modified: src/common/proto-irc.c modified: src/common/server.c modified: src/fe-gtk/banlist.c modified: src/fe-gtk/banlist.h modified: src/fe-gtk/fe-gtk.c modified: src/fe-gtk/fe-gtk.h modified: src/fe-gtk/maingui.c modified: src/fe-text/fe-text.c
2013-03-15Get rid of Non-BMP filtering, Pango handles this nowBerke Viktor
2013-03-12Add away-notify supportTingPing
2013-01-09Make source cleah with cppcheck, except for mpc and saslRichardHitt
'n189' href='#n189'>189 190 191 192 193 194 195 196 197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227














                                                                       
                                                                            







                   

                               
























                                                                    


                                                 
 

                                                                                                
 




                                                   

                                                                        
                                                                  
                             







































































                                                                               


                                                





                                                         
                                                                                                        






                                
                       








                                                                                       

                                         
                                                    

                                                               
                                                                                                  


                                                                             





















                                                    
                                                                                           
                                                                                                       
                                                  


















                                                                                                                
                                  





                                                                                                       
 
/* X-Chat
 * Copyright (C) 1998 Peter Zelezny.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "fe-gtk.h"

#include "../common/hexchat.h"
#include "../common/hexchatc.h"
#include "../common/cfgfiles.h"
#include "../common/fe.h"
#include "../common/url.h"
#include "../common/tree.h"
#include "gtkutil.h"
#include "menu.h"
#include "maingui.h"
#include "urlgrab.h"

/* model for the URL treeview */
enum
{
	URL_COLUMN,
	N_COLUMNS
};

static GtkWidget *urlgrabberwindow = 0;


static gboolean
url_treeview_url_clicked_cb (GtkWidget *view, GdkEventButton *event,
                             gpointer data)
{
	GtkTreeIter iter;
	gchar *url;
	GtkTreeSelection *sel;
	GtkTreePath *path;
	GtkTreeView *tree = GTK_TREE_VIEW (view);

	if (!event || !gtk_tree_view_get_path_at_pos (tree, event->x, event->y, &path, 0, 0, 0))
		return FALSE;

	/* select what they right-clicked on */
	sel = gtk_tree_view_get_selection (tree); 
	gtk_tree_selection_unselect_all (sel);
	gtk_tree_selection_select_path (sel, path);
	gtk_tree_path_free (path); 

	if (!gtkutil_treeview_get_selected (GTK_TREE_VIEW (view), &iter,
	                                    URL_COLUMN, &url, -1))
		return FALSE;
	
	switch (event->button)
	{
		case 1:
			if (event->type == GDK_2BUTTON_PRESS)
				fe_open_url (url);
			break;
		case 3:
			menu_urlmenu (event, url);
			break;
		default:
			break;
	}
	g_free (url);

	return FALSE;
}

static GtkWidget *
url_treeview_new (GtkWidget *box)
{
	GtkListStore *store;
	GtkWidget *view;

	store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
	g_return_val_if_fail (store != NULL, NULL);

	view = gtkutil_treeview_new (box, GTK_TREE_MODEL (store), NULL,
	                             URL_COLUMN, _("URL"), -1);
	g_signal_connect (G_OBJECT (view), "button_press_event",
	                  G_CALLBACK (url_treeview_url_clicked_cb), NULL);
	/* don't want column headers */
	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
	gtk_widget_show (view);
	return view;
}

static void
url_closegui (GtkWidget *wid, gpointer userdata)
{
	urlgrabberwindow = 0;
}

static void
url_button_clear (void)
{
	GtkListStore *store;
	
	url_clear ();
	store = GTK_LIST_STORE (g_object_get_data (G_OBJECT (urlgrabberwindow),
	                                           "model"));
	gtk_list_store_clear (store);
}

static void
url_button_copy (GtkWidget *widget, gpointer data)
{
	GtkTreeView *view = GTK_TREE_VIEW (data);
	GtkTreeIter iter;
	gchar *url = NULL;

	if (gtkutil_treeview_get_selected (view, &iter, URL_COLUMN, &url, -1))
	{
		gtkutil_copy_to_clipboard (GTK_WIDGET (view), NULL, url);
		g_free (url);
	}
}

static void
url_save_callback (void *arg1, char *file)
{
	if (file)
	{
		url_save_tree (file, "w", TRUE);
	}
}

static void
url_button_save (void)
{
	gtkutil_file_req (_("Select an output filename"),
							url_save_callback, NULL, NULL, NULL, FRF_WRITE);
}

void
fe_url_add (const char *urltext)
{
	GtkListStore *store;
	GtkTreeIter iter;
	gboolean valid;
	
	if (urlgrabberwindow)
	{
		store = GTK_LIST_STORE (g_object_get_data (G_OBJECT (urlgrabberwindow),
		                                           "model"));
		gtk_list_store_prepend (store, &iter);
		gtk_list_store_set (store, &iter,
		                    URL_COLUMN, urltext,
		                    -1);

		/* remove any overflow */
		if (prefs.hex_url_grabber_limit > 0)
		{
			valid = gtk_tree_model_iter_nth_child (
				GTK_TREE_MODEL (store), &iter, NULL, prefs.hex_url_grabber_limit);
			while (valid)
				valid = gtk_list_store_remove (store, &iter);
		}
	}
}

static int
populate_cb (char *urltext, gpointer userdata)
{
	fe_url_add (urltext);
	return TRUE;
}

void
url_opengui ()
{
	GtkWidget *vbox, *hbox, *view;

	if (urlgrabberwindow)
	{
		mg_bring_tofront (urlgrabberwindow);
		return;
	}

	urlgrabberwindow =
		mg_create_generic_tab ("UrlGrabber", _(DISPLAY_NAME": URL Grabber"), FALSE,
							 TRUE, url_closegui, NULL, 400, 256, &vbox, 0);
	gtkutil_destroy_on_esc (urlgrabberwindow);
	view = url_treeview_new (vbox);
	g_object_set_data (G_OBJECT (urlgrabberwindow), "model",
	                   gtk_tree_view_get_model (GTK_TREE_VIEW (view)));

	hbox = gtk_hbutton_box_new ();
	gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_SPREAD);
	gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
	gtk_box_pack_end (GTK_BOX (vbox), hbox, 0, 0, 0);
	gtk_widget_show (hbox);

	gtkutil_button (hbox, GTK_STOCK_CLEAR,
						 _("Clear list"), url_button_clear, 0, _("Clear"));
	gtkutil_button (hbox, GTK_STOCK_COPY,
						 _("Copy selected URL"), url_button_copy, view, _("Copy"));
	gtkutil_button (hbox, GTK_STOCK_SAVE_AS,
						 _("Save list to a file"), url_button_save, 0, _("Save As..."));

	gtk_widget_show (urlgrabberwindow);

	if (prefs.hex_url_grabber)
		tree_foreach (url_tree, (tree_traverse_func *)populate_cb, NULL);
	else
	{
		gtk_list_store_clear (GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view))));
		fe_url_add ("URL Grabber is disabled.");
	}
}