PRPL

Fri, 17 Nov 2000 22:45:31 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Fri, 17 Nov 2000 22:45:31 +0000
changeset 1103
507b6eb3ed2c
parent 1086
30dae9f299ce
child 1224
252fad5b9d30
permissions
-rw-r--r--

[gaim-migrate @ 1113]
lalala

981
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 Protocol Plugins. What EveryBuddy should have been.
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 Each PRPL needs to have a unique identifier. In the pre-PRPL system TOC was 0 and Oscar was 1.
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 This identifier can be found in prpl.h. They are pre-assigned. PROTO_TOC is still 0, PROTO_OSCAR
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 is still 1. The protocol_init function is expected to set the struct's protocol member to the
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 appropriate value. If you want to write a new PRPL for gaim, please email one of the maintainers
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 with the name of the protocol. We'll then reserve a number for it. Please do not use a number
1103
507b6eb3ed2c [gaim-migrate @ 1113]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1086
diff changeset
8 that has not been assigned to your protocol.
981
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 The addition of PRPL to gaim means that gaim now supports multiple connections and multiple (and
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 dynamically loadable) protocols.
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 ======
00723c9a507c [gaim-migrate @ 991]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14
1030
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
15 I guess I should document how to write a PRPL.
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
16
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
17 The first thing to do is to write your init function. It should be delcared
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
18
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
19 void my_proto_init(struct prpl *p);
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
20
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
21 You then fill in the members of the struct. See prpl.h for what they are.
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
22
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
23 If you're going to load your protocol dynamically, put the function gaim_plugin_init(void *) in the
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
24 file, and have it call
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
25
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
26 load_protocol(my_proto_init);
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
27
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
28 and return a non-negative int. Then compile as a plugin, load the .so file, and you're set. If you're
1086
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
29 going to load it statically, extern the my_proto_init function, and in prpl.c, call load_protocol.
1030
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
30
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
31 Your PRPL needs to have a login function, which ideally should set up a gdk_input watcher. When you
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
32 want to indicate that the account is online, simply call account_online(struct gaim_connection *).
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
33 When there is information from the server, you should call the appropriate serv_got function (see
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
34 gaim.h for a (partial?) list).
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
35
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
36 When the UI wants to send something via the server, it will call the appropriate function that you set
1086
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
37 in your PRPL, if it's non-NULL. The only function that is absolutely critical is name. Without name
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
38 gaim will probably crash. You don't even need login, just name. (You need login to do anything useful
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
39 though.)
1030
b9fa9eadc0a4 [gaim-migrate @ 1040]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 981
diff changeset
40
1086
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
41 The best example to copy is probably Rob's IRC plugin, in plugins/irc.c. The most important functions
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
42 for gaim interaction are at the bottom (irc_init, gaim_plugin_init, and gaim_plugin_remove). The
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
43 rest of it is the protocol implementation.
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
44
30dae9f299ce [gaim-migrate @ 1096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1030
diff changeset
45 Sorry for the formatting. My Eterm is 105 characters wide.

mercurial