[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