[telepathy-idle/master] Add a CM param for 'username'

Jonathon Jongsma jonathon.jongsma at collabora.co.uk
Wed May 27 16:22:02 PDT 2009


This allows clients to specify a username (that will be used by the USER
command).  This should fix bug #16499.
---
 src/idle-connection-manager.c |    4 ++++
 src/idle-connection.c         |   22 +++++++++++++++++++++-
 tests/twisted/idletest.py     |    1 +
 3 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/src/idle-connection-manager.c b/src/idle-connection-manager.c
index fbd7ccd..ef35aa3 100644
--- a/src/idle-connection-manager.c
+++ b/src/idle-connection-manager.c
@@ -36,6 +36,7 @@ struct _Params {
 	guint16 port;
 	gchar *password;
 	gchar *fullname;
+	gchar *username;
 	gchar *charset;
 	gchar *quit_message;
 	gboolean use_ssl;
@@ -54,6 +55,7 @@ static void _params_free(gpointer ptr) {
 	g_free(params->server);
 	g_free(params->password);
 	g_free(params->fullname);
+	g_free(params->username);
 	g_free(params->charset);
 	g_free(params->quit_message);
 
@@ -93,6 +95,7 @@ static const TpCMParamSpec _params[] = {
 	{"port", DBUS_TYPE_UINT16_AS_STRING, G_TYPE_UINT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER(6667), G_STRUCT_OFFSET(Params, port)},
 	{"password", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, G_STRUCT_OFFSET(Params, password)},
 	{"fullname", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, G_STRUCT_OFFSET(Params, fullname)},
+	{"username", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, 0, NULL, G_STRUCT_OFFSET(Params, username)},
 	{"charset", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "UTF-8", G_STRUCT_OFFSET(Params, charset)},
 	{"quit-message", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "So long and thanks for all the IRC - telepathy-idle IRC Connection Manager for Telepathy - http://telepathy.freedesktop.org", G_STRUCT_OFFSET(Params, quit_message)},
 	{"use-ssl", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER(FALSE), G_STRUCT_OFFSET(Params, use_ssl)},
@@ -130,6 +133,7 @@ static TpBaseConnection *_iface_new_connection(TpBaseConnectionManager *self, co
 			"port", params->port,
 			"password", params->password,
 			"realname", params->fullname,
+			"username", params->username,
 			"charset", params->charset,
 			"quit-message", params->quit_message,
 			"use-ssl", params->use_ssl,
diff --git a/src/idle-connection.c b/src/idle-connection.c
index 3418935..f7e9877 100644
--- a/src/idle-connection.c
+++ b/src/idle-connection.c
@@ -120,6 +120,7 @@ enum {
 	PROP_PORT,
 	PROP_PASSWORD,
 	PROP_REALNAME,
+	PROP_USERNAME,
 	PROP_CHARSET,
 	PROP_QUITMESSAGE,
 	PROP_USE_SSL,
@@ -142,6 +143,7 @@ struct _IdleConnectionPrivate {
 	guint port;
 	char *password;
 	char *realname;
+	char *username;
 	char *charset;
 	char *quit_message;
 	gboolean use_ssl;
@@ -243,6 +245,11 @@ static void idle_connection_set_property(GObject *obj, guint prop_id, const GVal
 			priv->realname = g_value_dup_string(value);
 			break;
 
+		case PROP_USERNAME:
+			g_free(priv->username);
+			priv->username = g_value_dup_string(value);
+			break;
+
 		case PROP_CHARSET:
 			g_free(priv->charset);
 			priv->charset = g_value_dup_string(value);
@@ -287,6 +294,10 @@ static void idle_connection_get_property(GObject *obj, guint prop_id, GValue *va
 			g_value_set_string(value, priv->realname);
 			break;
 
+		case PROP_USERNAME:
+			g_value_set_string(value, priv->username);
+			break;
+
 		case PROP_CHARSET:
 			g_value_set_string(value, priv->charset);
 			break;
@@ -342,6 +353,7 @@ static void idle_connection_finalize (GObject *object) {
 	g_free(priv->server);
 	g_free(priv->password);
 	g_free(priv->realname);
+	g_free(priv->username);
 	g_free(priv->charset);
 	g_free(priv->relay_prefix);
 	g_free(priv->quit_message);
@@ -396,6 +408,9 @@ static void idle_connection_class_init(IdleConnectionClass *klass) {
 	param_spec = g_param_spec_string("realname", "Real name", "The real name of the user connecting to IRC", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB);
 	g_object_class_install_property(object_class, PROP_REALNAME, param_spec);
 
+	param_spec = g_param_spec_string("username", "User name", "The username of the user connecting to IRC", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB);
+	g_object_class_install_property(object_class, PROP_USERNAME, param_spec);
+
 	param_spec = g_param_spec_string("charset", "Character set", "The character set to use to communicate with the outside world", "NULL", G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB | G_PARAM_CONSTRUCT);
 	g_object_class_install_property(object_class, PROP_CHARSET, param_spec);
 
@@ -506,6 +521,11 @@ static gboolean _iface_start_connecting(TpBaseConnection *self, GError **error)
 				priv->realname = g_strdup(priv->nickname);
 		}
 
+		if (!priv->username || !priv->username[0]) {
+			g_free(priv->username);
+			priv->username = g_strdup(priv->nickname);
+		}
+
 		sconn = IDLE_SERVER_CONNECTION_IFACE(g_object_new(connection_type, "host", priv->server, "port", priv->port, NULL));
 
 		g_signal_connect(sconn, "status-changed", (GCallback)(sconn_status_changed_cb), conn);
@@ -864,7 +884,7 @@ static void irc_handshakes(IdleConnection *conn) {
 	g_snprintf(msg, IRC_MSG_MAXLEN + 1, "NICK %s", priv->nickname);
 	idle_connection_send(conn, msg);
 
-	g_snprintf(msg, IRC_MSG_MAXLEN + 1, "USER %s %u * :%s", priv->nickname, 8, priv->realname);
+	g_snprintf(msg, IRC_MSG_MAXLEN + 1, "USER %s %u * :%s", priv->username, 8, priv->realname);
 	idle_connection_send(conn, msg);
 
 	/* gather some information about ourselves */
diff --git a/tests/twisted/idletest.py b/tests/twisted/idletest.py
index 80954bc..39d189c 100644
--- a/tests/twisted/idletest.py
+++ b/tests/twisted/idletest.py
@@ -151,6 +151,7 @@ def make_connection(bus, event_func, params=None):
         'server': 'localhost',
         'password': '',
         'fullname': 'Test User',
+        'username': 'testuser',
         'charset': 'UTF-8',
         'quit-message': 'happy testing...',
         'use-ssl': dbus.Boolean(False),
-- 
1.5.6.5



More information about the telepathy-commits mailing list