00001
00026
00027
00028
00029 #ifndef _PURPLE_PRPL_H_
00030 #define _PURPLE_PRPL_H_
00031
00032 typedef struct _PurplePluginProtocolInfo PurplePluginProtocolInfo;
00033
00034
00036
00037
00038 typedef enum {
00039 PURPLE_ICON_SCALE_DISPLAY = 0x01,
00040 PURPLE_ICON_SCALE_SEND = 0x02
00041 } PurpleIconScaleRules;
00042
00043
00049 typedef struct _PurpleBuddyIconSpec PurpleBuddyIconSpec;
00050
00055 #define NO_BUDDY_ICONS {NULL, 0, 0, 0, 0, 0, 0}
00056
00057 #ifdef HAVE_UNISTD_H
00058 #include <unistd.h>
00059 #endif
00060
00061 #include "blist.h"
00062 #include "conversation.h"
00063 #include "ft.h"
00064 #include "imgstore.h"
00065 #include "notify.h"
00066 #include "proxy.h"
00067 #include "plugin.h"
00068 #include "roomlist.h"
00069 #include "status.h"
00070 #include "whiteboard.h"
00071
00072 struct _PurpleBuddyIconSpec {
00073 char *format;
00076 int min_width;
00077 int min_height;
00078 int max_width;
00079 int max_height;
00080 size_t max_filesize;
00081 PurpleIconScaleRules scale_rules;
00082 };
00083
00084 struct proto_chat_entry {
00085 const char *label;
00086 const char *identifier;
00087 gboolean required;
00088 gboolean is_int;
00089 int min;
00090 int max;
00091 gboolean secret;
00092 };
00093
00099 typedef enum
00100 {
00108 OPT_PROTO_UNIQUE_CHATNAME = 0x00000004,
00109
00115 OPT_PROTO_CHAT_TOPIC = 0x00000008,
00116
00123 OPT_PROTO_NO_PASSWORD = 0x00000010,
00124
00130 OPT_PROTO_MAIL_CHECK = 0x00000020,
00131
00137 OPT_PROTO_IM_IMAGE = 0x00000040,
00138
00145 OPT_PROTO_PASSWORD_OPTIONAL = 0x00000080,
00146
00152 OPT_PROTO_USE_POINTSIZE = 0x00000100,
00153
00159 OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200,
00160
00161 } PurpleProtocolOptions;
00162
00170 struct _PurplePluginProtocolInfo
00171 {
00172 PurpleProtocolOptions options;
00174 GList *user_splits;
00175 GList *protocol_options;
00176
00177 PurpleBuddyIconSpec icon_spec;
00178
00187 const char *(*list_icon)(PurpleAccount *account, PurpleBuddy *buddy);
00188
00193 const char *(*list_emblem)(PurpleBuddy *buddy);
00194
00199 char *(*status_text)(PurpleBuddy *buddy);
00200
00204 void (*tooltip_text)(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full);
00205
00210 GList *(*status_types)(PurpleAccount *account);
00211
00212 GList *(*blist_node_menu)(PurpleBlistNode *node);
00213 GList *(*chat_info)(PurpleConnection *);
00214 GHashTable *(*chat_info_defaults)(PurpleConnection *, const char *chat_name);
00215
00216
00217
00219 void (*login)(PurpleAccount *);
00220
00222 void (*close)(PurpleConnection *);
00223
00233 int (*send_im)(PurpleConnection *, const char *who,
00234 const char *message,
00235 PurpleMessageFlags flags);
00236
00237 void (*set_info)(PurpleConnection *, const char *info);
00238 unsigned int (*send_typing)(PurpleConnection *, const char *name, PurpleTypingState state);
00239 void (*get_info)(PurpleConnection *, const char *who);
00240 void (*set_status)(PurpleAccount *account, PurpleStatus *status);
00241
00242 void (*set_idle)(PurpleConnection *, int idletime);
00243 void (*change_passwd)(PurpleConnection *, const char *old_pass,
00244 const char *new_pass);
00245 void (*add_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group);
00246 void (*add_buddies)(PurpleConnection *, GList *buddies, GList *groups);
00247 void (*remove_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group);
00248 void (*remove_buddies)(PurpleConnection *, GList *buddies, GList *groups);
00249 void (*add_permit)(PurpleConnection *, const char *name);
00250 void (*add_deny)(PurpleConnection *, const char *name);
00251 void (*rem_permit)(PurpleConnection *, const char *name);
00252 void (*rem_deny)(PurpleConnection *, const char *name);
00253 void (*set_permit_deny)(PurpleConnection *);
00254 void (*join_chat)(PurpleConnection *, GHashTable *components);
00255 void (*reject_chat)(PurpleConnection *, GHashTable *components);
00256 char *(*get_chat_name)(GHashTable *components);
00257 void (*chat_invite)(PurpleConnection *, int id,
00258 const char *message, const char *who);
00259 void (*chat_leave)(PurpleConnection *, int id);
00260 void (*chat_whisper)(PurpleConnection *, int id,
00261 const char *who, const char *message);
00262 int (*chat_send)(PurpleConnection *, int id, const char *message, PurpleMessageFlags flags);
00263 void (*keepalive)(PurpleConnection *);
00264
00265
00266 void (*register_user)(PurpleAccount *);
00267
00268
00269 void (*get_cb_info)(PurpleConnection *, int, const char *who);
00270 void (*get_cb_away)(PurpleConnection *, int, const char *who);
00271
00272
00273 void (*alias_buddy)(PurpleConnection *, const char *who,
00274 const char *alias);
00275
00276
00277 void (*group_buddy)(PurpleConnection *, const char *who,
00278 const char *old_group, const char *new_group);
00279
00280
00281 void (*rename_group)(PurpleConnection *, const char *old_name,
00282 PurpleGroup *group, GList *moved_buddies);
00283
00284 void (*buddy_free)(PurpleBuddy *);
00285
00286 void (*convo_closed)(PurpleConnection *, const char *who);
00287
00288 const char *(*normalize)(const PurpleAccount *, const char *);
00289
00290
00291
00292 void (*set_buddy_icon)(PurpleConnection *, PurpleStoredImage *img);
00293
00294 void (*remove_group)(PurpleConnection *gc, PurpleGroup *group);
00295
00296 char *(*get_cb_real_name)(PurpleConnection *gc, int id, const char *who);
00297
00298 void (*set_chat_topic)(PurpleConnection *gc, int id, const char *topic);
00299
00300 PurpleChat *(*find_blist_chat)(PurpleAccount *account, const char *name);
00301
00302
00303 PurpleRoomlist *(*roomlist_get_list)(PurpleConnection *gc);
00304 void (*roomlist_cancel)(PurpleRoomlist *list);
00305 void (*roomlist_expand_category)(PurpleRoomlist *list, PurpleRoomlistRoom *category);
00306
00307
00308 gboolean (*can_receive_file)(PurpleConnection *, const char *who);
00309 void (*send_file)(PurpleConnection *, const char *who, const char *filename);
00310 PurpleXfer *(*new_xfer)(PurpleConnection *, const char *who);
00311 gboolean (*offline_message)(const PurpleBuddy *buddy);
00312
00313 PurpleWhiteboardPrplOps *whiteboard_prpl_ops;
00314
00315
00316 int (*send_raw)(PurpleConnection *gc, const char *buf, int len);
00317
00318
00319 char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room);
00320
00321 void (*_purple_reserved1)(void);
00322 void (*_purple_reserved2)(void);
00323 void (*_purple_reserved3)(void);
00324 void (*_purple_reserved4)(void);
00325 };
00326
00327 #define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \
00328 ((plugin)->info->type == PURPLE_PLUGIN_PROTOCOL)
00329
00330 #define PURPLE_PLUGIN_PROTOCOL_INFO(plugin) \
00331 ((PurplePluginProtocolInfo *)(plugin)->info->extra_info)
00332
00333 #ifdef __cplusplus
00334 extern "C" {
00335 #endif
00336
00337
00339
00351 void purple_prpl_got_account_idle(PurpleAccount *account, gboolean idle,
00352 time_t idle_time);
00353
00362 void purple_prpl_got_account_login_time(PurpleAccount *account, time_t login_time);
00363
00374 void purple_prpl_got_account_status(PurpleAccount *account,
00375 const char *status_id, ...);
00388 void purple_prpl_got_user_idle(PurpleAccount *account, const char *name,
00389 gboolean idle, time_t idle_time);
00390
00400 void purple_prpl_got_user_login_time(PurpleAccount *account, const char *name,
00401 time_t login_time);
00402
00414 void purple_prpl_got_user_status(PurpleAccount *account, const char *name,
00415 const char *status_id, ...);
00416
00426 void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name,
00427 const char *status_id);
00428
00437 void purple_prpl_change_account_status(PurpleAccount *account,
00438 PurpleStatus *old_status,
00439 PurpleStatus *new_status);
00440
00449 GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence);
00450
00453
00455
00463 PurplePlugin *purple_find_prpl(const char *id);
00464
00467 #ifdef __cplusplus
00468 }
00469 #endif
00470
00471 #endif