annotate src/perl.c @ 4269:ff0642fab1d5

[gaim-migrate @ 4520] Our cable was out again, so I was left doing dull stuff. I changed the alias_buddy prpl function so that it takes the alias as well as just the buddy name. It seemed silly not to pass the alias to a function that changes the alias. I added a call back for this prpl function in oscar.c. This has the effect of, when you add/change/remove the alias of a buddy, it also changes the alias in the server list. I changed some normalize calls in oscar.c because I think it's better this way. I could be wrong. I added the ability to re-request authorization from contacts that have not authorized you yet. Just right-click on those mofo's. I shuffled some functions around. oscar.c is a little messy. Our cable was out some today. Here's the message they have when you call their customer support: "All high speed data customers in the 919 and 252 area code may experience flashing status lights on their cable modems with inability to access online services at this time." 919 is basically all of Raleigh. I'm going to estimate at least 10,000 people with Time Warner cable. That's a lot of people. Time Warner sucks. This is from a few hours today: "15566 packets transmitted, 598 packets received, +8 duplicates, 96% packet loss" committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 09 Jan 2003 21:21:00 +0000
parents a614423c648f
children cddb50734169
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * gaim
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * (at your option) any later version.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * GNU General Public License for more details.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 * This was taken almost exactly from X-Chat. The power of the GPL.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21 * Translated from X-Chat to Gaim by Eric Warmenhoven.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22 * Originally by Erik Scrafford <eriks@chilisoft.com>.
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
23 * X-Chat Copyright (C) 1998 Peter Zelezny.
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27 #ifdef HAVE_CONFIG_H
2090
b66aca8e8dce [gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2048
diff changeset
28 #include <config.h>
1896
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
29 #ifdef DEBUG
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
30 #undef DEBUG
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
31 #endif
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #endif
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
33 #undef PACKAGE
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34
580
9a8b067eb368 [gaim-migrate @ 590]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 579
diff changeset
35 #ifdef USE_PERL
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36
3395
c731327dbc47 [gaim-migrate @ 3414]
Sean Egan <seanegan@gmail.com>
parents: 3280
diff changeset
37 #define group perl_group
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
38 #ifdef _WIN32
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
39 /* This took me an age to figure out.. without this __declspec(dllimport)
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
40 * will be ignored.
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
41 */
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
42 #define HASATTRIBUTE
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
43 #endif
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
44 #include <EXTERN.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
45 #ifndef _SEM_SEMUN_UNDEFINED
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
46 #define HAS_UNION_SEMUN
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
47 #endif
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
48 #include <perl.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
49 #include <XSUB.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
50 #ifndef _WIN32
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
51 #include <sys/mman.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
52 #endif
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
53 #include <sys/types.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
54 #include <sys/stat.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55 #include <fcntl.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 #undef PACKAGE
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57 #include <stdio.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
58 #ifndef _WIN32
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
59 #include <dirent.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
60 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
61 /* We're using perl's win32 port of this */
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
62 #define dirent direct
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
63 #endif
1238
78c4f497db2b [gaim-migrate @ 1248]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1233
diff changeset
64 #include <string.h>
798
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
65
3395
c731327dbc47 [gaim-migrate @ 3414]
Sean Egan <seanegan@gmail.com>
parents: 3280
diff changeset
66 #undef group
590
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
67
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
68 /* perl module support */
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
69 extern void xs_init _((void));
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
70 extern void boot_DynaLoader _((CV * cv)); /* perl is so wacky */
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
71
91f877d86ca6 [gaim-migrate @ 600]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 581
diff changeset
72 #undef _
1896
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
73 #ifdef DEBUG
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
74 #undef DEBUG
e556ffa08cce [gaim-migrate @ 1906]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1850
diff changeset
75 #endif
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
76 #ifdef _WIN32
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
77 #undef pipe
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
78 #endif
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 #include "gaim.h"
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
80 #include "prpl.h"
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
81
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
82 struct perlscript {
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
83 char *name;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
84 char *version;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
85 char *shutdowncallback; /* bleh */
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
86 struct gaim_plugin *plug;
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
87 };
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
88
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
89 struct _perl_event_handlers {
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
90 char *event_type;
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
91 char *handler_name;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
92 struct gaim_plugin *plug;
781
95ebfdb31a9b [gaim-migrate @ 791]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 780
diff changeset
93 };
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
94
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
95 struct _perl_timeout_handlers {
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
96 char *handler_name;
2512
bf7ec3874810 [gaim-migrate @ 2525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2511
diff changeset
97 char *handler_args;
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
98 gint iotag;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
99 struct gaim_plugin *plug;
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
100 };
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
101
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
102 static GList *perl_list = NULL; /* should probably extern this at some point */
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
103 static GList *perl_timeout_handlers = NULL;
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
104 static GList *perl_event_handlers = NULL;
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
105 static PerlInterpreter *my_perl = NULL;
2329
a6d0edc31554 [gaim-migrate @ 2339]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2261
diff changeset
106 static void perl_init();
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
108 /* dealing with gaim */
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
109 XS(XS_GAIM_register); /* set up hooks for script */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
110 XS(XS_GAIM_get_info); /* version, last to attempt signon, protocol */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
111 XS(XS_GAIM_print); /* lemme figure this one out... */
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
112 XS(XS_GAIM_write_to_conv); /* write into conversation window */
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
113
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
114 /* list stuff */
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
115 XS(XS_GAIM_buddy_list); /* all buddies */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
116 XS(XS_GAIM_online_list); /* online buddies */
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
117
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
118 /* server stuff */
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
119 XS(XS_GAIM_command); /* send command to server */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
120 XS(XS_GAIM_user_info); /* given name, return struct buddy members */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
121 XS(XS_GAIM_print_to_conv); /* send message to someone */
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
122 XS(XS_GAIM_print_to_chat); /* send message to chat room */
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
123 XS(XS_GAIM_serv_send_im); /* send message to someone (but do not display) */
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
124
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
125 /* handler commands */
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
126 XS(XS_GAIM_add_event_handler); /* when servers talk */
3456
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
127 XS(XS_GAIM_remove_event_handler); /* remove a handler */
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
128 XS(XS_GAIM_add_timeout_handler); /* figure it out */
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
129
3280
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
130 /* play sound */
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
131 XS(XS_GAIM_play_sound); /*play a sound*/
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
132
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
133 void xs_init()
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
134 {
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
135 char *file = __FILE__;
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
136
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
137 /* This one allows dynamic loading of perl modules in perl
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
138 scripts by the 'use perlmod;' construction*/
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
139 newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
140
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
141 /* load up all the custom Gaim perl functions */
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
142 newXS ("GAIM::register", XS_GAIM_register, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
143 newXS ("GAIM::get_info", XS_GAIM_get_info, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
144 newXS ("GAIM::print", XS_GAIM_print, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
145 newXS ("GAIM::write_to_conv", XS_GAIM_write_to_conv, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
146
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
147 newXS ("GAIM::buddy_list", XS_GAIM_buddy_list, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
148 newXS ("GAIM::online_list", XS_GAIM_online_list, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
149
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
150 newXS ("GAIM::command", XS_GAIM_command, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
151 newXS ("GAIM::user_info", XS_GAIM_user_info, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
152 newXS ("GAIM::print_to_conv", XS_GAIM_print_to_conv, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
153 newXS ("GAIM::print_to_chat", XS_GAIM_print_to_chat, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
154 newXS ("GAIM::serv_send_im", XS_GAIM_serv_send_im, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
155
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
156 newXS ("GAIM::add_event_handler", XS_GAIM_add_event_handler, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
157 newXS ("GAIM::remove_event_handler", XS_GAIM_remove_event_handler, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
158 newXS ("GAIM::add_timeout_handler", XS_GAIM_add_timeout_handler, "GAIM");
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
159
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
160 newXS ("GAIM::play_sound", XS_GAIM_play_sound, "GAIM");
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
161 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
162
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
163 static char *escape_quotes(char *buf)
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
164 {
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
165 static char *tmp_buf = NULL;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
166 char *i, *j;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
167
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
168 if (tmp_buf)
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
169 g_free(tmp_buf);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
170 tmp_buf = g_malloc(strlen(buf) * 2 + 1);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
171 for (i = buf, j = tmp_buf; *i; i++, j++) {
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
172 if (*i == '\'' || *i == '\\')
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
173 *j++ = '\\';
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
174 *j = *i;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
175 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
176 *j = '\0';
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
177
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
178 return (tmp_buf);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
179 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
180
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
181 /*
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
182 2001/06/14: execute_perl replaced by Martin Persson <mep@passagen.se>
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
183 previous use of perl_eval leaked memory, replaced with
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
184 a version that uses perl_call instead
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
185 30/11/2002: execute_perl modified by Eric Timme <timothy@voidnet.com>
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
186 args changed to char** so that we can have preparsed
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
187 arguments again, and many headaches ensued! This essentially
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
188 means we replaced one hacked method with a messier hacked
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
189 method out of perceived necessity. Formerly execute_perl
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
190 required a single char_ptr, and it would insert it into an
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
191 array of character pointers and NULL terminate the new array.
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
192 Now we have to pass in pre-terminated character pointer arrays
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
193 to accomodate functions that want to pass in multiple arguments.
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
194
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
195 Previously arguments were preparsed because an argument list
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
196 was constructed in the form 'arg one','arg two' and was
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
197 executed via a call like &funcname(arglist) (see .59.x), so
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
198 the arglist was magically pre-parsed because of the method.
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
199 With Martin Persson's change to perl_call we now need to
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
200 use a null terminated list of character pointers for arguments
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
201 if we wish them to be parsed. Lacking a better way to allow
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
202 for both single arguments and many I created a NULL terminated
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
203 array in every function that called execute_perl and passed
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
204 that list into the function. In the former version a single
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
205 character pointer was passed in, and was placed into an array
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
206 of character pointers with two elements, with a NULL element
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
207 tacked onto the back, but this method no longer seemed prudent.
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
208
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
209 Enhancements in the future might be to get rid of pre-declaring
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
210 the array sizes? I am not comfortable enough with this
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
211 subject to attempt it myself and hope it to stand the test
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
212 of time.
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
213 */
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
214
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
215 static int
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
216 execute_perl(char *function, char **args)
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
217 {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
218 char buf[512];
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
219 int count, ret_value = 1;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
220 SV *sv;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
221
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
222 dSP;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
223 ENTER;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
224 SAVETMPS;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
225 PUSHMARK(sp);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
226 count = perl_call_argv(function, G_EVAL | G_SCALAR, args);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
227 SPAGAIN;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
228
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
229 sv = GvSV(gv_fetchpv("@", TRUE, SVt_PV));
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
230 if (SvTRUE(sv)) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
231 g_snprintf(buf, 512, "Perl error: %s\n", SvPV(sv, count));
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
232 debug_printf(buf);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
233 POPs;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
234 } else if (count != 1) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3573
diff changeset
235 g_snprintf(buf, 512, "Perl error: expected 1 value from %s, "
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
236 "got: %d\n", function, count);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
237 debug_printf(buf);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
238 } else {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
239 ret_value = POPi;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
240 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
241
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
242 PUTBACK;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
243 FREETMPS;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
244 LEAVE;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
245
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
246 return ret_value;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
247
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
248 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
249
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
250 void perl_unload_file(struct gaim_plugin *plug) {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
251 char *atmp[2] = { "", NULL }; /* see execute_perl --et */
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
252 struct perlscript *scp = NULL;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
253 struct _perl_timeout_handlers *thn;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
254 struct _perl_event_handlers *ehn;
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
255
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
256 GList *pl = perl_list;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
257
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
258 debug_printf("Unloading %s\n", plug->handle);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
259 while (pl) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
260 scp = pl->data;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
261 if (scp->plug == plug) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
262 perl_list = g_list_remove(perl_list, scp);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
263 if (scp->shutdowncallback[0])
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
264 execute_perl(scp->shutdowncallback, atmp);
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
265 g_free(scp->name);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
266 g_free(scp->version);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
267 g_free(scp->shutdowncallback);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
268 g_free(scp);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
269 break;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
270 }
4088
97003c0ef184 [gaim-migrate @ 4303]
Mark Doliner <mark@kingant.net>
parents: 4050
diff changeset
271 pl = pl->next;
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
272 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
273
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
274 pl = perl_timeout_handlers;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
275 while (pl) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
276 thn = pl->data;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
277 if (thn && thn->plug == plug) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
278 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, thn);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
279 g_source_remove(thn->iotag);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
280 g_free(thn->handler_args);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
281 g_free(thn->handler_name);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
282 g_free(thn);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
283 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
284 pl = pl->next;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
285 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
286
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
287 pl = perl_event_handlers;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
288 while (pl) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
289 ehn = pl->data;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
290 if (ehn && ehn->plug == plug) {
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
291 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
292 g_free(ehn->event_type);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
293 g_free(ehn->handler_name);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
294 g_free(ehn);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
295 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
296 pl = pl->next;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
297 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
298
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
299 plug->handle=NULL;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
300 plugins = g_list_remove(plugins, plug);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
301 save_prefs();
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
302 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
303
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
304 int perl_load_file(char *script_name)
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
305 {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
306 char *atmp[2] = { script_name, NULL }; /* see execute_perl --et */
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
307 struct gaim_plugin *plug;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
308 GList *p = probed_plugins;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
309 GList *s;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
310 struct perlscript *scp;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
311 int ret;
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
312
2329
a6d0edc31554 [gaim-migrate @ 2339]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2261
diff changeset
313 if (my_perl == NULL)
a6d0edc31554 [gaim-migrate @ 2339]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2261
diff changeset
314 perl_init();
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
315
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
316 while (p) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
317 plug = (struct gaim_plugin *)p->data;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
318 if (!strcmp(script_name, plug->path))
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
319 break;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
320 p = p->next;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
321 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
322
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
323 if (!plug) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
324 probe_perl(script_name);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
325 }
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
326
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
327 plug->handle = plug->path;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
328 plugins = g_list_append(plugins, plug);
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
329
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
330 ret = execute_perl("load_n_eval", atmp);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
331
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
332 s = perl_list;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
333 while (s) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
334 scp = s->data;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
335
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
336 if (!strcmp(scp->name, plug->desc.name) &&
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
337 !strcmp(scp->version, plug->desc.version))
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
338 break;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
339 s = s->next;
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
340 }
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
341
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
342 if (!s) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
343 g_snprintf(plug->error, sizeof(plug->error), _("GAIM::register not called with proper arguments. Consult PERL-HOWTO."));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
344 return 0;
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
345 }
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
346
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
347 plug->error[0] = '\0';
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
348 return ret;
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
349 }
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
350
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
351 struct gaim_plugin *probe_perl(const char *filename) {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
352
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
353 /* XXX This woulld be much faster if I didn't create a new
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
354 * PerlInterpreter every time I probed a plugin */
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
355
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
356 PerlInterpreter *prober = perl_alloc();
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
357 struct gaim_plugin * plug = NULL;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
358 char *argv[] = {"", filename};
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
359 int count;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
360 perl_construct(prober);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
361 perl_parse(prober, NULL, 2, argv, NULL);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
362
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
363 {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
364 dSP;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
365 ENTER;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
366 SAVETMPS;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
367 PUSHMARK(SP);
3556
4d70a24c0fd6 [gaim-migrate @ 3646]
Sean Egan <seanegan@gmail.com>
parents: 3551
diff changeset
368
4d70a24c0fd6 [gaim-migrate @ 3646]
Sean Egan <seanegan@gmail.com>
parents: 3551
diff changeset
369 count = perl_call_pv("description", G_NOARGS | G_ARRAY | G_EVAL);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
370 SPAGAIN;
3556
4d70a24c0fd6 [gaim-migrate @ 3646]
Sean Egan <seanegan@gmail.com>
parents: 3551
diff changeset
371 if (count == (sizeof(struct gaim_plugin_description) - sizeof(int)) / sizeof(char*)) {
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
372 plug = g_new0(struct gaim_plugin, 1);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
373 plug->type = perl_script;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
374 g_snprintf(plug->path, sizeof(plug->path), filename);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
375 plug->desc.iconfile = g_strdup(POPp);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
376 plug->desc.url = g_strdup(POPp);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
377 plug->desc.authors = g_strdup(POPp);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
378 plug->desc.description = g_strdup(POPp);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
379 plug->desc.version = g_strdup(POPp);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
380 plug->desc.name = g_strdup(POPp);
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
381 }
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
382
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
383 PUTBACK;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
384 FREETMPS;
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
385 LEAVE;
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
386 }
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
387 perl_destruct(prober);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
388 perl_free(prober);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
389 return plug;
800
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
390 }
022048cde898 [gaim-migrate @ 810]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 799
diff changeset
391
2329
a6d0edc31554 [gaim-migrate @ 2339]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2261
diff changeset
392 static void perl_init()
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
393 { /*changed the name of the variable from load_file to
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
394 perl_definitions since now it does much more than defining
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
395 the load_file sub. Moreover, deplaced the initialisation to
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
396 the xs_init function. (TheHobbit)*/
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
397 char *perl_args[] = { "", "-e", "0", "-w" };
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
398 char perl_definitions[] =
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
399 {
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
400 /* We use to function one to load a file the other to
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
401 execute the string obtained from the first and holding
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
402 the file conents. This allows to have a realy local $/
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
403 without introducing temp variables to hold the old
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
404 value. Just a question of style:) */
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
405 "sub load_file{"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
406 "my $f_name=shift;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
407 "local $/=undef;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
408 "open FH,$f_name or return \"__FAILED__\";"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
409 "$_=<FH>;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
410 "close FH;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
411 "return $_;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
412 "}"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
413 "sub load_n_eval{"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
414 "my $f_name=shift;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
415 "my $strin=load_file($f_name);"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
416 "return 2 if($strin eq \"__FAILED__\");"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
417 "eval $strin;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
418 "if($@){"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
419 /*" #something went wrong\n"*/
4050
9438d2e96cb1 [gaim-migrate @ 4259]
Luke Schierer <lschiere@pidgin.im>
parents: 4029
diff changeset
420 "GAIM::print(\"Errors loading file $f_name:\\n\",\"$@\");"
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
421 "return 1;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
422 "}"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
423 "return 0;"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
424 "}"
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
425 };
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
426
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
427 my_perl = perl_alloc();
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428 perl_construct(my_perl);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
429 #ifdef DEBUG
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
430 perl_parse(my_perl, xs_init, 4, perl_args, NULL);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
431 #else
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
432 perl_parse(my_perl, xs_init, 3, perl_args, NULL);
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
433 #endif
4050
9438d2e96cb1 [gaim-migrate @ 4259]
Luke Schierer <lschiere@pidgin.im>
parents: 4029
diff changeset
434 #ifdef HAVE_PERL_EVAL_PV
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
435 eval_pv(perl_definitions, TRUE);
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
436 #else
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
437 perl_eval_pv(perl_definitions, TRUE); /* deprecated */
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
438 #endif
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
439
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
440
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
441 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
442
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
443 void perl_end()
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
444 {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
445 char *atmp[2] = { "", NULL }; /* see execute_perl --et */
565
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
446 struct perlscript *scp;
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
447 struct _perl_timeout_handlers *thn;
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
448 struct _perl_event_handlers *ehn;
565
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
449
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
450 while (perl_list) {
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
451 scp = perl_list->data;
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
452 perl_list = g_list_remove(perl_list, scp);
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
453 if (scp->shutdowncallback[0])
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
454 execute_perl(scp->shutdowncallback, atmp);
565
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
455 g_free(scp->name);
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
456 g_free(scp->version);
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
457 g_free(scp->shutdowncallback);
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
458 g_free(scp);
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
459 }
7209b474bdc3 [gaim-migrate @ 575]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 562
diff changeset
460
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
461 while (perl_timeout_handlers) {
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
462 thn = perl_timeout_handlers->data;
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
463 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, thn);
2370
25e7c2a68ed2 [gaim-migrate @ 2383]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2355
diff changeset
464 g_source_remove(thn->iotag);
2512
bf7ec3874810 [gaim-migrate @ 2525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2511
diff changeset
465 g_free(thn->handler_args);
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
466 g_free(thn->handler_name);
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
467 g_free(thn);
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
468 }
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
469
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
470 while (perl_event_handlers) {
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
471 ehn = perl_event_handlers->data;
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
472 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
473 g_free(ehn->event_type);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
474 debug_printf("handler_name: %s\n", ehn->handler_name);
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
475 g_free(ehn->handler_name);
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
476 g_free(ehn);
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
477 }
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
478
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
479 if (my_perl != NULL) {
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
480 perl_destruct(my_perl);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
481 perl_free(my_perl);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
482 my_perl = NULL;
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
483 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
484 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
485
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
486 XS (XS_GAIM_register)
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
487 {
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
488 char *name, *ver, *callback, *unused; /* exactly like X-Chat, eh? :) */
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
489 unsigned int junk;
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
490 struct perlscript *scp;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
491 struct gaim_plugin *plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
492 GList *pl = plugins;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
493
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
494 dXSARGS;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
495 items = 0;
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
496
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
497 name = SvPV (ST (0), junk);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
498 ver = SvPV (ST (1), junk);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
499 callback = SvPV (ST (2), junk);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
500 unused = SvPV (ST (3), junk);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
501
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
502 while (pl) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
503 plug = pl->data;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
504
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
505 if (!strcmp(name, plug->desc.name) &&
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
506 !strcmp(ver, plug->desc.version)) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
507 break;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
508 }
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
509 pl = pl->next;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
510 }
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
511
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
512 if (plug) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
513 scp = g_new0(struct perlscript, 1);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
514 scp->name = g_strdup(name);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
515 scp->version = g_strdup(ver);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
516 scp->shutdowncallback = g_strdup(callback);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
517 scp->plug = plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
518 perl_list = g_list_append(perl_list, scp);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
519 }
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
520 XST_mPV (0, plug->path);
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
521 XSRETURN (1);
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
522 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
523
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
524 XS (XS_GAIM_get_info)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
525 {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
526 int i = 0;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
527 dXSARGS;
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
528 items = 0;
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
529
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
530 switch(SvIV(ST(0))) {
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
531 case 0:
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
532 XST_mPV(0, VERSION);
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
533 i = 1;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
534 break;
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
535 case 1:
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
536 {
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
537 GSList *c = connections;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
538 struct gaim_connection *gc;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
539
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
540 while (c) {
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
541 gc = (struct gaim_connection *)c->data;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
542 XST_mIV(i++, (guint)gc);
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
543 c = c->next;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
544 }
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
545 }
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
546 break;
591
a26eb4c472d8 [gaim-migrate @ 601]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 590
diff changeset
547 case 2:
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
548 {
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
549 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
550 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
551 XST_mIV(i++, gc->protocol);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
552 else
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
553 XST_mIV(i++, -1);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
554 }
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
555 break;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
556 case 3:
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
557 {
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
558 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
559 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
560 XST_mPV(i++, gc->username);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
561 else
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
562 XST_mPV(i++, "");
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
563 }
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
564 break;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
565 case 4:
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
566 {
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
567 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
568 if (g_slist_find(connections, gc))
2397
520257562955 [gaim-migrate @ 2410]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2370
diff changeset
569 XST_mIV(i++, g_slist_index(aim_users, gc->user));
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
570 else
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
571 XST_mIV(i++, -1);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
572 }
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
573 break;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
574 case 5:
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
575 {
2397
520257562955 [gaim-migrate @ 2410]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2370
diff changeset
576 GSList *a = aim_users;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
577 while (a) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
578 struct aim_user *u = a->data;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
579 XST_mPV(i++, u->username);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
580 a = a->next;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
581 }
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
582 }
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
583 break;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
584 case 6:
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
585 {
2397
520257562955 [gaim-migrate @ 2410]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2370
diff changeset
586 GSList *a = aim_users;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
587 while (a) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
588 struct aim_user *u = a->data;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
589 XST_mIV(i++, u->protocol);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
590 a = a->next;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
591 }
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
592 }
591
a26eb4c472d8 [gaim-migrate @ 601]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 590
diff changeset
593 break;
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
594 case 7:
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
595 {
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
596 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
597 if (g_slist_find(connections, gc))
3572
bdd0bebd2d04 [gaim-migrate @ 3670]
Sean Egan <seanegan@gmail.com>
parents: 3563
diff changeset
598 XST_mPV(i++, gc->prpl->name);
2355
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
599 else
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
600 XST_mPV(i++, "Unknown");
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
601 }
571971659533 [gaim-migrate @ 2368]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2345
diff changeset
602 break;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
603 default:
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
604 XST_mPV(0, "Error2");
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
605 i = 1;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
606 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
607
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
608 XSRETURN(i);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
609 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
610
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
611 XS (XS_GAIM_print)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
612 {
592
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
613 char *title;
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
614 char *message;
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
615 unsigned int junk;
592
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
616 dXSARGS;
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
617 items = 0;
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
618
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
619 title = SvPV(ST(0), junk);
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
620 message = SvPV(ST(1), junk);
3551
cd938f18f3f8 [gaim-migrate @ 3626]
Sean Egan <seanegan@gmail.com>
parents: 3517
diff changeset
621 do_error_dialog(title, message, GAIM_INFO);
592
7c75d69a1129 [gaim-migrate @ 602]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 591
diff changeset
622 XSRETURN(0);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
623 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
624
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
625 XS (XS_GAIM_buddy_list)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
626 {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
627 struct gaim_connection *gc;
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
628 struct buddy *buddy;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
629 struct group *g;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
630 GSList *list = NULL;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
631 GSList *mem;
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
632 int i = 0;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
633 dXSARGS;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
634 items = 0;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
635
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
636 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
637 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
638 list = gc->groups;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
639
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
640 while (list) {
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
641 g = (struct group *)list->data;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
642 mem = g->members;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
643 while (mem) {
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
644 buddy = (struct buddy *)mem->data;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
645 XST_mPV(i++, buddy->name);
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
646 mem = mem->next;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
647 }
940
9fca1293f871 [gaim-migrate @ 950]
Rob Flynn <gaim@robflynn.com>
parents: 905
diff changeset
648 list = g_slist_next(list);
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
649 }
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
650 XSRETURN(i);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
651 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
652
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
653 XS (XS_GAIM_online_list)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
654 {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
655 struct gaim_connection *gc;
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
656 struct buddy *b;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
657 struct group *g;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
658 GSList *list = NULL;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
659 GSList *mem;
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
660 int i = 0;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
661 dXSARGS;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
662 items = 0;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
663
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
664 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
665 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
666 list = gc->groups;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
667
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
668 while (list) {
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
669 g = (struct group *)list->data;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
670 mem = g->members;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
671 while (mem) {
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
672 b = (struct buddy *)mem->data;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
673 if (b->present) XST_mPV(i++, b->name);
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
674 mem = mem->next;
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
675 }
940
9fca1293f871 [gaim-migrate @ 950]
Rob Flynn <gaim@robflynn.com>
parents: 905
diff changeset
676 list = g_slist_next(list);
581
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
677 }
c72e5ee07d0a [gaim-migrate @ 591]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 580
diff changeset
678 XSRETURN(i);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
679 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
680
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
681 XS (XS_GAIM_command)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
682 {
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
683 unsigned int junk;
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
684 char *command = NULL;
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
685 dXSARGS;
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
686 items = 0;
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
687
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
688 command = SvPV(ST(0), junk);
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
689 if (!command) XSRETURN(0);
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
690 if (!strncasecmp(command, "signon", 6)) {
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
691 int index = SvIV(ST(1));
2397
520257562955 [gaim-migrate @ 2410]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2370
diff changeset
692 if (g_slist_nth_data(aim_users, index))
520257562955 [gaim-migrate @ 2410]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2370
diff changeset
693 serv_login(g_slist_nth_data(aim_users, index));
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
694 } else if (!strncasecmp(command, "signoff", 7)) {
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
695 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
696 if (g_slist_find(connections, gc)) signoff(gc);
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
697 else signoff_all(NULL, NULL);
1730
2d7601acacdd [gaim-migrate @ 1740]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1250
diff changeset
698 } else if (!strncasecmp(command, "info", 4)) {
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
699 struct gaim_connection *gc = (struct gaim_connection *)SvIV(ST(1));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
700 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
701 serv_set_info(gc, SvPV(ST(2), junk));
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
702 } else if (!strncasecmp(command, "away", 4)) {
630
3d2f14064083 [gaim-migrate @ 640]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 628
diff changeset
703 char *message = SvPV(ST(1), junk);
1106
5bc8fdacd2cb [gaim-migrate @ 1116]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1101
diff changeset
704 static struct away_message a;
630
3d2f14064083 [gaim-migrate @ 640]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 628
diff changeset
705 g_snprintf(a.message, sizeof(a.message), "%s", message);
3d2f14064083 [gaim-migrate @ 640]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 628
diff changeset
706 do_away_message(NULL, &a);
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
707 } else if (!strncasecmp(command, "back", 4)) {
628
a46a68d46d2b [gaim-migrate @ 638]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 603
diff changeset
708 do_im_back();
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
709 } else if (!strncasecmp(command, "idle", 4)) {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
710 GSList *c = connections;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
711 struct gaim_connection *gc;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
712
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
713 while (c) {
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
714 gc = (struct gaim_connection *)c->data;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
715 serv_set_idle(gc, SvIV(ST(1)));
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
716 c = c->next;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
717 }
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
718 } else if (!strncasecmp(command, "warn", 4)) {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
719 GSList *c = connections;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
720 struct gaim_connection *gc;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
721
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
722 while (c) {
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
723 gc = (struct gaim_connection *)c->data;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
724 serv_warn(gc, SvPV(ST(1), junk), SvIV(ST(2)));
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
725 c = c->next;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
726 }
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
727 }
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
728
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
729 XSRETURN(0);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
730 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
731
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
732 XS (XS_GAIM_user_info)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
733 {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
734 struct gaim_connection *gc;
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
735 unsigned int junk;
1114
c61f9c384413 [gaim-migrate @ 1124]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1106
diff changeset
736 struct buddy *buddy = NULL;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
737 dXSARGS;
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
738 items = 0;
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
739
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
740 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
741 if (g_slist_find(connections, gc))
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
742 buddy = find_buddy(gc, SvPV(ST(1), junk));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
743
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
744 if (!buddy)
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
745 XSRETURN(0);
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
746 XST_mPV(0, buddy->name);
4227
a614423c648f [gaim-migrate @ 4471]
Mark Doliner <mark@kingant.net>
parents: 4088
diff changeset
747 XST_mPV(1, get_buddy_alias(buddy));
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
748 XST_mPV(2, buddy->present ? "Online" : "Offline");
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
749 XST_mIV(3, buddy->evil);
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
750 XST_mIV(4, buddy->signon);
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
751 XST_mIV(5, buddy->idle);
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
752 XST_mIV(6, buddy->uc);
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
753 XST_mIV(7, buddy->caps);
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
754 XSRETURN(8);
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
755 }
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
756
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
757 XS (XS_GAIM_write_to_conv)
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
758 {
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
759 char *nick, *who, *what;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
760 struct conversation *c;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
761 int junk;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
762 int send, wflags;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
763 dXSARGS;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
764 items = 0;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
765
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
766 nick = SvPV(ST(0), junk);
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
767 send = SvIV(ST(1));
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
768 what = SvPV(ST(2), junk);
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
769 who = SvPV(ST(3), junk);
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
770
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
771 if (!*who) who=NULL;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
772
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
773 switch (send) {
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
774 case 0: wflags=WFLAG_SEND; break;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
775 case 1: wflags=WFLAG_RECV; break;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
776 case 2: wflags=WFLAG_SYSTEM; break;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
777 default: wflags=WFLAG_RECV;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
778 }
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
779
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
780 c = find_conversation(nick);
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
781 if (!c)
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
782 c = new_conversation(nick);
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
783
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2712
diff changeset
784 write_to_conv(c, what, wflags, who, time(NULL), -1);
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
785 XSRETURN(0);
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
786 }
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
787
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
788 XS (XS_GAIM_serv_send_im)
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
789 {
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
790 struct gaim_connection *gc;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
791 char *nick, *what;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
792 int isauto;
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
793 int junk;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
794 dXSARGS;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
795 items = 0;
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
796
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
797 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
798 nick = SvPV(ST(1), junk);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
799 what = SvPV(ST(2), junk);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
800 isauto = SvIV(ST(3));
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
801
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
802 if (!g_slist_find(connections, gc)) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
803 XSRETURN(0);
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
804 return;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
805 }
3033
1143524a2eaf [gaim-migrate @ 3046]
Sean Egan <seanegan@gmail.com>
parents: 2856
diff changeset
806 serv_send_im(gc, nick, what, -1, isauto);
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
807 XSRETURN(0);
2261
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
808 }
e243bf60f2d6 [gaim-migrate @ 2271]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2231
diff changeset
809
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
810 XS (XS_GAIM_print_to_conv)
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
811 {
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
812 struct gaim_connection *gc;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
813 char *nick, *what;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
814 int isauto;
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
815 struct conversation *c;
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
816 unsigned int junk;
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
817 dXSARGS;
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
818 items = 0;
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
819
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
820 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
821 nick = SvPV(ST(1), junk);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
822 what = SvPV(ST(2), junk);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
823 isauto = SvIV(ST(3));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
824 if (!g_slist_find(connections, gc)) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
825 XSRETURN(0);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
826 return;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
827 }
597
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
828 c = find_conversation(nick);
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
829 if (!c)
3a24fd19ff5f [gaim-migrate @ 607]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 592
diff changeset
830 c = new_conversation(nick);
2488
e87e4a9e6566 [gaim-migrate @ 2501]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2397
diff changeset
831 set_convo_gc(c, gc);
2856
b1e300a85678 [gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2712
diff changeset
832 write_to_conv(c, what, WFLAG_SEND | (isauto ? WFLAG_AUTO : 0), NULL, time(NULL), -1);
3033
1143524a2eaf [gaim-migrate @ 3046]
Sean Egan <seanegan@gmail.com>
parents: 2856
diff changeset
833 serv_send_im(c->gc, nick, what, -1, isauto ? IM_FLAG_AWAY : 0);
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
834 XSRETURN(0);
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
835 }
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
836
3280
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
837
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
838
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
839 XS (XS_GAIM_print_to_chat)
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
840 {
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
841 struct gaim_connection *gc;
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
842 int id;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
843 char *what;
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
844 struct conversation *b = NULL;
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
845 GSList *bcs;
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
846 unsigned int junk;
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
847 dXSARGS;
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
848 items = 0;
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
849
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
850 gc = (struct gaim_connection *)SvIV(ST(0));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
851 id = SvIV(ST(1));
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
852 what = SvPV(ST(2), junk);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
853
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
854 if (!g_slist_find(connections, gc)) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
855 XSRETURN(0);
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
856 return;
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
857 }
2345
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
858 bcs = gc->buddy_chats;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
859 while (bcs) {
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
860 b = (struct conversation *)bcs->data;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
861 if (b->id == id)
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
862 break;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
863 bcs = bcs->next;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
864 b = NULL;
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
865 }
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
866 if (b)
a49e8f1afbc4 [gaim-migrate @ 2358]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2329
diff changeset
867 serv_chat_send(gc, id, what);
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
868 XSRETURN(0);
603
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
869 }
9b0717b4a490 [gaim-migrate @ 613]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 597
diff changeset
870
3517
6b0cb60162f4 [gaim-migrate @ 3590]
Sean Egan <seanegan@gmail.com>
parents: 3510
diff changeset
871 int perl_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4, void *arg5)
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
872 {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
873 /* changing buf to an array of char pointers so we get @_ back in
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
874 * order; basically scrapping legacy code in favor of blocky
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
875 * unimaginative code. Additionally, assigned values one at a time
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
876 * for the sake of clarity. --Eric Timme (30 November 2002) */
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
877
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
878 char *buf[5] = { NULL, NULL, NULL, NULL, NULL };
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
879 /* 5 for max 4 arguments =\ Note, if you change the above,
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
880 * change the two loops at the bottom that free up memory */
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
881
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
882 GList *handler;
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
883 struct _perl_event_handlers *data;
1100
f168625b63fe [gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1030
diff changeset
884 SV *handler_return;
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
885 int i=0; /* necessary counter variable? --et */
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
886
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
887 switch (event) {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
888 case event_signon:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
889 case event_signoff:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
890 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
891 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
892 case event_away:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
893 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
894 buf[1] = g_strdup_printf("%s",
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
895 ((struct gaim_connection *)arg1)->away ?
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
896 escape_quotes(((struct gaim_connection *)arg1)->away) : "");
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
897 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
898 case event_im_recv:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
899 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
900 char *tmp = *(char **)arg2 ? g_strdup(escape_quotes(*(char **)arg2)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
901 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
902 buf[1] = g_strdup_printf("%s", tmp);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
903 buf[2] = g_strdup_printf("%s",
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
904 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
905 g_free(tmp);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
906 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
907 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
908 case event_im_send:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
909 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
910 char *tmp = arg2 ? g_strdup(escape_quotes(arg2)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
911 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
912 buf[1] = g_strdup_printf("%s", tmp);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
913 buf[2] = g_strdup_printf("%s",
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
914 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
915 g_free(tmp);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
916 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
917 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
918 case event_buddy_signon:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
919 case event_buddy_signoff:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
920 case event_set_info:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
921 case event_buddy_away:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
922 case event_buddy_back:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
923 case event_buddy_idle:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
924 case event_buddy_unidle:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
925 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
926 buf[1] = g_strdup_printf("%s", escape_quotes(arg2));
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
927 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
928 case event_chat_invited:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
929 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
930 char *tmp2, *tmp3, *tmp4;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
931 tmp2 = g_strdup(escape_quotes(arg2));
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
932 tmp3 = g_strdup(escape_quotes(arg3));
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
933 tmp4 = arg4 ? g_strdup(escape_quotes(arg4)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
934 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
935 buf[1] = g_strdup_printf("%s", tmp2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
936 buf[2] = g_strdup_printf("%s", tmp3);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
937 buf[3] = g_strdup_printf("%s", tmp4);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
938 g_free(tmp2);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
939 g_free(tmp3);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
940 g_free(tmp4);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
941 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
942 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
943 case event_chat_join:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
944 case event_chat_buddy_join:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
945 case event_chat_buddy_leave:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
946 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
947 buf[1] = g_strdup_printf("%d", (int)arg2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
948 buf[2] = g_strdup_printf("%s", escape_quotes(arg3));
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
949 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
950 case event_chat_leave:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
951 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
952 buf[1] = g_strdup_printf("%d", (int)arg2);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
953 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
954 case event_chat_recv:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
955 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
956 char *t3, *t4;
3167
dab4da8ca29a [gaim-migrate @ 3183]
Sean Egan <seanegan@gmail.com>
parents: 3166
diff changeset
957 t3 = g_strdup(escape_quotes(*(char **)arg3));
dab4da8ca29a [gaim-migrate @ 3183]
Sean Egan <seanegan@gmail.com>
parents: 3166
diff changeset
958 t4 = *(char **)arg4 ? g_strdup(escape_quotes(*(char **)arg4)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
959 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
960 buf[1] = g_strdup_printf("%d", (int)arg2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
961 buf[2] = g_strdup_printf("%s", t3);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
962 buf[3] = g_strdup_printf("%s", t4);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
963 g_free(t3);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
964 g_free(t4);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
965 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
966 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
967 case event_chat_send_invite:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
968 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
969 char *t3, *t4;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
970 t3 = g_strdup(escape_quotes(arg3));
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
971 t4 = *(char **)arg4 ? g_strdup(escape_quotes(*(char **)arg4)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
972 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
973 buf[1] = g_strdup_printf("%d", (int)arg2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
974 buf[2] = g_strdup_printf("%s", t3);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
975 buf[3] = g_strdup_printf("%s", t4);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
976 g_free(t3);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
977 g_free(t4);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
978 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
979 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
980 case event_chat_send:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
981 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
982 buf[1] = g_strdup_printf("%d", (int)arg2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
983 buf[2] = g_strdup_printf("%s",
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
984 *(char **)arg3 ? escape_quotes(*(char **)arg3) : "");
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
985 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
986 case event_warned:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
987 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
988 buf[1] = g_strdup_printf("%s", arg2 ? escape_quotes(arg2) : "");
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
989 buf[2] = g_strdup_printf("%d", (int)arg3);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
990 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
991 case event_quit:
3517
6b0cb60162f4 [gaim-migrate @ 3590]
Sean Egan <seanegan@gmail.com>
parents: 3510
diff changeset
992 case event_blist_update:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
993 buf[0] = g_malloc0(1);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
994 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
995 case event_new_conversation:
3510
e23909729192 [gaim-migrate @ 3576]
Sean Egan <seanegan@gmail.com>
parents: 3456
diff changeset
996 case event_del_conversation:
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
997 buf[0] = g_strdup_printf("%s", escape_quotes(arg1));
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
998 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
999 case event_im_displayed_sent:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1000 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1001 char *tmp2, *tmp3;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1002 tmp2 = g_strdup(escape_quotes(arg2));
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1003 tmp3 = *(char **)arg3 ? g_strdup(escape_quotes(*(char **)arg3)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1004 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1005 buf[1] = g_strdup_printf("%s", tmp2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1006 buf[2] = g_strdup_printf("%s", tmp3);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1007 g_free(tmp2);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1008 g_free(tmp3);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1009 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1010 break;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1011 case event_im_displayed_rcvd:
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1012 {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1013 char *tmp2, *tmp3;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1014 tmp2 = g_strdup(escape_quotes(arg2));
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1015 tmp3 = arg3 ? g_strdup(escape_quotes(arg3)) : g_malloc0(1);
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1016 buf[0] = g_strdup_printf("%lu", (unsigned long)arg1);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1017 buf[1] = g_strdup_printf("%s", tmp2);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1018 buf[2] = g_strdup_printf("%s", tmp3);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1019 g_free(tmp2);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1020 g_free(tmp3);
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1021 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1022 break;
3517
6b0cb60162f4 [gaim-migrate @ 3590]
Sean Egan <seanegan@gmail.com>
parents: 3510
diff changeset
1023 case event_draw_menu:
6b0cb60162f4 [gaim-migrate @ 3590]
Sean Egan <seanegan@gmail.com>
parents: 3510
diff changeset
1024 /* we can't handle this usefully without gtk/perl bindings */
6b0cb60162f4 [gaim-migrate @ 3590]
Sean Egan <seanegan@gmail.com>
parents: 3510
diff changeset
1025 return 0;
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1026 default:
3510
e23909729192 [gaim-migrate @ 3576]
Sean Egan <seanegan@gmail.com>
parents: 3456
diff changeset
1027 debug_printf("someone forgot to handle %s in the perl binding\n", event_name(event));
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1028 return 0;
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1029 }
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1030
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1031 for (handler = perl_event_handlers; handler != NULL; handler = handler->next) {
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1032 data = handler->data;
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1033 if (!strcmp(event_name(event), data->event_type)) {
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1034 handler_return = execute_perl(data->handler_name, buf);
3573
163205125ee2 [gaim-migrate @ 3671]
Sean Egan <seanegan@gmail.com>
parents: 3572
diff changeset
1035 if (handler_return) {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1036 /* loop to try and free up memory from the
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1037 * char pointer array? --et */
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1038 for (i=0;i<5;i++)
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1039 if (buf[i])
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1040 g_free(buf[i]);
3573
163205125ee2 [gaim-migrate @ 3671]
Sean Egan <seanegan@gmail.com>
parents: 3572
diff changeset
1041 return handler_return;
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1042 }
1100
f168625b63fe [gaim-migrate @ 1110]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1030
diff changeset
1043 }
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1044 }
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1045
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1046 /* loop to try and free up memory from the
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1047 * char pointer array? --et */
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1048 for (i=0;i<5;i++)
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1049 if (buf[i])
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1050 g_free(buf[i]);
2511
a83b4a5ffcd6 [gaim-migrate @ 2524]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2488
diff changeset
1051
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1052 return 0;
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1053 }
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1054
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
1055 XS (XS_GAIM_add_event_handler)
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1056 {
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
1057 unsigned int junk;
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1058 struct _perl_event_handlers *handler;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1059 char *handle;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1060 struct gaim_plugin *plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1061 GList *p = plugins;
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1062 dXSARGS;
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1063 items = 0;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1064
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1065 handle = SvPV(ST(0), junk);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1066 while (p) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1067 plug = p->data;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1068 if (!strcmp(handle, plug->path))
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1069 break;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1070 p = p->next;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1071 }
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1072
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1073 if (p) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1074 handler = g_new0(struct _perl_event_handlers, 1);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1075 handler->event_type = g_strdup(SvPV(ST(1), junk));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1076 handler->handler_name = g_strdup(SvPV(ST(2), junk));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1077 handler->plug = plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1078 perl_event_handlers = g_list_append(perl_event_handlers, handler);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1079 debug_printf("registered perl event handler for %s\n", handler->event_type);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1080 } else {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1081 debug_printf("Invalid handle (%s) registering perl event handler\n", handle);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1082 }
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1083
780
c714def9cebb [gaim-migrate @ 790]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 749
diff changeset
1084 XSRETURN_EMPTY;
579
7b501c39a6ee [gaim-migrate @ 589]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 577
diff changeset
1085 }
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
1086
3456
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1087 XS (XS_GAIM_remove_event_handler)
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1088 {
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1089 unsigned int junk;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1090 struct _perl_event_handlers *ehn;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1091 GList *cur = perl_event_handlers;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1092 dXSARGS;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1093
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1094 while (cur) {
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1095 GList *next = cur->next;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1096 ehn = cur->data;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1097
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1098 if (!strcmp(ehn->event_type, SvPV(ST(0), junk)) &&
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1099 !strcmp(ehn->handler_name, SvPV(ST(1), junk)))
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1100 {
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1101 perl_event_handlers = g_list_remove(perl_event_handlers, ehn);
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1102 g_free(ehn->event_type);
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1103 g_free(ehn->handler_name);
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1104 g_free(ehn);
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1105 }
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1106
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1107 cur = next;
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1108 }
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1109 }
b48065e52337 [gaim-migrate @ 3503]
Sean Egan <seanegan@gmail.com>
parents: 3427
diff changeset
1110
2370
25e7c2a68ed2 [gaim-migrate @ 2383]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2355
diff changeset
1111 static int perl_timeout(gpointer data)
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1112 {
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1113 char *atmp[2] = { NULL, NULL }; /* see execute_perl --et */
2370
25e7c2a68ed2 [gaim-migrate @ 2383]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2355
diff changeset
1114 struct _perl_timeout_handlers *handler = data;
4029
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1115
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1116 atmp[0] = escape_quotes(handler->handler_args);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1117 execute_perl(handler->handler_name, atmp);
31480901bf29 [gaim-migrate @ 4233]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
1118
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1119 perl_timeout_handlers = g_list_remove(perl_timeout_handlers, handler);
2512
bf7ec3874810 [gaim-migrate @ 2525]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2511
diff changeset
1120 g_free(handler->handler_args);
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1121 g_free(handler->handler_name);
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1122 g_free(handler);
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1123
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1124 return 0; /* returning zero removes the timeout handler */
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1125 }
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1126
1101
0ef4386edc29 [gaim-migrate @ 1111]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1100
diff changeset
1127 XS (XS_GAIM_add_timeout_handler)
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
1128 {
2048
3366311426df [gaim-migrate @ 2058]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 1949
diff changeset
1129 unsigned int junk;
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1130 long timeout;
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1131 struct _perl_timeout_handlers *handler;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1132 char *handle;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1133 struct gaim_plugin *plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1134 GList *p = plugins;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1135
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1136 dXSARGS;
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1137 items = 0;
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1138
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1139 handle = SvPV(ST(0), junk);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1140 while (p) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1141 plug = p->data;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1142 if (!strcmp(handle, plug->path))
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1143 break;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1144 p = p->next;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1145 }
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1146
3563
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1147 if (p) {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1148 handler = g_new0(struct _perl_timeout_handlers, 1);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1149 timeout = 1000 * SvIV(ST(1));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1150 debug_printf("Adding timeout for %d seconds.\n", timeout/1000);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1151 handler->plug = plug;
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1152 handler->handler_name = g_strdup(SvPV(ST(2), junk));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1153 handler->handler_args = g_strdup(SvPV(ST(3), junk));
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1154 perl_timeout_handlers = g_list_append(perl_timeout_handlers, handler);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1155 handler->iotag = g_timeout_add(timeout, perl_timeout, handler);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1156 } else {
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1157 debug_printf("Invalid handle (%s) in adding perl timeout handler.", handle);
e120097bbd72 [gaim-migrate @ 3658]
Sean Egan <seanegan@gmail.com>
parents: 3556
diff changeset
1158 }
573
9566a53cde23 [gaim-migrate @ 583]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 565
diff changeset
1159 XSRETURN_EMPTY;
561
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
1160 }
9b36c91cce26 [gaim-migrate @ 571]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 560
diff changeset
1161
3280
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1162 XS (XS_GAIM_play_sound)
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1163 {
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1164 int id;
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1165 dXSARGS;
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1166
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1167 id = SvIV(ST(0));
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1168
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1169 play_sound(id);
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1170
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1171 XSRETURN_EMPTY;
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1172 }
c98c1e0281ff [gaim-migrate @ 3298]
Sean Egan <seanegan@gmail.com>
parents: 3167
diff changeset
1173
2370
25e7c2a68ed2 [gaim-migrate @ 2383]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2355
diff changeset
1174 extern void unload_perl_scripts()
798
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
1175 {
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
1176 perl_end();
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
1177 perl_init();
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
1178 }
9dc39872e1f9 [gaim-migrate @ 808]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 797
diff changeset
1179
799
72f8ac951c11 [gaim-migrate @ 809]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 798
diff changeset
1180
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1181 #endif /* USE_PERL */