2 * Thrasher Bird - XMPP transport via libpurple
3 * Copyright (C) 2008 Barracuda Networks, Inc.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with Thrasher Bird; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
27 %include libpurple
/conversation
.h
33 #include "thconnection.h"
39 Define a typemap that goes from perl hash to a
40 string -> string g_hash_table (that C subsequently owns)
42 Note that contrary to what I'd expect, this is actually keyed
43 off of the C variable name in the incoming function.
46 %typemap(in
) GHashTable
* hash_args
50 croak("$input is not a reference.");
53 if (SvTYPE(SvRV($input
)) != SVt_PVHV
)
55 croak("$input is not a hashref.");
58 $
1 = g_hash_table_new_full(g_str_hash
, g_str_equal
,
61 HV
*hv
= (HV
*)SvRV($input
);
69 while (elt
= hv_iternextsv(hv
, &key
, &len
) )
71 new_value
= SvPV(elt
, strlen
);
72 char *new_key
= g_strdup(key
);
73 new_value
= g_strdup(SvPV(elt
, strlen
));
75 g_hash_table_insert($
1, new_key
, new_value
);
90 #include <sys/types.h>
104 #include "eventloop.h"
106 /* We can't use the Glib macros because they're int-based */
107 #define LONG_TO_PTR(a) (void*) a
108 #define PTR_TO_LONG(a) (long) a
113 typedef struct _perl_callbacks
{
119 SV
*subscription_add
;
120 SV
*legacy_user_add_user
;
121 SV
*connection_error
;
123 SV
*incoming_chatstate
;
126 typedef struct _perl_ft_callbacks
{
127 SV
*ft_recv_request_cb
;
128 SV
*ft_recv_accept_cb
;
129 SV
*ft_recv_start_cb
;
130 SV
*ft_recv_cancel_cb
;
131 SV
*ft_recv_complete_cb
;
132 SV
*ft_send_accept_cb
;
133 SV
*ft_send_start_cb
;
134 SV
*ft_send_cancel_cb
;
135 SV
*ft_send_complete_cb
;
138 SV
*ft_data_not_sent_cb
;
146 typedef struct _hash_record
{
150 /* These values pertain only to type == INPUT_ADD */
151 PurpleInputCondition cond
;
155 /* Push the internal init through */
156 extern void thrasher_init();
158 void thrasher_blist_init();
159 void thrasher_connection_init();
162 int thrasher_action_login (GHashTable
*hash_args
);
163 int thrasher_action_logout (char *jid
);
164 void thrasher_action_debug_logged_in(void);
165 int thrasher_action_outgoing_msg (char *jid
, char *recipient
, char *message
);
166 void thrasher_action_outgoing_chatstate(char *jid
, char *recipient
, PurpleTypingState chatstate
);
167 int thrasher_action_presence (char *jid
, int status
, char *message
);
168 int thrasher_action_buddy_add (char *jid
, char *buddy_name
);
169 int thrasher_action_buddy_remove (char *jid
, char *buddy_name
);
170 void thrasher_action_buddy_authorize(char *jid
, char *legacy_username
);
171 void thrasher_action_buddy_deauthorize(char *jid
, char *legacy_username
);
174 void thrasher_perl_init(void);
175 void thrasher_purple_debug (int tf
);
178 void thrasher_action_ft_ui_ready(size_t id
);
179 void thrasher_action_ft_recv_request_respond(size_t id
, unsigned int accept
);
180 void thrasher_action_ft_cancel_local(size_t id
);
182 /* Perl-end Wrappers */
183 void thrasher_wrapper_init (SV
*timeout_add_cb
,
185 SV
*source_remove_cb
,
188 SV
*subscription_add_cb
,
189 SV
*legacy_user_add_user_cb
,
190 SV
*connection_error_cb
,
192 SV
*incoming_chatstate_cb
);
194 void thrasher_wrapper_ft_init(SV
*ft_recv_request_cb
,
195 SV
*ft_recv_accept_cb
,
196 SV
*ft_recv_start_cb
,
197 SV
*ft_recv_cancel_cb
,
198 SV
*ft_recv_complete_cb
,
199 SV
*ft_send_accept_cb
,
200 SV
*ft_send_start_cb
,
201 SV
*ft_send_cancel_cb
,
202 SV
*ft_send_complete_cb
,
205 SV
*ft_data_not_sent_cb
);
207 int thrasher_wrapper_legacy_user_add_user(const char *jid
,
210 int thrasher_wrapper_subscription_add(const char *jid
,
214 int thrasher_wrapper_incoming_msg (const char *jid
,
217 const char *message
);
219 int thrasher_wrapper_connection (const char *jid
);
221 int thrasher_wrapper_presence_in(const char *jid
,
226 const char * message
);
228 int thrasher_wrapper_connection_error(const char *jid
,
229 const guint error_code
,
230 const char *message
);
232 int thrasher_wrapper_trigger_timeout_func(long key
);
233 int thrasher_wrapper_trigger_input_func(long fd
, SV
*cond
, long key
);
234 void thrasher_wrapper_destructor ();
236 void thrasher_wrapper_incoming_chatstate(PurpleAccount
* pa
, const char* who
, PurpleTypingState state
);
239 int thrasher_wrapper_call_source_remove (long key
);
240 long thrasher_wrapper_set_timeout_add (guint interval
, GSourceFunc function
, gpointer data
);
241 long thrasher_wrapper_set_input_add (guint fd
, PurpleInputCondition cond
, PurpleInputFunction func
, gpointer user_data
);
243 /* File transfer wrappers */
244 size_t thrasher_wrapper_send_file(const char *jid
, const char *who
, char *filename
, size_t size
, char *desc
);
245 int thrasher_wrapper_ft_send_start(guint id
);
246 void thrasher_wrapper_ft_send_cancel(guint id
);
247 void thrasher_wrapper_ft_send_complete(guint id
);
248 gssize
thrasher_wrapper_ft_read(guint id
, guchar
**buffer
, gssize size
);
249 void thrasher_wrapper_ft_data_not_sent(guint id
, const guchar
*buffer
, gsize size
);
250 void thrasher_wrapper_ft_recv_request(PurpleXfer
*xfer
, const char* remote_filename
);
251 gssize
thrasher_wrapper_ft_write(guint id
, const guchar
*buffer
, gssize size
);
252 void thrasher_wrapper_ft_recv_cancel(guint id
);
253 void thrasher_wrapper_ft_recv_complete(guint id
);
256 long thrasher_wrapper_trigger_timeout_add ();
257 long thrasher_wrapper_trigger_timeout_add2 ();
258 long thrasher_wrapper_trigger_timeout_add3 ();
259 int thrasher_wrapper_trigger_timeout_remove (long key
);
260 #endif /* TH_DEBUG */
262 #endif /* THPERL_H */