diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/jabber/jabber.c | 89 | ||||
| -rw-r--r-- | protocols/nogaim.h | 1 | ||||
| -rw-r--r-- | protocols/oscar/oscar.c | 15 | 
3 files changed, 76 insertions, 29 deletions
| diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index c8e8ceca..e7f4534e 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -562,35 +562,17 @@ static void gjab_start(gjconn gjc)  {  	account_t *acc;  	int port = -1, ssl = 0; -	char *server = NULL, *s; +	char *server = NULL;  	if (!gjc || gjc->state != JCONN_STATE_OFF)  		return;  	acc = GJ_GC(gjc)->acc; -	if (acc->server) { -		/* If there's a dot, assume there's a hostname in the beginning */ -		if (strchr(acc->server, '.')) { -			server = g_strdup(acc->server); -			if ((s = strchr(server, ':'))) -				*s = 0; -		} -		 -		/* After the hostname, there can be a port number */ -		s = strchr(acc->server, ':'); -		if (s && isdigit(s[1])) -			sscanf(s + 1, "%d", &port); -		 -		/* And if there's the string ssl, the user wants an SSL-connection */ -		if (strstr(acc->server, ":ssl") || g_strcasecmp(acc->server, "ssl") == 0) -			ssl = 1; -	} +	server = acc->server; +	port = set_getint(&acc->set, "port"); +	ssl = set_getbool(&acc->set, "ssl"); -	if (port == -1 && !ssl) -		port = DEFAULT_PORT; -	else if (port == -1 && ssl) -		port = DEFAULT_PORT_SSL; -	else if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) { +	if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) {  		serv_got_crap(GJ_GC(gjc), "For security reasons, the Jabber port number must be in the %d-%d range.", JABBER_PORT_MIN, JABBER_PORT_MAX);  		STATE_EVT(JCONN_STATE_OFF)  		return; @@ -613,8 +595,6 @@ static void gjab_start(gjconn gjc)  		gjc->fd = proxy_connect(server, port, gjab_connected, GJ_GC(gjc));  	} -	g_free(server); -	  	if (!acc->gc || (gjc->fd < 0)) {  		STATE_EVT(JCONN_STATE_OFF)  		return; @@ -1515,12 +1495,62 @@ static void jabber_handlestate(gjconn gjc, int state)  	return;  } -static void jabber_login(account_t *acc) +static void jabber_acc_init(account_t *acc)  { -	struct gaim_connection *gc = new_gaim_conn(acc); -	struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1); -	char *loginname = create_valid_jid(acc->user, DEFAULT_SERVER, "BitlBee"); +	set_t *s; +	 +	s = set_add( &acc->set, "port", "5222", set_eval_int, acc ); +	s->flags |= ACC_SET_OFFLINE_ONLY; +	 +	s = set_add( &acc->set, "resource", "BitlBee", NULL, acc ); +	s->flags |= ACC_SET_OFFLINE_ONLY; +	 +	s = set_add( &acc->set, "server", NULL, set_eval_account, acc ); +	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY; +	 +	s = set_add( &acc->set, "ssl", "false", set_eval_bool, acc ); +	s->flags |= ACC_SET_OFFLINE_ONLY; +} +static void jabber_login(account_t *acc) +{ +	struct gaim_connection *gc; +	struct jabber_data *jd; +	char *resource, *loginname; +	 +	/* Time to move some data/things from the old syntax to the new one: */ +	if (acc->server) { +		char *s, *tmp_server; +		int port; +		 +		if (g_strcasecmp(acc->server, "ssl") == 0) { +			set_setstr(&acc->set, "server", ""); +			set_setint(&acc->set, "port", DEFAULT_PORT_SSL); +			set_setstr(&acc->set, "ssl", "true"); +			 +			g_free(acc->server); +			acc->server = NULL; +		} else if ((s = strchr(acc->server, ':'))) { +			if (strstr(acc->server, ":ssl")) { +				set_setint(&acc->set, "port", DEFAULT_PORT_SSL); +				set_setstr(&acc->set, "ssl", "true"); +			} +			if (isdigit(s[1])) { +				if (sscanf(s + 1, "%d", &port) == 1) +					set_setint(&acc->set, "port", port); +			} +			tmp_server = g_strndup(acc->server, s - acc->server); +			set_setstr(&acc->set, "server", tmp_server); +			g_free(tmp_server); +		} +	} +	 +	gc = new_gaim_conn(acc); +	jd = gc->proto_data = g_new0(struct jabber_data, 1); +	 +	resource = set_getstr(&acc->set, "resource"); +	loginname = create_valid_jid(acc->user, DEFAULT_SERVER, resource); +	  	jd->hash = g_hash_table_new(g_str_hash, g_str_equal);  	jd->chats = NULL;	/* we have no chats yet */ @@ -2336,6 +2366,7 @@ void jabber_init()  	ret->name = "jabber";  	ret->away_states = jabber_away_states; +	ret->acc_init = jabber_acc_init;  	ret->login = jabber_login;  	ret->close = jabber_close;  	ret->send_im = jabber_send_im; diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 8c6519c1..c0a867d6 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -128,6 +128,7 @@ struct prpl {  	int options;  	const char *name; +	void (* acc_init)	(account_t *);  	void (* login)		(account_t *);  	void (* keepalive)	(struct gaim_connection *);  	void (* close)		(struct gaim_connection *); diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c index d55ce3f2..28239812 100644 --- a/protocols/oscar/oscar.c +++ b/protocols/oscar/oscar.c @@ -355,6 +355,14 @@ static gboolean oscar_login_connect(gpointer data, gint source, b_input_conditio  	return FALSE;  } +static void oscar_acc_init(account_t *acc) +{ +	set_t *s; +	 +	s = set_add( &acc->set, "server", NULL, set_eval_account, acc ); +	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY; +} +  static void oscar_login(account_t *acc) {  	aim_session_t *sess;  	aim_conn_t *conn; @@ -389,6 +397,12 @@ static void oscar_login(account_t *acc) {  		return;  	} +	if (acc->server == NULL) { +		hide_login_progress(gc, "No servername specified"); +		signoff(gc); +		return; +	} +	  	if (g_strcasecmp(acc->server, "login.icq.com") != 0 &&  	    g_strcasecmp(acc->server, "login.oscar.aol.com") != 0) {  		serv_got_crap(gc, "Warning: Unknown OSCAR server: `%s'. Please review your configuration if the connection fails.",acc->server); @@ -2648,6 +2662,7 @@ void oscar_init()  	ret->name = "oscar";  	ret->away_states = oscar_away_states;  	ret->login = oscar_login; +	ret->acc_init = oscar_acc_init;  	ret->close = oscar_close;  	ret->send_im = oscar_send_im;  	ret->get_info = oscar_get_info; | 
