Changes in protocols/jabber/jabber.h [259edd4:b7d3cc34]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/jabber/jabber.h
r259edd4 rb7d3cc34 1 /***************************************************************************\ 2 * * 3 * BitlBee - An IRC to IM gateway * 4 * Jabber module - Main file * 5 * * 6 * Copyright 2006 Wilmer van der Gaast <wilmer@gaast.net> * 7 * * 8 * This program is free software; you can redistribute it and/or modify * 9 * it under the terms of the GNU General Public License as published by * 10 * the Free Software Foundation; either version 2 of the License, or * 11 * (at your option) any later version. * 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 * You should have received a copy of the GNU General Public License along * 19 * with this program; if not, write to the Free Software Foundation, Inc., * 20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 21 * * 22 \***************************************************************************/ 23 24 #ifndef _JABBER_H 25 #define _JABBER_H 26 27 #include <glib.h> 28 29 #include "xmltree.h" 30 #include "bitlbee.h" 31 32 typedef enum 1 /* 2 * This program is free software; you can redistribute it and/or modify 3 * it under the terms of the GNU General Public License as published by 4 * the Free Software Foundation; either version 2 of the License, or 5 * (at your option) any later version. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 15 * 16 * Jabber 17 * Copyright (C) 1998-1999 The Jabber Team http://jabber.org/ 18 */ 19 20 #include <string.h> 21 #include <stdlib.h> 22 #include <sys/types.h> 23 #include <stdio.h> 24 #include <setjmp.h> 25 #include <sys/stat.h> 26 #include <fcntl.h> 27 #include <errno.h> 28 #include <signal.h> 29 #include <stdarg.h> 30 #include <time.h> 31 #include <ctype.h> 32 #ifdef _WIN32 33 #undef DATADIR 34 #include "sock.h" 35 #endif 36 37 #include "lib.h" 38 39 40 #ifndef INCL_JABBER_H 41 #define INCL_JABBER_H 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 /* --------------------------------------------------------- */ 48 /* */ 49 /* JID structures & constants */ 50 /* */ 51 /* --------------------------------------------------------- */ 52 #define JID_RESOURCE 1 53 #define JID_USER 2 54 #define JID_SERVER 4 55 56 typedef struct jid_struct 57 { 58 pool p; 59 char* resource; 60 char* user; 61 char* server; 62 char* full; 63 struct jid_struct *next; /* for lists of jids */ 64 } *jid; 65 66 jid jid_new(pool p, char *idstr); /* Creates a jabber id from the idstr */ 67 void jid_set(jid id, char *str, int item); /* Individually sets jid components */ 68 char* jid_full(jid id); /* Builds a string type=user/resource@server from the jid data */ 69 int jid_cmp(jid a, jid b); /* Compares two jid's, returns 0 for perfect match */ 70 int jid_cmpx(jid a, jid b, int parts); /* Compares just the parts specified as JID_|JID_ */ 71 jid jid_append(jid a, jid b); /* Appending b to a (list), no dups */ 72 xmlnode jid_xres(jid id); /* Returns xmlnode representation of the resource?query=string */ 73 xmlnode jid_nodescan(jid id, xmlnode x); /* Scans the children of the node for a matching jid attribute */ 74 jid jid_user(jid a); /* returns the same jid but just of the user@host part */ 75 76 77 /* --------------------------------------------------------- */ 78 /* */ 79 /* JPacket structures & constants */ 80 /* */ 81 /* --------------------------------------------------------- */ 82 #define JPACKET_UNKNOWN 0x00 83 #define JPACKET_MESSAGE 0x01 84 #define JPACKET_PRESENCE 0x02 85 #define JPACKET_IQ 0x04 86 #define JPACKET_S10N 0x08 87 88 #define JPACKET__UNKNOWN 0 89 #define JPACKET__NONE 1 90 #define JPACKET__ERROR 2 91 #define JPACKET__CHAT 3 92 #define JPACKET__GROUPCHAT 4 93 #define JPACKET__GET 5 94 #define JPACKET__SET 6 95 #define JPACKET__RESULT 7 96 #define JPACKET__SUBSCRIBE 8 97 #define JPACKET__SUBSCRIBED 9 98 #define JPACKET__UNSUBSCRIBE 10 99 #define JPACKET__UNSUBSCRIBED 11 100 #define JPACKET__AVAILABLE 12 101 #define JPACKET__UNAVAILABLE 13 102 #define JPACKET__PROBE 14 103 #define JPACKET__HEADLINE 15 104 #define JPACKET__INVISIBLE 16 105 106 typedef struct jpacket_struct 33 107 { 34 JFLAG_STREAM_STARTED = 1, /* Set when we detected the beginning of the stream 35 and want to do auth. */ 36 JFLAG_AUTHENTICATED = 2, /* Set when we're successfully authenticatd. */ 37 JFLAG_STREAM_RESTART = 4, /* Set when we want to restart the stream (after 38 SASL or TLS). */ 39 JFLAG_WAIT_SESSION = 8, /* Set if we sent a <session> tag and need a reply 40 before we continue. */ 41 JFLAG_WAIT_BIND = 16, /* ... for <bind> tag. */ 42 JFLAG_WANT_TYPING = 32, /* Set if we ever sent a typing notification, this 43 activates all JEP-85 related code. */ 44 } jabber_flags_t; 45 46 typedef enum 108 unsigned char type; 109 int subtype; 110 int flag; 111 void* aux1; 112 xmlnode x; 113 jid to; 114 jid from; 115 char* iqns; 116 xmlnode iq; 117 pool p; 118 } *jpacket, _jpacket; 119 120 jpacket jpacket_new(xmlnode x); /* Creates a jabber packet from the xmlnode */ 121 int jpacket_subtype(jpacket p); /* Returns the subtype value (looks at xmlnode for it) */ 122 123 124 /* --------------------------------------------------------- */ 125 /* */ 126 /* Presence Proxy DB structures & constants */ 127 /* */ 128 /* --------------------------------------------------------- */ 129 typedef struct ppdb_struct 130 { 131 jid id; /* entry data */ 132 int pri; 133 xmlnode x; 134 struct ppdb_struct* user; /* linked list for user@server */ 135 pool p; /* db-level data */ 136 struct ppdb_struct* next; 137 } _ppdb, *ppdb; 138 139 ppdb ppdb_insert(ppdb db, jid id, xmlnode x); /* Inserts presence into the proxy */ 140 xmlnode ppdb_primary(ppdb db, jid id); /* Fetches the matching primary presence for the id */ 141 void ppdb_free(ppdb db); /* Frees the db and all entries */ 142 xmlnode ppdb_get(ppdb db, jid id); /* Called successively to return each presence xmlnode */ 143 /* for the id and children, returns NULL at the end */ 144 145 146 /* --------------------------------------------------------- */ 147 /* */ 148 /* Simple Jabber Rate limit functions */ 149 /* */ 150 /* --------------------------------------------------------- */ 151 typedef struct jlimit_struct 47 152 { 48 JBFLAG_PROBED_JEP85 = 1, /* Set this when we sent our probe packet to make 49 sure it gets sent only once. */ 50 JBFLAG_DOES_JEP85 = 2, /* Set this when the resource seems to support 51 JEP85 (typing notification shite). */ 52 } jabber_buddy_flag_t; 53 54 struct jabber_data 153 char *key; 154 int start; 155 int points; 156 int maxt, maxp; 157 pool p; 158 } *jlimit, _jlimit; 159 160 jlimit jlimit_new(int maxt, int maxp); 161 void jlimit_free(jlimit r); 162 int jlimit_check(jlimit r, char *key, int points); 163 164 165 /* --------------------------------------------------------- */ 166 /* */ 167 /* Error structures & constants */ 168 /* */ 169 /* --------------------------------------------------------- */ 170 typedef struct terror_struct 55 171 { 56 struct gaim_connection *gc; 57 58 int fd; 59 void *ssl; 60 char *txq; 61 int tx_len; 62 int r_inpa, w_inpa; 63 64 struct xt_parser *xt; 65 jabber_flags_t flags; 66 67 char *username; /* USERNAME@server */ 68 char *server; /* username@SERVER -=> server/domain, not hostname */ 69 70 /* After changing one of these two (or the priority setting), call 71 presence_send_update() to inform the server about the changes. */ 72 struct jabber_away_state *away_state; 73 char *away_message; 74 75 GHashTable *node_cache; 76 GHashTable *buddies; 77 }; 78 79 struct jabber_away_state 172 int code; 173 char msg[64]; 174 } terror; 175 176 #define TERROR_BAD (terror){400,"Bad Request"} 177 #define TERROR_AUTH (terror){401,"Unauthorized"} 178 #define TERROR_PAY (terror){402,"Payment Required"} 179 #define TERROR_FORBIDDEN (terror){403,"Forbidden"} 180 #define TERROR_NOTFOUND (terror){404,"Not Found"} 181 #define TERROR_NOTALLOWED (terror){405,"Not Allowed"} 182 #define TERROR_NOTACCEPTABLE (terror){406,"Not Acceptable"} 183 #define TERROR_REGISTER (terror){407,"Registration Required"} 184 #define TERROR_REQTIMEOUT (terror){408,"Request Timeout"} 185 #define TERROR_CONFLICT (terror){409,"Conflict"} 186 187 #define TERROR_INTERNAL (terror){500,"Internal Server Error"} 188 #define TERROR_NOTIMPL (terror){501,"Not Implemented"} 189 #define TERROR_EXTERNAL (terror){502,"Remote Server Error"} 190 #define TERROR_UNAVAIL (terror){503,"Service Unavailable"} 191 #define TERROR_EXTTIMEOUT (terror){504,"Remote Server Timeout"} 192 #define TERROR_DISCONNECTED (terror){510,"Disconnected"} 193 194 /* --------------------------------------------------------- */ 195 /* */ 196 /* Namespace constants */ 197 /* */ 198 /* --------------------------------------------------------- */ 199 #define NSCHECK(x,n) (j_strcmp(xmlnode_get_attrib(x,"xmlns"),n) == 0) 200 201 #define NS_CLIENT "jabber:client" 202 #define NS_SERVER "jabber:server" 203 #define NS_AUTH "jabber:iq:auth" 204 #define NS_REGISTER "jabber:iq:register" 205 #define NS_ROSTER "jabber:iq:roster" 206 #define NS_OFFLINE "jabber:x:offline" 207 #define NS_AGENT "jabber:iq:agent" 208 #define NS_AGENTS "jabber:iq:agents" 209 #define NS_DELAY "jabber:x:delay" 210 #define NS_VERSION "jabber:iq:version" 211 #define NS_TIME "jabber:iq:time" 212 #define NS_VCARD "vcard-temp" 213 #define NS_PRIVATE "jabber:iq:private" 214 #define NS_SEARCH "jabber:iq:search" 215 #define NS_OOB "jabber:iq:oob" 216 #define NS_XOOB "jabber:x:oob" 217 #define NS_ADMIN "jabber:iq:admin" 218 #define NS_FILTER "jabber:iq:filter" 219 #define NS_AUTH_0K "jabber:iq:auth:0k" 220 221 222 /* --------------------------------------------------------- */ 223 /* */ 224 /* Message Types */ 225 /* */ 226 /* --------------------------------------------------------- */ 227 #define TMSG_NORMAL "normal" 228 #define TMSG_ERROR "error" 229 #define TMSG_CHAT "chat" 230 #define TMSG_GROUPCHAT "groupchat" 231 #define TMSG_HEADLINE "headline" 232 233 234 /* --------------------------------------------------------- */ 235 /* */ 236 /* JUtil functions */ 237 /* */ 238 /* --------------------------------------------------------- */ 239 xmlnode jutil_presnew(int type, char *to, char *status); /* Create a skeleton presence packet */ 240 xmlnode jutil_iqnew(int type, char *ns); /* Create a skeleton iq packet */ 241 xmlnode jutil_msgnew(char *type, char *to, char *subj, char *body); 242 /* Create a skeleton message packet */ 243 xmlnode jutil_header(char* xmlns, char* server); /* Create a skeleton stream packet */ 244 int jutil_priority(xmlnode x); /* Determine priority of this packet */ 245 void jutil_tofrom(xmlnode x); /* Swaps to/from fields on a packet */ 246 xmlnode jutil_iqresult(xmlnode x); /* Generate a skeleton iq/result, given a iq/query */ 247 char* jutil_timestamp(void); /* Get stringified timestamp */ 248 void jutil_error(xmlnode x, terror E); /* Append an <error> node to x */ 249 void jutil_delay(xmlnode msg, char *reason); /* Append a delay packet to msg */ 250 char* jutil_regkey(char *key, char *seed); /* pass a seed to generate a key, pass the key again to validate (returns it) */ 251 252 253 /* --------------------------------------------------------- */ 254 /* */ 255 /* JConn structures & functions */ 256 /* */ 257 /* --------------------------------------------------------- */ 258 #define JCONN_STATE_OFF 0 259 #define JCONN_STATE_CONNECTED 1 260 #define JCONN_STATE_ON 2 261 #define JCONN_STATE_AUTH 3 262 263 typedef struct jconn_struct 80 264 { 81 char code[5]; 82 char *full_name; 83 }; 84 85 typedef xt_status (*jabber_cache_event) ( struct gaim_connection *gc, struct xt_node *node, struct xt_node *orig ); 86 87 struct jabber_cache_entry 88 { 89 struct xt_node *node; 90 jabber_cache_event func; 91 }; 92 93 struct jabber_buddy 94 { 95 char *handle; 96 char *full_jid; 97 char *resource; 98 99 int priority; 100 struct jabber_away_state *away_state; 101 char *away_message; 102 103 time_t last_act; 104 int flags; 105 106 struct jabber_buddy *next; 107 }; 108 109 /* iq.c */ 110 xt_status jabber_pkt_iq( struct xt_node *node, gpointer data ); 111 int jabber_init_iq_auth( struct gaim_connection *gc ); 112 xt_status jabber_pkt_bind_sess( struct gaim_connection *gc, struct xt_node *node, struct xt_node *orig ); 113 int jabber_get_roster( struct gaim_connection *gc ); 114 int jabber_add_to_roster( struct gaim_connection *gc, char *handle, char *name ); 115 int jabber_remove_from_roster( struct gaim_connection *gc, char *handle ); 116 117 /* message.c */ 118 xt_status jabber_pkt_message( struct xt_node *node, gpointer data ); 119 120 /* presence.c */ 121 xt_status jabber_pkt_presence( struct xt_node *node, gpointer data ); 122 int presence_send_update( struct gaim_connection *gc ); 123 int presence_send_request( struct gaim_connection *gc, char *handle, char *request ); 124 125 /* jabber_util.c */ 126 char *set_eval_priority( set_t *set, char *value ); 127 char *set_eval_tls( set_t *set, char *value ); 128 struct xt_node *jabber_make_packet( char *name, char *type, char *to, struct xt_node *children ); 129 struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type ); 130 void jabber_cache_add( struct gaim_connection *gc, struct xt_node *node, jabber_cache_event func ); 131 struct xt_node *jabber_cache_get( struct gaim_connection *gc, char *id ); 132 void jabber_cache_entry_free( gpointer entry ); 133 void jabber_cache_clean( struct gaim_connection *gc ); 134 const struct jabber_away_state *jabber_away_state_by_code( char *code ); 135 const struct jabber_away_state *jabber_away_state_by_name( char *name ); 136 void jabber_buddy_ask( struct gaim_connection *gc, char *handle ); 137 struct jabber_buddy *jabber_buddy_add( struct gaim_connection *gc, char *full_jid ); 138 struct jabber_buddy *jabber_buddy_by_jid( struct gaim_connection *gc, char *jid ); 139 int jabber_buddy_remove( struct gaim_connection *gc, char *full_jid ); 140 141 extern const struct jabber_away_state jabber_away_state_list[]; 142 143 /* io.c */ 144 int jabber_write_packet( struct gaim_connection *gc, struct xt_node *node ); 145 int jabber_write( struct gaim_connection *gc, char *buf, int len ); 146 gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition cond ); 147 gboolean jabber_connected_ssl( gpointer data, void *source, b_input_condition cond ); 148 gboolean jabber_start_stream( struct gaim_connection *gc ); 149 void jabber_end_stream( struct gaim_connection *gc ); 150 151 /* sasl.c */ 152 xt_status sasl_pkt_mechanisms( struct xt_node *node, gpointer data ); 153 xt_status sasl_pkt_challenge( struct xt_node *node, gpointer data ); 154 xt_status sasl_pkt_result( struct xt_node *node, gpointer data ); 155 gboolean sasl_supported( struct gaim_connection *gc ); 156 265 /* Core structure */ 266 pool p; /* Memory allocation pool */ 267 int state; /* Connection state flag */ 268 int fd; /* Connection file descriptor */ 269 jid user; /* User info */ 270 char *pass; /* User passwd */ 271 272 /* Stream stuff */ 273 int id; /* id counter for jab_getid() function */ 274 char idbuf[9]; /* temporary storage for jab_getid() */ 275 char *sid; /* stream id from server, for digest auth */ 276 XML_Parser parser; /* Parser instance */ 277 xmlnode current; /* Current node in parsing instance.. */ 278 279 /* Event callback ptrs */ 280 void (*on_state)(struct jconn_struct *j, int state); 281 void (*on_packet)(struct jconn_struct *j, jpacket p); 282 283 } *jconn, jconn_struct; 284 285 typedef void (*jconn_state_h)(jconn j, int state); 286 typedef void (*jconn_packet_h)(jconn j, jpacket p); 287 288 289 jconn jab_new(char *user, char *pass); 290 void jab_delete(jconn j); 291 void jab_state_handler(jconn j, jconn_state_h h); 292 void jab_packet_handler(jconn j, jconn_packet_h h); 293 void jab_start(jconn j); 294 void jab_stop(jconn j); 295 296 int jab_getfd(jconn j); 297 jid jab_getjid(jconn j); 298 char *jab_getsid(jconn j); 299 char *jab_getid(jconn j); 300 301 void jab_send(jconn j, xmlnode x); 302 void jab_send_raw(jconn j, const char *str); 303 void jab_recv(jconn j); 304 void jab_poll(jconn j, int timeout); 305 306 char *jab_auth(jconn j); 307 char *jab_reg(jconn j); 308 309 310 311 #ifdef __cplusplus 312 } 157 313 #endif 314 315 #endif /* INCL_JABBER_H */
Note: See TracChangeset
for help on using the changeset viewer.