00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _PURPLE_PRPL_H_
00031 #define _PURPLE_PRPL_H_
00032
00033 typedef struct _PurplePluginProtocolInfo PurplePluginProtocolInfo;
00035 typedef struct _PurpleAttentionType PurpleAttentionType;
00036
00037
00039
00040
00041 typedef enum {
00042 PURPLE_ICON_SCALE_DISPLAY = 0x01,
00043 PURPLE_ICON_SCALE_SEND = 0x02
00044 } PurpleIconScaleRules;
00045
00046
00052 typedef struct _PurpleBuddyIconSpec PurpleBuddyIconSpec;
00053
00059 typedef struct _PurpleThumbnailSpec PurpleThumbnailSpec;
00060
00065 #define NO_BUDDY_ICONS {NULL, 0, 0, 0, 0, 0, 0}
00066
00067 #ifdef HAVE_UNISTD_H
00068 #include <unistd.h>
00069 #endif
00070
00071 #include "blist.h"
00072 #include "conversation.h"
00073 #include "ft.h"
00074 #include "imgstore.h"
00075 #include "media.h"
00076 #include "notify.h"
00077 #include "proxy.h"
00078 #include "plugin.h"
00079 #include "roomlist.h"
00080 #include "status.h"
00081 #include "whiteboard.h"
00082
00083
00085 struct _PurpleBuddyIconSpec {
00091 char *format;
00092
00093 int min_width;
00094 int min_height;
00095 int max_width;
00096 int max_height;
00097 size_t max_filesize;
00098 PurpleIconScaleRules scale_rules;
00099 };
00100
00104 struct proto_chat_entry {
00105 const char *label;
00106 const char *identifier;
00107 gboolean required;
00108 gboolean is_int;
00109 int min;
00110 int max;
00111 gboolean secret;
00112 };
00113
00117 struct _PurpleAttentionType
00118 {
00119 const char *name;
00120 const char *incoming_description;
00121 const char *outgoing_description;
00122 const char *icon_name;
00123 const char *unlocalized_name;
00125
00126 gpointer _reserved2;
00127 gpointer _reserved3;
00128 gpointer _reserved4;
00129 };
00130
00136 typedef enum
00137 {
00145 OPT_PROTO_UNIQUE_CHATNAME = 0x00000004,
00146
00152 OPT_PROTO_CHAT_TOPIC = 0x00000008,
00153
00160 OPT_PROTO_NO_PASSWORD = 0x00000010,
00161
00167 OPT_PROTO_MAIL_CHECK = 0x00000020,
00168
00174 OPT_PROTO_IM_IMAGE = 0x00000040,
00175
00182 OPT_PROTO_PASSWORD_OPTIONAL = 0x00000080,
00183
00189 OPT_PROTO_USE_POINTSIZE = 0x00000100,
00190
00198 OPT_PROTO_REGISTER_NOSCREENNAME = 0x00000200,
00199
00205 OPT_PROTO_SLASH_COMMANDS_NATIVE = 0x00000400,
00206
00212 OPT_PROTO_INVITE_MESSAGE = 0x00000800
00213
00214 } PurpleProtocolOptions;
00215
00223 struct _PurplePluginProtocolInfo
00224 {
00225 PurpleProtocolOptions options;
00227 GList *user_splits;
00228 GList *protocol_options;
00230 PurpleBuddyIconSpec icon_spec;
00240 const char *(*list_icon)(PurpleAccount *account, PurpleBuddy *buddy);
00241
00246 const char *(*list_emblem)(PurpleBuddy *buddy);
00247
00252 char *(*status_text)(PurpleBuddy *buddy);
00253
00257 void (*tooltip_text)(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean full);
00258
00264 GList *(*status_types)(PurpleAccount *account);
00265
00271 GList *(*blist_node_menu)(PurpleBlistNode *node);
00272
00280 GList *(*chat_info)(PurpleConnection *);
00281
00292 GHashTable *(*chat_info_defaults)(PurpleConnection *, const char *chat_name);
00293
00294
00295
00297 void (*login)(PurpleAccount *);
00298
00300 void (*close)(PurpleConnection *);
00301
00311 int (*send_im)(PurpleConnection *, const char *who,
00312 const char *message,
00313 PurpleMessageFlags flags);
00314
00315 void (*set_info)(PurpleConnection *, const char *info);
00316
00324 unsigned int (*send_typing)(PurpleConnection *, const char *name, PurpleTypingState state);
00325
00330 void (*get_info)(PurpleConnection *, const char *who);
00331 void (*set_status)(PurpleAccount *account, PurpleStatus *status);
00332
00333 void (*set_idle)(PurpleConnection *, int idletime);
00334 void (*change_passwd)(PurpleConnection *, const char *old_pass,
00335 const char *new_pass);
00347 void (*add_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group);
00348 void (*add_buddies)(PurpleConnection *, GList *buddies, GList *groups);
00349 void (*remove_buddy)(PurpleConnection *, PurpleBuddy *buddy, PurpleGroup *group);
00350 void (*remove_buddies)(PurpleConnection *, GList *buddies, GList *groups);
00351 void (*add_permit)(PurpleConnection *, const char *name);
00352 void (*add_deny)(PurpleConnection *, const char *name);
00353 void (*rem_permit)(PurpleConnection *, const char *name);
00354 void (*rem_deny)(PurpleConnection *, const char *name);
00355 void (*set_permit_deny)(PurpleConnection *);
00356
00367 void (*join_chat)(PurpleConnection *, GHashTable *components);
00368
00375 void (*reject_chat)(PurpleConnection *, GHashTable *components);
00376
00384 char *(*get_chat_name)(GHashTable *components);
00385
00394 void (*chat_invite)(PurpleConnection *, int id,
00395 const char *message, const char *who);
00401 void (*chat_leave)(PurpleConnection *, int id);
00402
00410 void (*chat_whisper)(PurpleConnection *, int id,
00411 const char *who, const char *message);
00412
00430 int (*chat_send)(PurpleConnection *, int id, const char *message, PurpleMessageFlags flags);
00431
00438 void (*keepalive)(PurpleConnection *);
00439
00441 void (*register_user)(PurpleAccount *);
00442
00446 void (*get_cb_info)(PurpleConnection *, int, const char *who);
00451 void (*get_cb_away)(PurpleConnection *, int, const char *who);
00452
00454 void (*alias_buddy)(PurpleConnection *, const char *who,
00455 const char *alias);
00456
00458 void (*group_buddy)(PurpleConnection *, const char *who,
00459 const char *old_group, const char *new_group);
00460
00462 void (*rename_group)(PurpleConnection *, const char *old_name,
00463 PurpleGroup *group, GList *moved_buddies);
00464
00465 void (*buddy_free)(PurpleBuddy *);
00466
00467 void (*convo_closed)(PurpleConnection *, const char *who);
00468
00474 const char *(*normalize)(const PurpleAccount *, const char *who);
00475
00481 void (*set_buddy_icon)(PurpleConnection *, PurpleStoredImage *img);
00482
00483 void (*remove_group)(PurpleConnection *gc, PurpleGroup *group);
00484
00494 char *(*get_cb_real_name)(PurpleConnection *gc, int id, const char *who);
00495
00496 void (*set_chat_topic)(PurpleConnection *gc, int id, const char *topic);
00497
00498 PurpleChat *(*find_blist_chat)(PurpleAccount *account, const char *name);
00499
00500
00501 PurpleRoomlist *(*roomlist_get_list)(PurpleConnection *gc);
00502 void (*roomlist_cancel)(PurpleRoomlist *list);
00503 void (*roomlist_expand_category)(PurpleRoomlist *list, PurpleRoomlistRoom *category);
00504
00505
00506 gboolean (*can_receive_file)(PurpleConnection *, const char *who);
00507 void (*send_file)(PurpleConnection *, const char *who, const char *filename);
00508 PurpleXfer *(*new_xfer)(PurpleConnection *, const char *who);
00509
00514 gboolean (*offline_message)(const PurpleBuddy *buddy);
00515
00516 PurpleWhiteboardPrplOps *whiteboard_prpl_ops;
00517
00519 int (*send_raw)(PurpleConnection *gc, const char *buf, int len);
00520
00521
00522 char *(*roomlist_room_serialize)(PurpleRoomlistRoom *room);
00523
00528
00529
00530
00531 void (*unregister_user)(PurpleAccount *, PurpleAccountUnregistrationCb cb, void *user_data);
00532
00533
00534 gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type);
00535 GList *(*get_attention_types)(PurpleAccount *acct);
00536
00541 unsigned long struct_size;
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00567 GHashTable *(*get_account_text_table)(PurpleAccount *account);
00568
00577 gboolean (*initiate_media)(PurpleAccount *account, const char *who,
00578 PurpleMediaSessionType type);
00579
00587 PurpleMediaCaps (*get_media_caps)(PurpleAccount *account,
00588 const char *who);
00589
00595 PurpleMood *(*get_moods)(PurpleAccount *account);
00596
00615 void (*set_public_alias)(PurpleConnection *gc, const char *alias,
00616 PurpleSetPublicAliasSuccessCallback success_cb,
00617 PurpleSetPublicAliasFailureCallback failure_cb);
00632 void (*get_public_alias)(PurpleConnection *gc,
00633 PurpleGetPublicAliasSuccessCallback success_cb,
00634 PurpleGetPublicAliasFailureCallback failure_cb);
00635
00648 void (*add_buddy_with_invite)(PurpleConnection *pc, PurpleBuddy *buddy, PurpleGroup *group, const char *message);
00649 void (*add_buddies_with_invite)(PurpleConnection *pc, GList *buddies, GList *groups, const char *message);
00650 };
00651
00652 #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \
00653 (((G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < G_STRUCT_OFFSET(PurplePluginProtocolInfo, struct_size)) \
00654 || (G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < prpl->struct_size)) && \
00655 prpl->member != NULL)
00656
00657
00658 #define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \
00659 ((plugin)->info->type == PURPLE_PLUGIN_PROTOCOL)
00660
00661 #define PURPLE_PLUGIN_PROTOCOL_INFO(plugin) \
00662 ((PurplePluginProtocolInfo *)(plugin)->info->extra_info)
00663
00664 #ifdef __cplusplus
00665 extern "C" {
00666 #endif
00667
00668
00670
00686 PurpleAttentionType *purple_attention_type_new(const char *ulname, const char *name,
00687 const char *inc_desc, const char *out_desc);
00688
00698 void purple_attention_type_set_name(PurpleAttentionType *type, const char *name);
00699
00708 void purple_attention_type_set_incoming_desc(PurpleAttentionType *type, const char *desc);
00709
00718 void purple_attention_type_set_outgoing_desc(PurpleAttentionType *type, const char *desc);
00719
00728 void purple_attention_type_set_icon_name(PurpleAttentionType *type, const char *name);
00729
00739 void purple_attention_type_set_unlocalized_name(PurpleAttentionType *type, const char *ulname);
00740
00748 const char *purple_attention_type_get_name(const PurpleAttentionType *type);
00749
00757 const char *purple_attention_type_get_incoming_desc(const PurpleAttentionType *type);
00758
00766 const char *purple_attention_type_get_outgoing_desc(const PurpleAttentionType *type);
00767
00776 const char *purple_attention_type_get_icon_name(const PurpleAttentionType *type);
00777
00785 const char *purple_attention_type_get_unlocalized_name(const PurpleAttentionType *type);
00786
00789
00791
00803 void purple_prpl_got_account_idle(PurpleAccount *account, gboolean idle,
00804 time_t idle_time);
00805
00814 void purple_prpl_got_account_login_time(PurpleAccount *account, time_t login_time);
00815
00826 void purple_prpl_got_account_status(PurpleAccount *account,
00827 const char *status_id, ...) G_GNUC_NULL_TERMINATED;
00828
00841 void purple_prpl_got_account_actions(PurpleAccount *account);
00842
00856 void purple_prpl_got_user_idle(PurpleAccount *account, const char *name,
00857 gboolean idle, time_t idle_time);
00858
00868 void purple_prpl_got_user_login_time(PurpleAccount *account, const char *name,
00869 time_t login_time);
00870
00882 void purple_prpl_got_user_status(PurpleAccount *account, const char *name,
00883 const char *status_id, ...) G_GNUC_NULL_TERMINATED;
00884
00894 void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name,
00895 const char *status_id);
00896
00905 void purple_prpl_change_account_status(PurpleAccount *account,
00906 PurpleStatus *old_status,
00907 PurpleStatus *new_status);
00908
00917 GList *purple_prpl_get_statuses(PurpleAccount *account, PurplePresence *presence);
00918
00933 void purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code);
00934
00945 void purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code);
00946
00958 void purple_prpl_got_attention_in_chat(PurpleConnection *gc, int id, const char *who, guint type_code);
00959
00968 PurpleMediaCaps purple_prpl_get_media_caps(PurpleAccount *account,
00969 const char *who);
00970
00980 gboolean purple_prpl_initiate_media(PurpleAccount *account,
00981 const char *who,
00982 PurpleMediaSessionType type);
00983
00993 void purple_prpl_got_media_caps(PurpleAccount *account, const char *who);
00994
00997
00999
01007 PurplePlugin *purple_find_prpl(const char *id);
01008
01011 #ifdef __cplusplus
01012 }
01013 #endif
01014
01015 #endif