1 /* 2 3 silcpurple.h 4 5 Author: Pekka Riikonen <priikone@silcnet.org> 6 7 Copyright (C) 2004 Pekka Riikonen 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; version 2 of the License. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 */ 19 20 #ifndef SILCPURPLE_H 21 #define SILCPURPLE_H 22 23 /* Purple includes */ 24 #include "internal.h" 25 #include "account.h" 26 #include "accountopt.h" 27 #include "cmds.h" 28 #include "conversation.h" 29 #include "debug.h" 30 #include "ft.h" 31 #include "notify.h" 32 #include "prpl.h" 33 #include "request.h" 34 #include "roomlist.h" 35 #include "server.h" 36 #include "util.h" 37 38 /* Default public and private key file names */ 39 #define SILCPURPLE_PUBLIC_KEY_NAME "public_key.pub" 40 #define SILCPURPLE_PRIVATE_KEY_NAME "private_key.prv" 41 42 /* Default settings for creating key pair */ 43 #define SILCPURPLE_DEF_PKCS "rsa" 44 #define SILCPURPLE_DEF_PKCS_LEN 2048 45 46 #define SILCPURPLE_PRVGRP 0x001fffff 47 48 /* Status IDs */ 49 #define SILCPURPLE_STATUS_ID_OFFLINE "offline" 50 #define SILCPURPLE_STATUS_ID_AVAILABLE "available" 51 #define SILCPURPLE_STATUS_ID_HYPER "hyper" 52 #define SILCPURPLE_STATUS_ID_AWAY "away" 53 #define SILCPURPLE_STATUS_ID_BUSY "busy" 54 #define SILCPURPLE_STATUS_ID_INDISPOSED "indisposed" 55 #define SILCPURPLE_STATUS_ID_PAGE "page" 56 57 typedef struct { 58 unsigned long id; 59 const char *channel; 60 unsigned long chid; 61 const char *parentch; 62 SilcChannelPrivateKey key; 63 } *SilcPurplePrvgrp; 64 65 /* The SILC Purple plugin context */ 66 typedef struct SilcPurpleStruct { 67 SilcClient client; 68 SilcClientConnection conn; 69 70 guint scheduler; 71 PurpleConnection *gc; 72 PurpleAccount *account; 73 unsigned long channel_ids; 74 GList *grps; 75 76 char *motd; 77 PurpleRoomlist *roomlist; 78 #ifdef HAVE_SILCMIME_H 79 SilcMimeAssembler mimeass; 80 #endif 81 unsigned int detaching : 1; 82 unsigned int resuming : 1; 83 unsigned int roomlist_cancelled : 1; 84 unsigned int chpk : 1; 85 } *SilcPurple; 86 87 88 gboolean silcpurple_check_silc_dir(PurpleConnection *gc); 89 void silcpurple_chat_join_done(SilcClient client, 90 SilcClientConnection conn, 91 SilcClientEntry *clients, 92 SilcUInt32 clients_count, 93 void *context); 94 const char *silcpurple_silcdir(void); 95 const char *silcpurple_session_file(const char *account); 96 void silcpurple_verify_public_key(SilcClient client, SilcClientConnection conn, 97 const char *name, SilcSocketType conn_type, 98 unsigned char *pk, SilcUInt32 pk_len, 99 SilcSKEPKType pk_type, 100 SilcVerifyPublicKey completion, void *context); 101 GList *silcpurple_buddy_menu(PurpleBuddy *buddy); 102 void silcpurple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group); 103 void silcpurple_send_buddylist(PurpleConnection *gc); 104 void silcpurple_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group); 105 void silcpurple_buddy_keyagr_request(SilcClient client, 106 SilcClientConnection conn, 107 SilcClientEntry client_entry, 108 const char *hostname, SilcUInt16 port); 109 void silcpurple_idle_set(PurpleConnection *gc, int idle); 110 void silcpurple_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full); 111 char *silcpurple_status_text(PurpleBuddy *b); 112 gboolean silcpurple_ip_is_private(const char *ip); 113 void silcpurple_ftp_send_file(PurpleConnection *gc, const char *name, const char *file); 114 PurpleXfer *silcpurple_ftp_new_xfer(PurpleConnection *gc, const char *name); 115 void silcpurple_ftp_request(SilcClient client, SilcClientConnection conn, 116 SilcClientEntry client_entry, SilcUInt32 session_id, 117 const char *hostname, SilcUInt16 port); 118 void silcpurple_show_public_key(SilcPurple sg, 119 const char *name, SilcPublicKey public_key, 120 GCallback callback, void *context); 121 void silcpurple_get_info(PurpleConnection *gc, const char *who); 122 SilcAttributePayload 123 silcpurple_get_attr(SilcDList attrs, SilcAttribute attribute); 124 void silcpurple_get_umode_string(SilcUInt32 mode, char *buf, 125 SilcUInt32 buf_size); 126 void silcpurple_get_chmode_string(SilcUInt32 mode, char *buf, 127 SilcUInt32 buf_size); 128 void silcpurple_get_chumode_string(SilcUInt32 mode, char *buf, 129 SilcUInt32 buf_size); 130 GList *silcpurple_chat_info(PurpleConnection *gc); 131 GHashTable *silcpurple_chat_info_defaults(PurpleConnection *gc, const char *chat_name); 132 GList *silcpurple_chat_menu(PurpleChat *); 133 void silcpurple_chat_join(PurpleConnection *gc, GHashTable *data); 134 char *silcpurple_get_chat_name(GHashTable *data); 135 void silcpurple_chat_invite(PurpleConnection *gc, int id, const char *msg, 136 const char *name); 137 void silcpurple_chat_leave(PurpleConnection *gc, int id); 138 int silcpurple_chat_send(PurpleConnection *gc, int id, const char *msg, PurpleMessageFlags flags); 139 void silcpurple_chat_set_topic(PurpleConnection *gc, int id, const char *topic); 140 PurpleRoomlist *silcpurple_roomlist_get_list(PurpleConnection *gc); 141 void silcpurple_roomlist_cancel(PurpleRoomlist *list); 142 void silcpurple_chat_chauth_show(SilcPurple sg, SilcChannelEntry channel, 143 SilcBuffer channel_pubkeys); 144 void silcpurple_parse_attrs(SilcDList attrs, char **moodstr, char **statusstr, 145 char **contactstr, char **langstr, char **devicestr, 146 char **tzstr, char **geostr); 147 #ifdef SILC_ATTRIBUTE_USER_ICON 148 void silcpurple_buddy_set_icon(PurpleConnection *gc, PurpleStoredImage *img); 149 #endif 150 #ifdef HAVE_SILCMIME_H 151 char *silcpurple_file2mime(const char *filename); 152 SilcDList silcpurple_image_message(const char *msg, SilcUInt32 *mflags); 153 #endif 154 155 #ifdef _WIN32 156 typedef int uid_t; 157 158 struct passwd { 159 char *pw_name; /* user name */ 160 char *pw_passwd; /* user password */ 161 int pw_uid; /* user id */ 162 int pw_gid; /* group id */ 163 char *pw_gecos; /* real name */ 164 char *pw_dir; /* home directory */ 165 char *pw_shell; /* shell program */ 166 }; 167 168 struct passwd *getpwuid(int uid); 169 int getuid(void); 170 int geteuid(void); 171 #endif 172 173 #endif /* SILCPURPLE_H */ 174