Update of /cvsroot/gaim/gaim/src
In directory sc8-pr-cvs1:/tmp/cvs-serv4143/src
Modified Files:
core.h ft.c gaimrc.c html.c multi.c prefs.c proxy.c proxy.h
Log Message:
This will let you set up different proxy settings for different accounts.
Mainly useful to the corporate users that need to connect to an internal
jabber server, and still want to connect to "external" stuff through a
proxy, or something along those lines. I'm sure someone will come up with
another use for it.
Index: core.h
===================================================================
RCS file: /cvsroot/gaim/gaim/src/core.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- core.h 4 Feb 2003 06:57:34 -0000 1.36
+++ core.h 2 Mar 2003 18:47:58 -0000 1.37
@@ -71,6 +71,8 @@
/* buddy icon file */
char iconfile[256];
+ struct gaim_proxy_info *gpi;
+
struct gaim_connection *gc;
gboolean connecting;
Index: ft.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/ft.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- ft.c 26 Feb 2003 05:01:11 -0000 1.27
+++ ft.c 2 Mar 2003 18:47:58 -0000 1.28
@@ -575,7 +575,7 @@
xfer->remote_port = port;
/* Establish a file descriptor. */
- proxy_connect(xfer->remote_ip, xfer->remote_port,
+ proxy_connect(xfer->account, xfer->remote_ip, xfer->remote_port,
connect_cb, xfer);
return;
Index: gaimrc.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/gaimrc.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- gaimrc.c 21 Feb 2003 04:33:56 -0000 1.143
+++ gaimrc.c 2 Mar 2003 18:47:58 -0000 1.144
@@ -546,6 +546,29 @@
g_snprintf(account->alias, sizeof(account->alias), "%s", p->value[0]);
+ if (!fgets(buf, sizeof(buf), f))
+ return account;
+
+ if (!strcmp(buf, "\t}"))
+ return account;
+
+ p = parse_line(buf, &parse_buffer);
+
+ if (strcmp(p->option, "proxy_opts"))
+ return account;
+
+ if(atoi(p->value[0]) != PROXY_USE_GLOBAL) {
+ account->gpi = g_new0(struct gaim_proxy_info, 1);
+ account->gpi->proxytype = atoi(p->value[0]);
+ g_snprintf(account->gpi->proxyhost, sizeof(account->gpi->proxyhost),
+ "%s", p->value[1]);
+ account->gpi->proxyport = atoi(p->value[2]);
+ g_snprintf(account->gpi->proxyuser, sizeof(account->gpi->proxyuser),
+ "%s", p->value[3]);
+ g_snprintf(account->gpi->proxypass, sizeof(account->gpi->proxypass),
+ "%s", p->value[4]);
+ }
+
return account;
}
@@ -596,6 +619,16 @@
}
#endif
fprintf(f, "\t\talias { %s }\n", account->alias);
+ fprintf(f, "\t\tproxy_opts ");
+ if(account->gpi) {
+ fprintf(f, "{ %d } { %s } { %d } { %s } { %s }\n",
+ account->gpi->proxytype, account->gpi->proxyhost,
+ account->gpi->proxyport, account->gpi->proxyuser,
+ (c = escape_text2(account->gpi->proxypass)));
+ free(c);
+ } else {
+ fprintf(f, "{ %d }\n", PROXY_USE_GLOBAL);
+ }
}
static void gaimrc_read_users(FILE *f)
@@ -988,7 +1021,7 @@
len = c - proxy;
if (!strncmp(proxy, "http://", len + 3))
- proxytype = PROXY_HTTP;
+ global_proxy_info.proxytype = PROXY_HTTP;
else
return FALSE;
@@ -1042,24 +1075,25 @@
/* NOTE: HTTP_PROXY takes precendence. */
if (host[0])
- strcpy(proxyhost, host);
+ strcpy(global_proxy_info.proxyhost, host);
else
- *proxyhost = '\0';
+ *global_proxy_info.proxyhost = '\0';
if (user[0])
- strcpy(proxyuser, user);
+ strcpy(global_proxy_info.proxyuser, user);
else
- *proxyuser = '\0';
+ *global_proxy_info.proxyuser = '\0';
if (pass[0])
- strcpy(proxypass, pass);
+ strcpy(global_proxy_info.proxypass, pass);
else
- *proxypass = '\0';
-
- proxyport = port;
+ *global_proxy_info.proxypass = '\0';
+
+ global_proxy_info.proxyport = port;
debug_printf("host '%s'\nuser '%s'\npassword '%s'\nport %d\n",
- proxyhost, proxyuser, proxypass, proxyport);
+ global_proxy_info.proxyhost, global_proxy_info.proxyuser,
+ global_proxy_info.proxypass, global_proxy_info.proxyport);
return TRUE;
}
@@ -1071,7 +1105,7 @@
struct parse *p;
buf[0] = 0;
- proxyhost[0] = 0;
+ global_proxy_info.proxyhost[0] = 0;
debug_printf("gaimrc_read_proxy\n");
while (buf[0] != '}') {
@@ -1084,73 +1118,80 @@
p = parse_line(buf, &parse_buffer);
if (!strcmp(p->option, "host")) {
- g_snprintf(proxyhost, sizeof(proxyhost), "%s",
- p->value[0]);
- debug_printf("set proxyhost %s\n", proxyhost);
+ g_snprintf(global_proxy_info.proxyhost,
+ sizeof(global_proxy_info.proxyhost), "%s", p->value[0]);
+ debug_printf("set proxyhost %s\n", global_proxy_info.proxyhost);
} else if (!strcmp(p->option, "port")) {
- proxyport = atoi(p->value[0]);
+ global_proxy_info.proxyport = atoi(p->value[0]);
} else if (!strcmp(p->option, "type")) {
- proxytype = atoi(p->value[0]);
+ global_proxy_info.proxytype = atoi(p->value[0]);
} else if (!strcmp(p->option, "user")) {
- g_snprintf(proxyuser, sizeof(proxyuser), "%s",
- p->value[0]);
+ g_snprintf(global_proxy_info.proxyuser,
+ sizeof(global_proxy_info.proxyuser), "%s", p->value[0]);
} else if (!strcmp(p->option, "pass")) {
- g_snprintf(proxypass, sizeof(proxypass), "%s",
- p->value[0]);
+ g_snprintf(global_proxy_info.proxypass,
+ sizeof(global_proxy_info.proxypass), "%s", p->value[0]);
}
}
- if (proxyhost[0])
+ if (global_proxy_info.proxyhost[0])
proxy_info_is_from_gaimrc = 1;
- else if (!proxyhost[0]) {
-
+ else {
gboolean getVars = TRUE;
proxy_info_is_from_gaimrc = 0;
-
+
if (g_getenv("HTTP_PROXY"))
- g_snprintf(proxyhost, sizeof(proxyhost), "%s",
- g_getenv("HTTP_PROXY"));
+ g_snprintf(global_proxy_info.proxyhost,
+ sizeof(global_proxy_info.proxyhost), "%s",
+ g_getenv("HTTP_PROXY"));
else if (g_getenv("http_proxy"))
- g_snprintf(proxyhost, sizeof(proxyhost), "%s",
- g_getenv("http_proxy"));
+ g_snprintf(global_proxy_info.proxyhost,
+ sizeof(global_proxy_info.proxyhost), "%s",
+ g_getenv("http_proxy"));
else if (g_getenv("HTTPPROXY"))
- g_snprintf(proxyhost, sizeof(proxyhost), "%s",
- g_getenv("HTTPPROXY"));
+ g_snprintf(global_proxy_info.proxyhost,
+ sizeof(global_proxy_info.proxyhost), "%s",
+ g_getenv("HTTPPROXY"));
- if (*proxyhost != '\0')
- getVars = !gaimrc_parse_proxy_uri(proxyhost);
+ if (*global_proxy_info.proxyhost != '\0')
+ getVars = !gaimrc_parse_proxy_uri(global_proxy_info.proxyhost);
if (getVars)
{
if (g_getenv("HTTP_PROXY_PORT"))
- proxyport = atoi(g_getenv("HTTP_PROXY_PORT"));
+ global_proxy_info.proxyport = atoi(g_getenv("HTTP_PROXY_PORT"));
else if (g_getenv("http_proxy_port"))
- proxyport = atoi(g_getenv("http_proxy_port"));
+ global_proxy_info.proxyport = atoi(g_getenv("http_proxy_port"));
else if (g_getenv("HTTPPROXYPORT"))
- proxyport = atoi(g_getenv("HTTPPROXYPORT"));
+ global_proxy_info.proxyport = atoi(g_getenv("HTTPPROXYPORT"));
if (g_getenv("HTTP_PROXY_USER"))
- g_snprintf(proxyuser, sizeof(proxyuser), "%s",
- g_getenv("HTTP_PROXY_USER"));
+ g_snprintf(global_proxy_info.proxyuser,
+ sizeof(global_proxy_info.proxyuser), "%s",
+ g_getenv("HTTP_PROXY_USER"));
else if (g_getenv("http_proxy_user"))
- g_snprintf(proxyuser, sizeof(proxyuser), "%s",
- g_getenv("http_proxy_user"));
+ g_snprintf(global_proxy_info.proxyuser,
+ sizeof(global_proxy_info.proxyuser), "%s",
+ g_getenv("http_proxy_user"));
else if (g_getenv("HTTPPROXYUSER"))
- g_snprintf(proxyuser, sizeof(proxyuser), "%s",
- g_getenv("HTTPPROXYUSER"));
+ g_snprintf(global_proxy_info.proxyuser,
+ sizeof(global_proxy_info.proxyuser), "%s",
+ g_getenv("HTTPPROXYUSER"));
if (g_getenv("HTTP_PROXY_PASS"))
- g_snprintf(proxypass, sizeof(proxypass), "%s",
- g_getenv("HTTP_PROXY_PASS"));
+ g_snprintf(global_proxy_info.proxypass,
+ sizeof(global_proxy_info.proxypass), "%s",
+ g_getenv("HTTP_PROXY_PASS"));
else if (g_getenv("http_proxy_pass"))
- g_snprintf(proxypass, sizeof(proxypass), "%s",
- g_getenv("http_proxy_pass"));
+ g_snprintf(global_proxy_info.proxypass,
+ sizeof(global_proxy_info.proxypass), "%s",
+ g_getenv("http_proxy_pass"));
else if (g_getenv("HTTPPROXYPASS"))
- g_snprintf(proxypass, sizeof(proxypass), "%s",
- g_getenv("HTTPPROXYPASS"));
+ g_snprintf(global_proxy_info.proxypass,
+ sizeof(global_proxy_info.proxypass), "%s",
+ g_getenv("HTTPPROXYPASS"));
-
- if (proxyhost[0])
- proxytype = PROXY_HTTP;
+ if (global_proxy_info.proxyhost[0])
+ global_proxy_info.proxytype = PROXY_HTTP;
}
}
}
@@ -1161,11 +1202,12 @@
fprintf(f, "proxy {\n");
if (proxy_info_is_from_gaimrc) {
- fprintf(f, "\thost { %s }\n", proxyhost);
- fprintf(f, "\tport { %d }\n", proxyport);
- fprintf(f, "\ttype { %d }\n", proxytype);
- fprintf(f, "\tuser { %s }\n", proxyuser);
- fprintf(f, "\tpass { %s }\n", (str = escape_text2(proxypass)));
+ fprintf(f, "\thost { %s }\n", global_proxy_info.proxyhost);
+ fprintf(f, "\tport { %d }\n", global_proxy_info.proxyport);
+ fprintf(f, "\ttype { %d }\n", global_proxy_info.proxytype);
+ fprintf(f, "\tuser { %s }\n", global_proxy_info.proxyuser);
+ fprintf(f, "\tpass { %s }\n",
+ (str = escape_text2(global_proxy_info.proxypass)));
free(str);
} else {
fprintf(f, "\thost { %s }\n", "");
Index: html.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/html.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- html.c 1 Feb 2003 20:13:27 -0000 1.33
+++ html.c 2 Mar 2003 18:47:58 -0000 1.34
@@ -309,7 +309,7 @@
gunk->website = parse_url(url);
gunk->full = full;
- if ((sock = proxy_connect(gunk->website->address, gunk->website->port,
+ if ((sock = proxy_connect(NULL, gunk->website->address, gunk->website->port,
grab_url_callback, gunk)) < 0) {
g_free(gunk->website);
g_free(gunk->url);
Index: multi.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/multi.c,v
retrieving revision 1.168
retrieving revision 1.169
diff -u -d -r1.168 -r1.169
--- multi.c 1 Mar 2003 18:37:48 -0000 1.168
+++ multi.c 2 Mar 2003 18:47:58 -0000 1.169
@@ -19,6 +19,7 @@
*
*/
+#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <gtk/gtk.h>
@@ -84,6 +85,15 @@
/* stuff for register with server */
GtkWidget *register_user;
+
+ /* stuff for proxy options */
+ GtkWidget *proxy_frame;
+ GtkWidget *proxy_host_box;
+ GtkWidget *proxytype_menu;
+ GtkWidget *proxyhost_entry;
+ GtkWidget *proxyport_entry;
+ GtkWidget *proxyuser_entry;
+ GtkWidget *proxypass_entry;
};
@@ -351,6 +361,7 @@
struct gaim_account *a;
struct prpl *p;
GtkTreeIter iter;
+ int proxytype;
if (!ma->account) {
txt = gtk_entry_get_text(GTK_ENTRY(ma->name));
@@ -403,6 +414,23 @@
gtk_widget_destroy(ma->icondlg);
ma->icondlg = NULL;
+ if(ma->account->gpi)
+ g_free(ma->account->gpi);
+ ma->account->gpi = NULL;
+
+ proxytype = (int)gtk_object_get_user_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(ma->proxytype_menu))));
+
+ if(proxytype != PROXY_USE_GLOBAL) {
+ struct gaim_proxy_info *gpi = g_new0(struct gaim_proxy_info, 1);
+ gpi->proxytype = proxytype;
+ g_snprintf(gpi->proxyhost, sizeof(gpi->proxyhost), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxyhost_entry)));
+ gpi->proxyport = atoi(gtk_entry_get_text(GTK_ENTRY(ma->proxyport_entry)));
+ g_snprintf(gpi->proxyuser, sizeof(gpi->proxyuser), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxyuser_entry)));
+ g_snprintf(gpi->proxypass, sizeof(gpi->proxypass), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxypass_entry)));
+
+ ma->account->gpi = gpi;
+ }
+
/*
* See if user registration is supported/required
*/
@@ -826,6 +854,178 @@
}
+static void proxy_dropdown_set(GtkObject *w, struct mod_account *ma) {
+ int opt = (int)gtk_object_get_user_data(w);
+ gtk_widget_set_sensitive(ma->proxy_host_box, (opt != PROXY_NONE && opt != PROXY_USE_GLOBAL));
+}
+
+static void generate_proxy_options(struct mod_account *ma, GtkWidget *box) {
+ GtkWidget *frame;
+ GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *label;
+ GtkWidget *menu;
+ GtkWidget *dropdown;
+ GtkWidget *opt;
+ GtkWidget *entry;
+ GtkWidget *vbox2;
+
+ struct gaim_proxy_info *gpi = NULL;
+
+ if(ma->account)
+ gpi = ma->account->gpi;
+
+ frame = make_frame(box, _("Proxy Options"));
+ ma->proxy_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
+ gtk_widget_show_all(ma->proxy_frame);
+
+ vbox = gtk_vbox_new(FALSE, 5);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+ gtk_widget_show(vbox);
+
+ /* make the dropdown w/o the benefit of the easy helper funcs in prefs.c */
+ hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new_with_mnemonic(_("Proxy _Type"));
+ gtk_size_group_add_widget(ma->sg, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+
+ dropdown = gtk_option_menu_new();
+ menu = gtk_menu_new();
+
+ opt = gtk_menu_item_new_with_label("Use Global Proxy Settings");
+ gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_USE_GLOBAL);
+ g_signal_connect(G_OBJECT(opt), "activate",
+ G_CALLBACK(proxy_dropdown_set), ma);
+ gtk_widget_show(opt);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
+ if(!gpi)
+ gtk_menu_set_active(GTK_MENU(menu), 0);
+
+ opt = gtk_menu_item_new_with_label("No Proxy");
+ gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_NONE);
+ g_signal_connect(G_OBJECT(opt), "activate",
+ G_CALLBACK(proxy_dropdown_set), ma);
+ gtk_widget_show(opt);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
+ if(gpi && gpi->proxytype == PROXY_NONE)
+ gtk_menu_set_active(GTK_MENU(menu), 1);
+
+ opt = gtk_menu_item_new_with_label("SOCKS 4");
+ gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_SOCKS4);
+ g_signal_connect(G_OBJECT(opt), "activate",
+ G_CALLBACK(proxy_dropdown_set), ma);
+ gtk_widget_show(opt);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
+ if(gpi && gpi->proxytype == PROXY_SOCKS4)
+ gtk_menu_set_active(GTK_MENU(menu), 2);
+
+ opt = gtk_menu_item_new_with_label("SOCKS 5");
+ gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_SOCKS5);
+ g_signal_connect(G_OBJECT(opt), "activate",
+ G_CALLBACK(proxy_dropdown_set), ma);
+ gtk_widget_show(opt);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
+ if(gpi && gpi->proxytype == PROXY_SOCKS5)
+ gtk_menu_set_active(GTK_MENU(menu), 3);
+
+ opt = gtk_menu_item_new_with_label("HTTP");
+ gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_HTTP);
+ g_signal_connect(G_OBJECT(opt), "activate",
+ G_CALLBACK(proxy_dropdown_set), ma);
+ gtk_widget_show(opt);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt);
+ if(gpi && gpi->proxytype == PROXY_HTTP)
+ gtk_menu_set_active(GTK_MENU(menu), 4);
+
+ gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu);
+ gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0);
+ gtk_widget_show(dropdown);
+
+ ma->proxytype_menu = menu;
+
+
+ vbox2 = gtk_vbox_new(FALSE, 5);
+ gtk_container_add(GTK_CONTAINER(vbox), vbox2);
+ gtk_widget_show(vbox2);
+ ma->proxy_host_box = vbox2;
+
+ hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new_with_mnemonic(_("_Host:"));
+ gtk_size_group_add_widget(ma->sg, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+ entry = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxyhost : "");
+ gtk_widget_show(entry);
+ ma->proxyhost_entry = entry;
+
+ hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new_with_mnemonic(_("Port:"));
+ gtk_size_group_add_widget(ma->sg, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+ entry = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ if(gpi && gpi->proxyport) {
+ char buf[128];
+ g_snprintf(buf, sizeof(buf), "%d", gpi->proxyport);
+ gtk_entry_set_text(GTK_ENTRY(entry), buf);
+ }
+ gtk_widget_show(entry);
+ ma->proxyport_entry = entry;
+
+ hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new_with_mnemonic(_("_User:"));
+ gtk_size_group_add_widget(ma->sg, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+ entry = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxyuser : "");
+ gtk_widget_show(entry);
+ ma->proxyuser_entry = entry;
+
+ hbox = gtk_hbox_new(FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
+ gtk_widget_show(hbox);
+
+ label = gtk_label_new_with_mnemonic(_("Pa_ssword:"));
+ gtk_size_group_add_widget(ma->sg, label);
+ gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show(label);
+ entry = gtk_entry_new();
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxypass : "");
+ gtk_widget_show(entry);
+ ma->proxypass_entry = entry;
+
+ gtk_widget_set_sensitive(vbox2, !(gpi == NULL || gpi->proxytype == PROXY_NONE));
+}
+
static void show_acct_mod(struct gaim_account *a)
{
/* This is the fucking modify account dialog. I've fucking seperated it into
@@ -896,6 +1096,7 @@
generate_login_options(ma, ma->main);
generate_user_options(ma, ma->main);
generate_protocol_options(ma, ma->main);
+ generate_proxy_options(ma, ma->main);
hbox = gtk_hbox_new(FALSE, 6);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
Index: prefs.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/prefs.c,v
retrieving revision 1.331
retrieving revision 1.332
diff -u -d -r1.331 -r1.332
--- prefs.c 26 Feb 2003 06:21:50 -0000 1.331
+++ prefs.c 2 Mar 2003 18:47:59 -0000 1.332
@@ -131,13 +131,13 @@
static void proxy_print_option(GtkEntry *entry, int entrynum)
{
if (entrynum == PROXYHOST)
- g_snprintf(proxyhost, sizeof(proxyhost), "%s", gtk_entry_get_text(entry));
+ g_snprintf(global_proxy_info.proxyhost, sizeof(global_proxy_info.proxyhost), "%s", gtk_entry_get_text(entry));
else if (entrynum == PROXYPORT)
- proxyport = atoi(gtk_entry_get_text(entry));
+ global_proxy_info.proxyport = atoi(gtk_entry_get_text(entry));
else if (entrynum == PROXYUSER)
- g_snprintf(proxyuser, sizeof(proxyuser), "%s", gtk_entry_get_text(entry));
+ g_snprintf(global_proxy_info.proxyuser, sizeof(global_proxy_info.proxyuser), "%s", gtk_entry_get_text(entry));
else if (entrynum == PROXYPASS)
- g_snprintf(proxypass, sizeof(proxypass), "%s", gtk_entry_get_text(entry));
+ g_snprintf(global_proxy_info.proxypass, sizeof(global_proxy_info.proxypass), "%s", gtk_entry_get_text(entry));
proxy_info_is_from_gaimrc = 1; /* If the user specifies it, we want
to save it */
}
@@ -165,7 +165,6 @@
/* OK, Apply and Cancel */
-
static void pref_nb_select(GtkTreeSelection *sel, GtkNotebook *nb) {
GtkTreeIter iter;
char text[128];
@@ -736,7 +735,7 @@
gtk_container_set_border_width (GTK_CONTAINER (ret), 12);
vbox = make_frame (ret, _("Proxy Type"));
- gaim_dropdown(vbox, _("Proxy _type:"), (int*)&proxytype, -1,
+ gaim_dropdown(vbox, _("Proxy _type:"), (int*)&global_proxy_info.proxytype, -1,
_("No proxy"), PROXY_NONE,
"SOCKS 4", PROXY_SOCKS4,
"SOCKS 5", PROXY_SOCKS5,
@@ -750,7 +749,7 @@
vbox = make_frame(ret, _("Proxy Server"));
prefs_proxy_frame = vbox;
- if (proxytype == PROXY_NONE)
+ if (global_proxy_info.proxytype == PROXY_NONE)
gtk_widget_set_sensitive(GTK_WIDGET(vbox), FALSE);
table = gtk_table_new(2, 4, FALSE);
@@ -769,7 +768,7 @@
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 0, 1, GTK_FILL, 0, 0, 0);
g_signal_connect(GTK_OBJECT(entry), "changed",
G_CALLBACK(proxy_print_option), (void *)PROXYHOST);
- gtk_entry_set_text(GTK_ENTRY(entry), proxyhost);
+ gtk_entry_set_text(GTK_ENTRY(entry), global_proxy_info.proxyhost);
hbox = gtk_hbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
@@ -784,9 +783,9 @@
g_signal_connect(GTK_OBJECT(entry), "changed",
G_CALLBACK(proxy_print_option), (void *)PROXYPORT);
- if (proxyport) {
+ if (global_proxy_info.proxyport) {
char buf[128];
- g_snprintf(buf, sizeof(buf), "%d", proxyport);
+ g_snprintf(buf, sizeof(buf), "%d", global_proxy_info.proxyport);
gtk_entry_set_text(GTK_ENTRY(entry), buf);
}
@@ -799,7 +798,7 @@
gtk_table_attach(GTK_TABLE(table), entry, 1, 2, 2, 3, GTK_FILL, 0, 0, 0);
g_signal_connect(GTK_OBJECT(entry), "changed",
G_CALLBACK(proxy_print_option), (void *)PROXYUSER);
- gtk_entry_set_text(GTK_ENTRY(entry), proxyuser);
+ gtk_entry_set_text(GTK_ENTRY(entry), global_proxy_info.proxyuser);
hbox = gtk_hbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
@@ -814,7 +813,7 @@
gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
g_signal_connect(GTK_OBJECT(entry), "changed",
G_CALLBACK(proxy_print_option), (void *)PROXYPASS);
- gtk_entry_set_text(GTK_ENTRY(entry), proxypass);
+ gtk_entry_set_text(GTK_ENTRY(entry), global_proxy_info.proxypass);
gtk_widget_show_all(ret);
return ret;
@@ -2290,7 +2289,7 @@
*option = opt;
}
- if (option == (int*)&proxytype) {
+ if (option == (int*)&global_proxy_info.proxytype) {
if (opt == PROXY_NONE)
gtk_widget_set_sensitive(prefs_proxy_frame, FALSE);
else
Index: proxy.c
===================================================================
RCS file: /cvsroot/gaim/gaim/src/proxy.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -d -r1.53 -r1.54
--- proxy.c 1 Feb 2003 00:22:05 -0000 1.53
+++ proxy.c 2 Mar 2003 18:47:59 -0000 1.54
@@ -55,11 +55,7 @@
#define GAIM_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR)
#define GAIM_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL)
-char proxyhost[128] = { 0 };
-int proxyport = 0;
-proxytype_t proxytype = PROXY_NONE;
-char proxyuser[128] = { 0 };
-char proxypass[128] = { 0 };
+struct gaim_proxy_info global_proxy_info;
struct PHB {
GaimInputFunction func;
@@ -67,7 +63,7 @@
char *host;
int port;
gint inpa;
- proxytype_t proxytype;
+ struct gaim_proxy_info *gpi;
};
typedef struct _GaimIOClosure {
@@ -728,9 +724,9 @@
request_len = g_snprintf(request, sizeof(request), "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n", phb->host, phb->port,
phb->host, phb->port);
- if (proxyuser) {
+ if (phb->gpi->proxyuser) {
char *t1, *t2;
- t1 = g_strdup_printf("%s:%s", proxyuser, proxypass);
+ t1 = g_strdup_printf("%s:%s", phb->gpi->proxyuser, phb->gpi->proxypass);
t2 = tobase64(t1);
g_free(t1);
g_return_if_fail(request_len < sizeof(request));
@@ -757,7 +753,7 @@
{
int fd = -1;
- debug_printf("connecting to %s:%d via %s:%d using HTTP\n", phb->host, phb->port, proxyhost, proxyport);
+ debug_printf("connecting to %s:%d via %s:%d using HTTP\n", phb->host, phb->port, phb->gpi->proxyhost, phb->gpi->proxyport);
if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) {
g_free(phb->host);
@@ -873,7 +869,7 @@
{
int fd = -1;
- debug_printf("connecting to %s:%d via %s:%d using SOCKS4\n", phb->host, phb->port, proxyhost, proxyport);
+ debug_printf("connecting to %s:%d via %s:%d using SOCKS4\n", phb->host, phb->port, phb->gpi->proxyhost, phb->gpi->proxyport);
if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) {
g_free(phb->host);
@@ -1020,12 +1016,12 @@
}
if (buf[1] == 0x02) {
- unsigned int i = strlen(proxyuser), j = strlen(proxypass);
+ unsigned int i = strlen(phb->gpi->proxyuser), j = strlen(phb->gpi->proxypass);
buf[0] = 0x01; /* version 1 */
buf[1] = i;
- memcpy(buf + 2, proxyuser, i);
+ memcpy(buf + 2, phb->gpi->proxyuser, i);
buf[2 + i] = j;
- memcpy(buf + 2 + i + 1, proxypass, j);
+ memcpy(buf + 2 + i + 1, phb->gpi->proxypass, j);
if (write(source, buf, 3 + i + j) < 3 + i + j) {
close(source);
@@ -1064,7 +1060,7 @@
i = 0;
buf[0] = 0x05; /* SOCKS version 5 */
- if (proxyuser[0]) {
+ if (phb->gpi->proxyuser[0]) {
buf[1] = 0x02; /* two methods */
buf[2] = 0x00; /* no authentication */
buf[3] = 0x02; /* username/password authentication */
@@ -1091,7 +1087,7 @@
{
int fd = -1;
- debug_printf("connecting to %s:%d via %s:%d using SOCKS5\n", phb->host, phb->port, proxyhost, proxyport);
+ debug_printf("connecting to %s:%d via %s:%d using SOCKS5\n", phb->host, phb->port, phb->gpi->proxyhost, phb->gpi->proxyport);
if ((fd = socket(addr->sa_family, SOCK_STREAM, 0)) < 0) {
g_free(phb->host);
@@ -1132,14 +1128,14 @@
static void connection_host_resolved(struct sockaddr *addr, size_t addrlen, gpointer data, const char *error_message)
{
struct PHB *phb = (struct PHB*)data;
-
+
if(!addr)
{
phb->func(phb->data, -1, GAIM_INPUT_READ);
return;
}
- switch(phb->proxytype)
+ switch(phb->gpi->proxytype)
{
case PROXY_NONE:
proxy_connect_none(phb, addr, addrlen);
@@ -1157,16 +1153,19 @@
}
int
-proxy_connect(char *host, int port, GaimInputFunction func, gpointer data)
+proxy_connect(struct gaim_account *account, char *host, int port, GaimInputFunction func, gpointer data)
{
char *connecthost = host;
int connectport = port;
struct PHB *phb = g_new0(struct PHB, 1);
+ if(!account || !account->gpi)
+ phb->gpi = &global_proxy_info;
+ else
+ phb->gpi = account->gpi;
phb->func = func;
phb->data = data;
phb->host = g_strdup(host);
phb->port = port;
- phb->proxytype = proxytype;
if (!host || !port || (port == -1) || !func) {
if(host)
@@ -1175,18 +1174,18 @@
return -1;
}
- if ((phb->proxytype!=PROXY_NONE) && (!proxyhost || !proxyhost[0] || !proxyport || (proxyport == -1)))
- phb->proxytype=PROXY_NONE;
+ if ((phb->gpi->proxytype!=PROXY_NONE) && (!phb->gpi->proxyhost || !phb->gpi->proxyhost[0] || !phb->gpi->proxyport || (phb->gpi->proxyport == -1)))
+ phb->gpi->proxytype=PROXY_NONE;
- switch(phb->proxytype)
+ switch(phb->gpi->proxytype)
{
case PROXY_NONE:
break;
case PROXY_HTTP:
case PROXY_SOCKS4:
case PROXY_SOCKS5:
- connecthost=proxyhost;
- connectport=proxyport;
+ connecthost=phb->gpi->proxyhost;
+ connectport=phb->gpi->proxyport;
break;
default:
g_free(phb->host);
Index: proxy.h
===================================================================
RCS file: /cvsroot/gaim/gaim/src/proxy.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- proxy.h 20 Jan 2003 19:26:56 -0000 1.12
+++ proxy.h 2 Mar 2003 18:47:59 -0000 1.13
@@ -39,18 +39,25 @@
#include <glib.h>
+#include "core.h"
+
typedef enum {
+ PROXY_USE_GLOBAL = -1,
PROXY_NONE = 0,
PROXY_HTTP,
PROXY_SOCKS4,
PROXY_SOCKS5,
} proxytype_t;
-extern char proxyhost[128];
-extern int proxyport;
-extern proxytype_t proxytype;
-extern char proxyuser[128];
-extern char proxypass[128];
+struct gaim_proxy_info {
+ int proxytype;
+ char proxyhost[128];
+ proxytype_t proxyport;
+ char proxyuser[128];
+ char proxypass[128];
+};
+
+extern struct gaim_proxy_info global_proxy_info;
extern guint proxy_info_is_from_gaimrc;
typedef enum {
@@ -62,6 +69,6 @@
extern gint gaim_input_add(int, GaimInputCondition, GaimInputFunction, gpointer);
extern void gaim_input_remove(gint);
-extern int proxy_connect(char *host, int port, GaimInputFunction func, gpointer data);
+extern int proxy_connect(struct gaim_account *account, char *host, int port, GaimInputFunction func, gpointer data);
#endif /* _PROXY_H_ */
|