protocols/sip/purplesipplugin.c

Thu, 17 Jul 2025 20:28:54 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 17 Jul 2025 20:28:54 -0500
changeset 43290
01edcfbfebaa
parent 43245
b83427aa2c38
permissions
-rw-r--r--

IRCv3: Implement the /me command

This was kind of forgotten about, but it's here now.

Testing Done:
Watched a packet dump to verify it was sent correct and asked people in #pidgin on libera if it came through correctly.

Reviewed at https://reviews.imfreedom.org/r/4070/

43245
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 *
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 * Lesser General Public License for more details.
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 *
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * License along with this library; if not, see <https://www.gnu.org/licenses/>.
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 */
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 #include <glib.h>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 #include <glib/gi18n-lib.h>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22 #include <gplugin.h>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 #include <gplugin-native.h>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include <purple.h>
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include "purplesipplugin.h"
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include "purplesipprotocol.h"
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 /******************************************************************************
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 * Globals
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 *****************************************************************************/
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 static PurpleProtocol *sip_protocol = NULL;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 /******************************************************************************
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 * GPlugin Implementation
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 *****************************************************************************/
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 static GPluginPluginInfo *
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40 purple_sip_plugin_query(G_GNUC_UNUSED GError **error) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 const gchar *authors[] = {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 "Pidgin Developers <devel@pidgin.im>",
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 NULL
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 };
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46 return purple_plugin_info_new(
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 "id", "prpl-sip",
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 "name", "SIP Protocol Plugin",
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 "authors", authors,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 "version", PURPLE_VERSION,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 "category", N_("Protocol"),
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52 "summary", N_("A protocol plugin for SIP."),
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 "description", N_("A protocol plugin for SIP/SIMPLE contacts."),
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 "website", PURPLE_WEBSITE,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 "abi-version", PURPLE_ABI_VERSION,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL |
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 NULL
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 );
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 static gboolean
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 purple_sip_plugin_load(GPluginPlugin *plugin, GError **error) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 PurpleProtocolManager *manager = NULL;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 if(PURPLE_IS_PROTOCOL(sip_protocol)) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 g_set_error_literal(error, PURPLE_SIP_DOMAIN, 0,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68 "plugin was not cleaned up properly");
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 return FALSE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 purple_sip_protocol_register(GPLUGIN_NATIVE_PLUGIN(plugin));
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 manager = purple_protocol_manager_get_default();
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 sip_protocol = purple_sip_protocol_new();
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 if(!purple_protocol_manager_add(manager, sip_protocol, error)) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 g_clear_object(&sip_protocol);
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 return FALSE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 return TRUE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
86
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
87 static gboolean
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
88 purple_sip_plugin_unload(G_GNUC_UNUSED GPluginPlugin *plugin,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
89 G_GNUC_UNUSED gboolean shutdown,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
90 GError **error)
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
91 {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
92 PurpleProtocolManager *manager = purple_protocol_manager_get_default();
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
93
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
94 if(!PURPLE_IS_PROTOCOL(sip_protocol)) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
95 g_set_error_literal(error, PURPLE_SIP_DOMAIN, 0,
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
96 "plugin was not setup properly");
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
97
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 return FALSE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101 if(!purple_protocol_manager_remove(manager, sip_protocol, error)) {
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
102 return FALSE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 g_clear_object(&sip_protocol);
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
107 return TRUE;
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
108 }
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
109
b83427aa2c38 SIP: A stubbed out SIP protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
110 GPLUGIN_NATIVE_PLUGIN_DECLARE(purple_sip_plugin)

mercurial