Thu, 30 Nov 2023 22:38:54 -0600
IRCv3: Implement basic CTCP support
This is just the scaffolding for it and doesn't implement any actual commands.
Testing Done:
Sent some `CTCP VERSION`'s to an IRCv3 account. Also manually sent `CTCP VERSION`'s to users and channel via temporary code in when the connection was fully established.
Reviewed at https://reviews.imfreedom.org/r/2854/
|
41750
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
1 | IRCV3_SOURCES = [ |
|
41951
00c472cd0fff
Create PurpleIRCv3Capabilities for managing capabilities for each connection
Gary Kramlich <grim@reaperworld.com>
parents:
41941
diff
changeset
|
2 | 'purpleircv3capabilities.c', |
|
41783
5ea6c18ef7a8
Add the ability to connect to IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41774
diff
changeset
|
3 | 'purpleircv3connection.c', |
|
41916
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
4 | 'purpleircv3core.c', |
|
42530
55b30ce86f17
IRCv3: Implement basic CTCP support
Gary Kramlich <grim@reaperworld.com>
parents:
42505
diff
changeset
|
5 | 'purpleircv3ctcp.c', |
|
42505
cc095f9ce1f3
IRCv3: strip formatting from incoming messages
Gary Kramlich <grim@reaperworld.com>
parents:
42503
diff
changeset
|
6 | 'purpleircv3formatting.c', |
|
42333
a34601ac633c
Add PurpleIRCv3Message represent messages rather than multiple variables
Gary Kramlich <grim@reaperworld.com>
parents:
42320
diff
changeset
|
7 | 'purpleircv3message.c', |
|
41916
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
8 | 'purpleircv3messagehandlers.c', |
|
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
9 | 'purpleircv3parser.c', |
|
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
10 | 'purpleircv3protocol.c', |
|
42320
21cab78fb7d2
IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
42229
diff
changeset
|
11 | 'purpleircv3protocolconversation.c', |
|
42023
5bda87b90d8d
Implement SASL for IRCv3 using GSASL
Gary Kramlich <grim@reaperworld.com>
parents:
41951
diff
changeset
|
12 | 'purpleircv3sasl.c', |
|
42336
14c850aeee79
IRCv3: add ircv3_source_parse to parse sources into nick, user, and host
Gary Kramlich <grim@reaperworld.com>
parents:
42333
diff
changeset
|
13 | 'purpleircv3source.c', |
|
41916
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
14 | ] |
|
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
15 | |
|
4ee9cb957595
Implement sending im's for IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41822
diff
changeset
|
16 | IRCV3_HEADERS = [ |
|
41951
00c472cd0fff
Create PurpleIRCv3Capabilities for managing capabilities for each connection
Gary Kramlich <grim@reaperworld.com>
parents:
41941
diff
changeset
|
17 | 'purpleircv3capabilities.h', |
|
41783
5ea6c18ef7a8
Add the ability to connect to IRCv3
Gary Kramlich <grim@reaperworld.com>
parents:
41774
diff
changeset
|
18 | 'purpleircv3connection.h', |
|
42503
55eff782a478
IRCv3: Add support for updating topics
Gary Kramlich <grim@reaperworld.com>
parents:
42489
diff
changeset
|
19 | 'purpleircv3constants.h', |
|
41774
170078e728c0
Implement a parser for ircv3 and add unit tests to it.
Gary Kramlich <grim@reaperworld.com>
parents:
41750
diff
changeset
|
20 | 'purpleircv3core.h', |
|
42530
55b30ce86f17
IRCv3: Implement basic CTCP support
Gary Kramlich <grim@reaperworld.com>
parents:
42505
diff
changeset
|
21 | 'purpleircv3ctcp.h', |
|
42505
cc095f9ce1f3
IRCv3: strip formatting from incoming messages
Gary Kramlich <grim@reaperworld.com>
parents:
42503
diff
changeset
|
22 | 'purpleircv3formatting.h', |
|
42333
a34601ac633c
Add PurpleIRCv3Message represent messages rather than multiple variables
Gary Kramlich <grim@reaperworld.com>
parents:
42320
diff
changeset
|
23 | 'purpleircv3message.h', |
|
41796
ebe4ff278b02
Use the parser on ircv3 messages and handle pings
Gary Kramlich <grim@reaperworld.com>
parents:
41783
diff
changeset
|
24 | 'purpleircv3messagehandlers.h', |
|
41774
170078e728c0
Implement a parser for ircv3 and add unit tests to it.
Gary Kramlich <grim@reaperworld.com>
parents:
41750
diff
changeset
|
25 | 'purpleircv3parser.h', |
|
41750
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
26 | 'purpleircv3protocol.h', |
|
42320
21cab78fb7d2
IRCv3: Move from ProtocolIM to ProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
42229
diff
changeset
|
27 | 'purpleircv3protocolconversation.h', |
|
42023
5bda87b90d8d
Implement SASL for IRCv3 using GSASL
Gary Kramlich <grim@reaperworld.com>
parents:
41951
diff
changeset
|
28 | 'purpleircv3sasl.h', |
|
42336
14c850aeee79
IRCv3: add ircv3_source_parse to parse sources into nick, user, and host
Gary Kramlich <grim@reaperworld.com>
parents:
42333
diff
changeset
|
29 | 'purpleircv3source.h', |
|
41750
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
30 | ] |
|
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
31 | |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
32 | if not DYNAMIC_IRCV3 |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
33 | subdir_done() |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
34 | endif |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
35 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
36 | ircv3_filebase = f'purple-@purple_major_version@-ircv3' |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
37 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
38 | ircv3_includes = include_directories('.') |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
39 | ircv3_include_base = purple_include_base / 'protocols/ircv3' |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
40 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
41 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
42 | ircv3_resources = gnome.compile_resources('ircv3resource', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
43 | 'resources/ircv3.gresource.xml', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
44 | source_dir : 'resources', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
45 | c_name : 'purple_ircv3') |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
46 | IRCV3_SOURCES += ircv3_resources |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
47 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
48 | ircv3_h_includes = [] |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
49 | foreach header : IRCV3_HEADERS |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
50 | ircv3_h_includes += f'#include <@header@>' |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
51 | endforeach |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
52 | ircv3_h_conf = configuration_data() |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
53 | ircv3_h_conf.set('IRCV3_H_INCLUDES', '\n'.join(ircv3_h_includes)) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
54 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
55 | ircv3_h = configure_file(input : 'purpleircv3.h.in', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
56 | output : 'purpleircv3.h', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
57 | configuration : ircv3_h_conf, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
58 | install : true, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
59 | install_dir : get_option('includedir') / ircv3_include_base) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
60 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
61 | install_headers(IRCV3_HEADERS, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
62 | subdir : ircv3_include_base) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
63 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
64 | ircv3_prpl = shared_library('ircv3', IRCV3_SOURCES + IRCV3_HEADERS + [ircv3_h], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
65 | c_args : ['-DPURPLE_IRCV3_COMPILATION', '-DG_LOG_USE_STRUCTURED', '-DG_LOG_DOMAIN="Purple-IRCv3"'], |
|
42472
409148c5c5b7
Add symbol visibility on IRCv3 protocol plugin
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42372
diff
changeset
|
66 | gnu_symbol_visibility : 'hidden', |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
67 | dependencies : [libpurple_dep, glib, gio, hasl, ws2_32], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
68 | install : true, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
69 | install_dir : PURPLE_PLUGINDIR) |
|
41750
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
70 | |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
71 | ircv3_dep = declare_dependency( |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
72 | sources : [IRCV3_SOURCES, IRCV3_HEADERS], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
73 | include_directories : ircv3_includes, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
74 | dependencies : [libpurple_dep, glib, gio, hasl, ws2_32]) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
75 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
76 | pkgconfig.generate( |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
77 | # we purposely don't put the library here because you should not be |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
78 | # linking to the plugin, everything will be resolved during runtime. |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
79 | name : 'ircv3', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
80 | description : 'a purple3 protocol plugin for IRCv3', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
81 | version : meson.project_version(), |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
82 | subdirs : [ircv3_include_base], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
83 | filebase : ircv3_filebase, |
|
42489
0edea2beaa95
Use libraries when generating pkgconfig files
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42472
diff
changeset
|
84 | libraries : [gio, glib, hasl, libpurple]) |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
85 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
86 | meson.override_dependency(ircv3_filebase, ircv3_dep) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
87 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
88 | devenv.append('PURPLE_PLUGIN_PATH', meson.current_build_dir()) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
89 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
90 | if get_option('introspection') |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
91 | GPLUGIN_INTROSPECTION = dependency('gplugin-introspection') |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
92 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
93 | plugin_filename = ircv3_prpl.full_path() |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
94 | |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
95 | ircv3_introspection_stub = executable('ircv3generategir', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
96 | sources : 'ircv3generategir.c', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
97 | dependencies : [ircv3_dep, libpurple_dep, glib, gio, hasl, ws2_32, GPLUGIN_INTROSPECTION], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
98 | c_args : ['-DPURPLE_IRCV3_COMPILATION', f'-DPLUGIN_FILENAME="@plugin_filename@"'], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
99 | install : false) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
100 | |
|
42372
ba3a49903905
Remove unused Meson variables
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42336
diff
changeset
|
101 | gnome.generate_gir( |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
102 | ircv3_introspection_stub, |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
103 | sources : [IRCV3_SOURCES, IRCV3_HEADERS], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
104 | includes : ['GLib-2.0', 'GObject-2.0', 'GPlugin-1.0', libpurple_gir[0]], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
105 | namespace : 'PurpleIRCv3', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
106 | symbol_prefix : 'purple_ircv3', |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
107 | nsversion : '1.0', |
|
41941
355bd17297f0
Set the C standard to C99 and set warning_level to 2 for the IRCv3 Protocol Plugin
Gary Kramlich <grim@reaperworld.com>
parents:
41916
diff
changeset
|
108 | install : true, |
|
42372
ba3a49903905
Remove unused Meson variables
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42336
diff
changeset
|
109 | dependencies: [gplugin_dep], |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
110 | export_packages : ['ircv3'], |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
111 | extra_args : ['-DPURPLE_IRCV3_COMPILATION', '--verbose']) |
|
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
112 | endif |
|
41750
7ab7d79ac0c5
Create a skeleton for the IRCv3 protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents:
diff
changeset
|
113 | |
|
42229
605f8cba9704
Add gobject-introspection for ircv3
Gary Kramlich <grim@reaperworld.com>
parents:
42081
diff
changeset
|
114 | subdir('tests') |