prpl.h

Go to the documentation of this file.
00001 
00026 /* this file should be all that prpls need to include. therefore, by including
00027  * this file, they should get glib, proxy, purple_connection, prpl, etc. */
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;      /* A GList of PurpleAccountUserSplit */
00175     GList *protocol_options; /* A GList of PurpleAccountOption    */
00176 
00177     PurpleBuddyIconSpec icon_spec; /* The 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     /* All the server-related functions */
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     /* new user registration */
00266     void (*register_user)(PurpleAccount *);
00267 
00268     /* get "chat buddy" info and away message */
00269     void (*get_cb_info)(PurpleConnection *, int, const char *who);
00270     void (*get_cb_away)(PurpleConnection *, int, const char *who);
00271 
00272     /* save/store buddy's alias on server list/roster */
00273     void (*alias_buddy)(PurpleConnection *, const char *who,
00274                         const char *alias);
00275 
00276     /* change a buddy's group on a server list/roster */
00277     void (*group_buddy)(PurpleConnection *, const char *who,
00278                         const char *old_group, const char *new_group);
00279 
00280     /* rename a group on a server list/roster */
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     /* The prpl does NOT own a reference to img.  If it needs one, it
00291      * must purple_imgstore_ref(img) itself. */
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     /* room listing prpl callbacks */
00303     PurpleRoomlist *(*roomlist_get_list)(PurpleConnection *gc);
00304     void (*roomlist_cancel)(PurpleRoomlist *list);
00305     void (*roomlist_expand_category)(PurpleRoomlist *list, PurpleRoomlistRoom *category);
00306 
00307     /* file transfer callbacks */
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     /* For use in plugins that may understand the underlying protocol */
00316     int (*send_raw)(PurpleConnection *gc, const char *buf, int len);
00317 
00318     /* room list serialize */
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 /* _PRPL_H_ */