libpurple/purpleprotocol.c

changeset 41869
7bd5bff547b4
parent 41814
f8940ebd4eee
child 41884
36684da1e60d
--- a/libpurple/purpleprotocol.c	Mon Oct 31 22:50:20 2022 -0500
+++ b/libpurple/purpleprotocol.c	Mon Oct 31 22:52:24 2022 -0500
@@ -165,6 +165,23 @@
 }
 
 /******************************************************************************
+ * PurpleProtocol Implementation
+ *****************************************************************************/
+static PurpleConnection *
+purple_protocol_default_create_connection(PurpleProtocol *protocol,
+                                          PurpleAccount *account,
+                                          const char *password,
+                                          G_GNUC_UNUSED GError **error)
+{
+	return g_object_new(
+		PURPLE_TYPE_CONNECTION,
+		"protocol", protocol,
+		"account", account,
+		"password", password,
+		NULL);
+}
+
+/******************************************************************************
  * GObject Implementation
  *****************************************************************************/
 static void
@@ -286,6 +303,8 @@
 	obj_class->set_property = purple_protocol_set_property;
 	obj_class->finalize = purple_protocol_finalize;
 
+	klass->create_connection = purple_protocol_default_create_connection;
+
 	/**
 	 * PurpleProtocol::id:
 	 *
@@ -548,6 +567,30 @@
 	}
 }
 
+
+PurpleConnection *
+purple_protocol_create_connection(PurpleProtocol *protocol,
+                                  PurpleAccount *account,
+                                  const char *password,
+                                  GError **error)
+{
+	PurpleProtocolClass *klass = NULL;
+
+	g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), NULL);
+	g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL);
+
+	klass = PURPLE_PROTOCOL_GET_CLASS(protocol);
+	if(klass != NULL && klass->create_connection != NULL) {
+		return klass->create_connection(protocol, account, password, error);
+	}
+
+	g_set_error(error, PURPLE_CONNECTION_ERROR, 0,
+	            "Protocol %s did not implement create_connection",
+	            purple_protocol_get_name(protocol));
+
+	return NULL;
+}
+
 GList *
 purple_protocol_get_status_types(PurpleProtocol *protocol,
                                  PurpleAccount *account)

mercurial