HACKING

Thu, 19 Dec 2002 20:38:12 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Thu, 19 Dec 2002 20:38:12 +0000
changeset 4102
06290da3f88d
parent 2863
c3ab46e58c0a
child 4491
715515ab95da
permissions
-rw-r--r--

[gaim-migrate @ 4317]
Cooley enough, @mac.com screen names can sign on without any additional
changes. There are a few problems, though. This fixes one of them:

-SNAC error saying "Not supported by host" or something similar at
signon, because gaim requests a redirect to the email notification
server, but this is not supported for ICQ and @mac.com accounts (I
don't know why ICQ accounts don't give the error). Anyway, so this
fixes the problem by only requesting the redirect if the screen name
has an email address associated with it. I made it so the auth
reply info is stored in the oscar session struct. There are some
other useful variables there, and I think it's just cleaner to
store the whole thing than the little bits and pieces.

I heard someone complain about your_uin@pager.icq.com spam, so I'm
thinking it'd be good if there were a way to disable those types of
messages. WinICQ has a nice little preferences thingy, I think.
I dunno, maybe I could add a checkbox to the account window?

639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 A lot of people have tried to hack gaim, but haven't been able to because
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 the code is just so horrid. Well, the code isn't getting better anytime
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
3 soon (I hate GNU indent), so to help all you would-be hackers help out
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
4 gaim, here's a brief tutorial on how gaim works. I'll quickly describe
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
5 the logical flow of things, then what you'll find in each of the source
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
6 files. As an added bonus, I'll try and describe as best I can how multiple
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
7 connections and multiple protocols work. Depending on how much I want to
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
8 avoid my final tomorrow I may even describe other parts of gaim that I
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
9 particularly want to brag about. Hopefully that's enough to get most of
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
10 you going.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
11
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
12 If you don't know how event-driven programs work, stop right now. Gaim
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
13 uses GTK+'s main loop (actually GLib's but I won't talk about how GTK
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
14 works) and uses GLib functions for timeouts and socket notification. If
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
15 you don't know GTK you should go learn that first.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
17 If you're going to hack gaim, PLEASE, PLEASE PLEASE PLEASE send patches
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
18 against the absolute latest CVS. I get really annoyed when I get patches
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
19 against the last released version, especially since I don't usually have
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
20 a copy of it on my computer, and gaim tends to change a lot between
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
21 versions. (I sometimes get annoyed when they're against CVS from 3 days
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
22 ago, but can't complain because it's usually my fault that I haven't
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
23 looked at the patch yet.) To get gaim from CVS (if you haven't already),
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
24 run the following commands:
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
25
774
97a94a9fd7c0 [gaim-migrate @ 784]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 749
diff changeset
26 $ export CVSROOT=:pserver:anonymous@cvs.gaim.sourceforge.net:/cvsroot/gaim
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
27 $ cvs login (hit enter as the password)
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
28 $ cvs co gaim (you'll see it getting all of the files)
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
29 $ cd gaim
1863
af03c531e79c [gaim-migrate @ 1873]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1710
diff changeset
30 $ ./autogen.sh
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
31
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
32 You'll now have your normal gaim tree with ./configure and all (which
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
33 ./autogen.sh takes the liberty of running for you). (If you want to make
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
34 your life really simple, learn how CVS works. CVS is your friend.) To make
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
35 a patch, just edit the files right there in that tree (don't bother with
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
36 two trees, or even two copies of the same file). Then when you're ready to
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
37 make your patch, simply run 'cvs diff -u >my.patch' and send it off;
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
38 either post it on sf.net/projects/gaim in the patches section, or email it
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
39 to gaim@marko.net.
708
c4285ce27acc [gaim-migrate @ 718]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 706
diff changeset
40
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
41 This file was last modified by $Author: warmenhoven $ on
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
42 $Date: 2001-12-09 09:06:36 -0500 (Sun, 09 Dec 2001) $. Do not expect any information contained
2520
3e7a9d706c2e [gaim-migrate @ 2533]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2519
diff changeset
43 within to be current or correct.
2144
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
44
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
45 Here's something new. Someone requested that I comment the code. No. I'm a
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
46 lazy bastard, and I understand most of the code, so I don't need the
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
47 comments. I understand that some of you do though. So give me the names of
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
48 specific functions that you'd like commented and I'll see what I can do.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
49 It's more likely that those comments will be updated with the code than
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
50 this file is, though even that is still unlikely.
2655
3ad3b22abc18 [gaim-migrate @ 2668]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2520
diff changeset
51
2144
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
52
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
53 CODING STYLE
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
54 ============
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
55
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
56 Coding styles are like assholes, everyone has one and no one likes anyone
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
57 elses. This is mine and if you want me to accept a patch from you without
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
58 getting annoyed you'll follow this coding style. :)
2144
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
59
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
60 It would probably just be easier for me to include CodingStyle from the
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
61 linux kernel source.
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
62
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
63 Tab indents. I *HATE* 2-space indents, and I strongly dislike 8-space
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
64 indents. Use a tab character. I'm likely to refuse a patch if it has
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
65 2-space indents.
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
66
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
67 K&R style for braces. Braces always go on the same line as the if, etc.
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
68 that they're associated with; the only exception is functions. Braces
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
69 for else statements should have both braces on the same line as the else
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
70 (i.e. "} else {").
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
71
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
72 No functionOrVariableNamesLikeThis. Save it for Java. Underscores are your
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
73 friend. "tmp" is an excellent variable name. Hungarian style will not be
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
74 tolerated. Go back to Microsoft.
2144
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
75
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
76 I have a 105-char wide Eterm. Deal with it.
6d6bb304043a [gaim-migrate @ 2154]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1863
diff changeset
77
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
78 NO goto. I'm very likely to refuse a patch if it makes use of goto. If you
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
79 feel the need to use goto, you need to rethink your design and flow.
684
85f0ef25fe51 [gaim-migrate @ 694]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 639
diff changeset
80
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 PROGRAM FLOW
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 ============
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
85 Before gaim does anything you can see, it initializes itself, which is
1038
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
86 mostly just reading .gaimrc (handled by the functions in gaimrc.c) and
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
87 parsing command-line options. It then draws the login window by calling
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
88 show_login, and waits for input.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
89
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
90 At the login window, when "Accounts" is clicked, account_editor() is
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
91 called. This then displays all of the users and various information
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
92 about them. (Don't ask about what happens when "Sign On" is called. It's
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
93 quite hackish. The only reason the login window is there anymore is to
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
94 make it more palatable to people so used to WinAIM that they can't accept
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
95 anything else.)
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
96
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
97 When the "Sign on/off" button is clicked, serv_login is passed the
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
98 username and the password for the account. If the password length is
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
99 zero (the password field is a character array rather than pointer so it
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
100 will not be NULL) then the Signon callback will prompt for the password
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
101 before calling serv_login. serv_login then signs in the user using the
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
102 appropriate protocol.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
103
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
104 After you're signed in, Gaim draws the buddy list by calling
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
105 show_buddy_list. Assuming the user has a buddy list (all buddy list
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
106 functions are controlled by list.c; when you sign on do_import is called
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
107 and that loads the locally saved list), the protocol calls
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
108 serv_got_update, which sets the information in the appropriate struct
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
109 buddy and then passes it off to set_buddy.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
110
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
111 set_buddy is responsible for a lot of stuff, but most of it is done
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
112 implicitly. It's responsible for the sounds (which is just a call to
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
113 play_sound), but the biggest thing it does is call new_group_show and
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
114 new_buddy_show if necessary. There's only one group_show per group name,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
115 even between connections, and only one buddy_show per group_show per
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
116 buddy name, even between connections. (If that's not confusing enough,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
117 wait until I really start describing how the buddy list works.)
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
118
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
119 New connections happen the exact same way as described above. Each
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
120 aim_user can have one gaim_connection associated with it. aim_user and
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
121 gaim_connection both have a protocol field. This is kind of confusing:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
122 gaim, except for the account editor screen and when the user signs on,
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
123 ignores the user's protocl field, and only uses the connection's protocol
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
124 field. You can change the connection's protocol field once it's created
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
125 and been assigned a PRPL to use to change certain behavior (Oscar does
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
126 this because it handles both AIM and ICQ). I'll talk about the
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
127 gaim_connection struct more later.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
128
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
129 When the user opens a new conversation window, new_conversation is called.
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
130 That's easy enough. If there isn't a conversation with the person already
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
131 open (checked by calling find_conversation), show_conv is called to
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
132 create the new window. All sorts of neat things happen there, but it's
1038
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
133 mostly drawing the window. show_conv is the best place to edit the UI.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
134
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
135 That's pretty much it for the quick tutorial. I know it wasn't much but
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
136 it's enough to get you started. Make sure you know GTK before you get too
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
137 involved. Most of the back-end stuff is pretty basic; most of gaim is GTK.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 SOURCE FILES
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 ============
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 about.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144 Not much to say here, just a few basic functions.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 aim.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 This is where the main() function is. It takes care of a lot of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 initialization stuff, and showing the login window. It's pretty tiny
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
149 and there's not really much to edit in it. This has some of the most
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
150 pointless functions, like gaim_setup, which optionally turns off sounds
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
151 on signon. A lot of this file should actually be part of other files.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152
1558
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
153 applet.c:
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
154 This controls most things that are related to the applet. I don't like
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
155 looking at this file because it still has functionsLikeThis. But at
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
156 least it doesn't have many of them anymore. Anyway, this file isn't
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
157 very big because there's really not much difference between the panel
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
158 version and the app version.
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
159
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 away.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 This takes care of most of the away stuff: setting the away message
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
162 (do_away_message); coming back (do_im_back); drawing the away window;
1558
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
163 etc. Away messages work really oddly due to multiple connections and
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
164 multiple protocols; I think there are really only two or three people
1619
8a254206f8d4 [gaim-migrate @ 1629]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1558
diff changeset
165 who know how it works and I don't think any of us know why it works
1558
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
166 that way.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 browser.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 Code for opening a browser window. Most of the code is trying to deal
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170 with Netscape. The most important function here is open_url. Have fun.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172 buddy.c:
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
173 This takes care of the buddy list window and most things related to it.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
174 It still has some functions that manage the list, but not many.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 buddy_chat.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 This takes care of the buddy chat stuff. This used to be a lot bigger
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 until the chat and IM windows got merged in the code. Now it mostly
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 just takes care of chat-specific stuff, like ignoring people and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 keeping track of who's in the room. This is also where the chat window
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 is created.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 conversation.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 This is where most of the functions dealing with the IM and chat windows
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 are hidden. It tries to abstract things as much as possible, but doesn't
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 do a very good job. This is also where things like "Enter sends" and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187 "Ctrl-{B/I/U/S}" options get carried out (look for send_callback). The
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
188 chat and IM toolbar (with the B/I/U/S buttons) are both built from
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
189 the same function, build_conv_toolbar.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
191 core.c:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
192 This is the start of what will become the main() for gaim-core.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
193
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 dialogs.c:
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
195 A massive file with a lot of little utility functions. This is where all
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
196 of those little dialog windows are created. Things like the warn dialog
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
197 and the add buddy dialog are here. Not all of the dialogs in gaim are in
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
198 this file, though. But most of them are. This is also where do_import
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
199 is housed, to import buddy lists. (The actual buddy list parsing code
2166
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
200 is in util.c for winaim lists and buddy.c for gaim's own lists.)
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 gaimrc.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 This controls everything about the .gaimrc file. There's not really much
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 to say about it; this is probably one of the better designed and easier
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 to follow files in gaim. The important functions are towards the bottom.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206
1558
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
207 gtkimhtml.c:
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
208 This is gaim's HTML widget. It replaced the old widget, GtkHtml (which
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
209 was different than GNOME's GtkHTML). It's self-contained (it doesn't
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
210 use any of gaim's code) and is actually a separate project from gaim
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
211 (but is maintained by Eric).
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212
1558
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
213 gtkspell.c:
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
214 This controls spell checking. It's not a widget per se but it does have
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
215 some influence over the GtkText widget. It's a separate project from
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
216 gaim; if you have a patch for this file send it to the author (the
e40c85ff32c0 [gaim-migrate @ 1568]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1237
diff changeset
217 contact info is in the file).
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 gtkticker.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 Syd, our resident GTK God, wrote a GtkWidget, GtkTicker. This is that
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
221 widget. It's cool, and it's tiny. This is actually a really good example
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
222 widget for those of you looking to write your own.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 html.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 Don't ask my why this is called html.c. Most of it is just grab_url,
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 which does like the name says; it downloads a URL to show in the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 GtkHTML widget. http.c would be a more appropriate name, but that's OK.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229 idle.c:
1038
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
230 This file used to be entirely #if 0'd out of existance. However, thanks
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
231 to some very generous people who submitted patches, this takes care of
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
232 reporting idle time (imagine that). It's a pretty straight-forward file.
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
233 This also takes care of the auto-away stuff.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
235 list.c:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
236 This file contains all of the routines for managing buddy lists,
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
237 including importing them from a file, saving them, adding and removing
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
238 buddies and groups, etc.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
239
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
240 md5.c:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
241 Oscar, Yahoo, and MSN all require md5 hashing, so better to put it in
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
242 the core than have the same thing in three different places.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
243
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
244 module.c:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
245 This contains all of the plugin code, except for the UI. This is what
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
246 actually loads the plugins, makes sure they're valid, has the code for
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
247 setting up plugin event handlers, and contains the plugin_event method
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
248 that gaim calls on events.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
249
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
250 multi.c:
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
251 This is the file that tries to take care of most of the major issues
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
252 with multiple connections. The best function in here by far is the
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
253 account_editor(). auto_login() is also in here (I'm just reading multi.h
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
254 now...). account_editor is really the only function that the UI needs
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
255 to be concerned with.
979
f9bea7bfe1b0 [gaim-migrate @ 989]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
256
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257 perl.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
258 This was basically copied straight from X-Chat through the power of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 the GPL. Perl is the biggest, most confusing piece of C code I've ever
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 seen in my life (and keep in mind I'm a gaim hacker). I have a basic
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 idea of what's going on in it, but I couldn't tell you exactly. The
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262 top half sets up perl and tells it what's going on and the bottom half
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 implements the AIM module.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265 plugins.c:
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
266 This contains the UI for the plugins dialog. It's mostly GTK.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
267
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268 prefs.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 The important function in here is build_prefs, but the most useful
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270 function is gaim_button. build_prefs draws the window, and calls
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271 gaim_button probably 30 or 40 times. (I don't really wanna run grep
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272 | wc to count.) This is where you add the toggle button for gaim
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273 preferences. It's very simple, and if you look at a couple of the
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
274 calls to gaim_button you'll figure it out right away. The new prefs
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
275 window uses a CList instead of a Notebook, and there's a pretty bad
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
276 hack to get it to work. I won't tell you what though.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 proxy.c:
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
279 Adam (of libfaim glory) got bored one day and rewrote this file, so
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
280 now everything actually works. The main function is proxy_connect,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
281 which figures out which proxy you want to use (if you want to use one
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
282 at all) and passes off the data to the appropriate function. This file
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
283 should be pretty straight-forward.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
285 prpl.c:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
286 This file is what lets gaim dynamically load protocols, sort of. All
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
287 of the actual dlopen(), dlsym() stuff is in module.c. But this contains
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
288 all of the functions that the protocol plugin needs to call, and manages
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
289 all of the protocols. It's a pretty simple file actually.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
290
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 server.c:
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
292 This is where all of the differentiation between the different protocols
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
293 is done. Nearly everything that's network related goes through here
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294 at one point or another. This has good things like serv_send_im and
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295 serv_got_update. Most of it should be pretty self-explanatory.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
296
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297 sound.c:
1038
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
298 The main function in this file is play_sound, which plays one of 8
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
299 (maybe 9?) sounds based on preferences. All that the rest of the code
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
300 should have to do is call play_sound(BUDDY_ARRIVE), for example, and
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
301 this file will take care of determining if a sound should be played
1038
850b893e1ac9 [gaim-migrate @ 1048]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 980
diff changeset
302 and which file should be played.
639
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 ticker.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
305 Syd is just so cool. I really can't get over it. He let me come
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 visit him at Netscape one day, and I got to see all of their toys
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307 (don't worry, I'm under an NDA). Anyway, this file is for the buddy
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308 ticker. This is also a damn cool file because it's got all of the
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
309 functions that you'd want right up at the top. Someday I want to be
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310 as cool as Syd.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 util.c:
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 There's not really a lot of cohesion to this file; it's just a lot of
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
314 stuff that happened to be thrown into it for no apparent reason. None
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
315 of it is particularly tasty; it's all just utility functions. Just
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 like the name says.
5466afd6af9b [gaim-migrate @ 649]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
318 For the PRPLs, the only protocol whose "main" gaim file isn't the same as
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
319 the name of the protocol is ICQ; for that it's gaim_icq.c. But ICQ is
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
320 deprecated and you should be using Oscar for ICQ anyway.
1653
955d62bcec11 [gaim-migrate @ 1663]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1619
diff changeset
321
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
322 HOW BUDDY LISTS WORK
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
323 ====================
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
324
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
325 The buddy list is a pain in the ass. Let me start off by saying that. The
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
326 most difficult part about getting gaim to do multiple connections was
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
327 the buddy list. In its current state it's very much like the UI for
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
328 0.10.x and earlier, which is what I was aiming for. However, the code
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
329 is completely different. And not much better.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
330
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
331 There are two parts to the buddy list: the lists for the connections and
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
332 the Buddy List window. list.c contains code to manage the lists themselves
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
333 and buddy.c contains the code for the Buddy List window.
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
334
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
335 Each buddy needs to belong to a connection, it cannot belong to a
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
336 "protocol" like in EveryBuddy. The reason is because when you are adding
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
337 buddies, you tell the server who is on your buddy list so it can tell you
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
338 about them; in order to tell the server, it needs to go out over a
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
339 connection. Going out over all connections would not be good, so you need
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
340 to specify which connection they go out on.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
341
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
342 Managing lists is therefore fairly easy, each group and buddy has an
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
343 associated connection. Management functions like add_buddy/remove_buddy
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
344 and add_group/remove_group all take a gaim_connection. These are all in
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
345 list.c. They're boring.
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
346
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
347 The window is a lot more fun. There's really only one function that
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
348 does anything interesting, and that's set_buddy. (There's also things
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
349 like build_edit_tree, but that's boring.) set_buddy is called by
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
350 serv_got_update (and should only be called by that function) any time
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
351 a user signs on, signs off, goes away, comes back, goes idle, etc, etc,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
352 etc. Various things happen depending on the new state of the buddy.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
353
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
354 struct buddy has a member, present, which is set to either 0, 1, or
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
355 2. You can check if the buddy is online with "if (b->present)". This
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
356 becomes important. present is set to either 0 or 1 by serv_got_update,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
357 or is not set at all. When the buddy is passed to set_buddy, if present
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
358 is 1 then set_buddy plays the BUDDY_ARRIVE sound, and sets present to 2,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
359 to indicate it has already received notification of arrival. It then
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
360 does other signin-related stuff: setting the pixmap to the login icon;
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
361 updating the conversation windows; etc.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
362
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
363 The most important thing it does though, if a buddy is present, is it
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
364 checks for the existance of the appropriate group_show and buddy_show for
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
365 that buddy. Each buddy must belong to a group. group_shows are based on
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
366 name; there can only be one group_show for each group name. buddy_shows
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
367 are based both on name and on group_show; there can only be one buddy_show
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
368 in a group_show for each name. However, there can be two buddy_shows
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
369 with the same name as long as they have different group_shows.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
370
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
371 Each buddy_show has a GList of connections that has registered its related
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
372 buddy as being online. set_buddy makes sure that the connection that it's
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
373 being passed is part of the connlist for the buddy_show associated with
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
374 the struct buddy that it's passed (it helps to know your data structures).
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
375
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
376 If a buddy logs off (b->present == 0), and a buddy_show exists for
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
377 that buddy, then set_buddy will play the logoff sound, change the icon,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
378 remove the connection from the connlist for the buddy_show, etc.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
379
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
380 And that's how that works. For the buddy lists, connections own buddies;
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
381 for the window, the buddies own the connections. When the buddy_show
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
382 connlist count drops to zero it disappears from existance.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
383
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
384
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
385 PLUGINS
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
386 =======
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
387
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
388 OK, so you want to load a plugin. You go through whatever UI (you
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
389 can read all about the UI in plugins.c or whereever). You finally get
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
390 to load_plugin, the meat of the plugins stuff (plugins can actually
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
391 call load_plugin themselves to load other plugins). load_plugin
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
392 is passed the full path to the plugin you want to load
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
393 (e.g. /usr/local/lib/gaim/irc.so).
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
394
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
395 load_plugin does a few things with that filename. The first is to see
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
396 if you've already loaded that plugin. If you have, load_plugin unloads
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
397 the one that is currently loaded. You might wonder why; it's because
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
398 the same plugin can't be loaded twice. If you call g_module_open on a
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
399 filename twice, both times it will return the same pointer, and both times
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
400 increment the reference count on the GModule * that it returns. This
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
401 means you really do have the same plugin twice, which fucks up the
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
402 callback system to no end. So it's better that you can only have it
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
403 loaded once at any given time.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
404
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
405 Now that we're assured that we don't have this particular plugin loaded
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
406 yet, we better load it. g_module_open, baby. Much more portable than
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
407 dlopen(). In fact, for Linux it actually is the equivalent of dlopen()
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
408 (you can read the gmodule source and see for yourself). There's only one
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
409 quirk. It always logically ORs the options you pass with RTLD_GLOBAL,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
410 which means that plugins share symbols. I haven't figured out yet if
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
411 this means just functions or variables too; but in either case make every
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
412 function and variable in your plugin static except for gaim_plugin_*(),
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
413 name(), and description(). It's good coding practice anyway.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
414
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
415 So, assuming we didn't get NULL back from g_module_open, we then make sure
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
416 it's a valid gaim plugin by looking for and calling gaim_plugin_init,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
417 courtesy g_module_symbol (g_module_symbol is actually what's portable
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
418 about gmodule as opposed to dl*; some BSD's require '_' prepended to
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
419 symbol names and g_module_symbol guarantees we do The Right Thing).
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
420
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
421 Assuming we've found gaim_plugin_init and it hasn't returned non-NULL
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
422 to us, we then add it to our list of plugins and go merrily about our way.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
423
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
424 So when do the callbacks happen?! plugin_event, baby, plugin_event. Any
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
425 time you want to trigger a plugin event simply call plugin_even with the
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
426 parameters to be passed to any event handlers and you're set. plugin_event
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
427 then makes sure that any plugins waiting for the event get passed the
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
428 arguments properly and passes it on to perl.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
429
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
430 Speaking of perl. If you really want to know how this works, you're
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
431 better off reading X-Chat's documentation of it, because it's better
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
432 than what I could provide.
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
433
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
434
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
435 MULTIPLE CONNECTIONS AND PRPLS
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
436 ==============================
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
437
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
438 OK, let's start with the basics. There are users. Each user is contained
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
439 in an aim_user struct, and kept track of in the aim_users GList (GSList?).
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
440 Each aim_user has certain features: a username, a password, and user_info.
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
441 It also has certain options, and the protocol it uses to sign on (kept
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
442 as an int which is #define'd in prpl.h).
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
443
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
444 Now then, there are protocols that gaim knows about. Each protocol is
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
445 in a prpl struct and kept track of in the protocols GSList. The way the
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
446 management of the protocols is, there will only ever be one prpl per
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
447 numeric protocol. Each prpl defines a basic set of functions: login,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
448 logout, send_im, etc. The prpl is responsible not only for handling
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
449 these functions, but also for calling the appropriate serv_got functions
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
450 (e.g. serv_got_update when a buddy comes online/goes offline/goes
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
451 idle/etc). It handles each of these on a per-connection basis.
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
452
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
453 So why's it called a PRPL? It stands for PRotocol PLugin. That means
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
454 that it's possible to dynamically add new protocols to gaim. However,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
455 all protocols must be implemented the same way: by using a prpl struct
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
456 and being loaded, regardless of whether they are static or dynamic.
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
457
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
458 Here's how struct gaim_connection fits into all of this. At some point
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
459 the User (capitalized to indicate a person and not a name) will try to
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
460 sign on one of Their users. serv_login is then called for that user. It
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
461 searches for the prpl that is assigned to that user, and calls that prpl's
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
462 login function, passing it the aim_user struct that is attempting to sign
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
463 on. The prpl is then responsible for seeing that the gaim_connection
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
464 is created (by calling new_gaim_connection), and registering it as
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
465 being online (by calling account_online and passing it the aim_user and
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
466 gaim_connection structs). At that point, the aim_user and gaim_connection
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
467 structs have pointers to each other, and the gaim_connection struct has
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
468 a pointer to the prpl struct that it is using. The gaim_connections are
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
469 stored in the connections GSList. The way connection management works is,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
470 there will always only be one gaim_connection per user, and the prpl that
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
471 the gaim_connection uses will be constant for the gaim_connection's life.
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
472
1237
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
473 So at certain points the User is going to want to do certain things,
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
474 like send a message. They must send the message on a connection. So the UI
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
475 figures out which gaim_connection the User want to send a message on (for
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
476 our example), and calls serv_send_im, telling it which gaim_connection to
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
477 use, and the necessary information (who to send it to, etc). The serv_
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
478 function then calls the handler of the prpl of the connection for that
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
479 event (that was way too many prepositions). OK, each prpl has a send_im
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
480 function. Each connection has a prpl. so you call gc->prpl->send_im and
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
481 pass it the connection and all the necessary info. And that's how things
5074b5b953da [gaim-migrate @ 1247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1099
diff changeset
482 get done.
1063
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
483
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
484 I hope some of that made sense. Looking back at it it makes absolutely no
f766a178ee59 [gaim-migrate @ 1073]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1038
diff changeset
485 sense to me. Thank god I wrote the code; otherwise I'm sure I'd be lost.
2166
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
486
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
487
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
488 WRITING PRPLS
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
489 =============
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
490
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
491 Start off with a protocol that you want to implement; make sure it has a
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
492 number defined in prpl.h. If it doesn't, talk to Rob or Eric about adding
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
493 it. *NEVER* use an unassigned number, not even for testing or personal
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
494 use. It's possible that number will be used later by something else and
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
495 that would cause quite a few head-scratchers.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
496
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
497 Start off with the following boiler plate:
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
498
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
499 static struct prpl *my_protocol = NULL;
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
500
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
501 void newproto_init(struct prpl *ret) {
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
502 ret->protocol = PROTO_NEWPROTO;
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
503
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
504 my_protocol = ret;
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
505 }
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
506
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
507 #ifndef STATIC
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
508
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
509 char *gaim_plugin_init(GModule *handle)
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
510 {
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
511 load_protocol(newproto_init, sizeof(struct prpl));
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
512 return NULL;
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
513 }
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
514
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
515 void gaim_plugin_remove()
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
516 {
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
517 struct prpl *p = find_prpl(PROTO_NEWPROTO);
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
518 if (p == my_protocol)
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
519 unload_protocol(p);
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
520 }
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
521
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
522 char *name()
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
523 {
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
524 return "New Protocol";
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
525 }
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
526
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
527 char *description()
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
528 {
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
529 return PRPL_DESC("New Protocol");
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
530 }
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
531
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
532 #endif
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
533
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
534 Replace all NEWPROTO things with your protocol name (e.g. PROTO_OSCAR
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
535 instead of PROTO_NEWPROTO, oscar_init instead of newproto_init). Then
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
536 populate your struct prpl; the most important function is actually name(),
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
537 because without it, Gaim will most likely segfault. The second most
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
538 important function is login(). Not all functions need to be implemented.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
539
2166
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
540 There should be absolutely *ZERO* GTK in the PRPLs. PRPLs should *NEVER*
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
541 say what the UI *looks* like, only what information needs to be there.
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
542 There's currently an effort to get the GTK that is contained in the PRPLs
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
543 directory out of there. If you submit a patch that adds GTK to those
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
544 directories it's very likely to be refused, unless if I'm in a good mood
130810e62b84 [gaim-migrate @ 2176]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2150
diff changeset
545 and decide to relocate things for you. That's not likely.
2863
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
546
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
547 You're probably wondering how you can do certain things without GTK. Well,
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
548 you're just going to have to make do. Rely on the UI, that's why it's
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
549 there. A PRPL should have absolutely ZERO interaction with the user, it
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
550 should all be handled by the UI.
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
551
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
552 Don't use the _options variables at all. The core should take care of all
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
553 of that. There are several proto_opt fields that you can use on a per-user
c3ab46e58c0a [gaim-migrate @ 2876]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2655
diff changeset
554 basis. Check out existing protocols for more details.

mercurial