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