source: protocols/jabber/jabber.h @ 788a1af

Last change on this file since 788a1af was 788a1af, checked in by Wilmer van der Gaast <wilmer@…>, at 2006-10-15T20:24:01Z

Proper cleanup of jabber buddy structures when removing a buddy from the
list, proper checking (and handling) of events related to buddies that
aren't "hashed" yet, limit checks on priorityto setting, renamed JEP85
to XEP85, support for more XEP85 states.

  • Property mode set to 100644
File size: 6.4 KB
Line 
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
32typedef enum
33{
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 XEP-85 related code. */
44} jabber_flags_t;
45
46typedef enum
47{
48        JBFLAG_PROBED_XEP85 = 1,        /* Set this when we sent our probe packet to make
49                                           sure it gets sent only once. */
50        JBFLAG_DOES_XEP85 = 2,          /* Set this when the resource seems to support
51                                           XEP85 (typing notification shite). */
52} jabber_buddy_flag_t;
53
54struct jabber_data
55{
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
79struct jabber_away_state
80{
81        char code[5];
82        char *full_name;
83};
84
85typedef xt_status (*jabber_cache_event) ( struct gaim_connection *gc, struct xt_node *node, struct xt_node *orig );
86
87struct jabber_cache_entry
88{
89        struct xt_node *node;
90        jabber_cache_event func;
91};
92
93struct 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 */
110xt_status jabber_pkt_iq( struct xt_node *node, gpointer data );
111int jabber_init_iq_auth( struct gaim_connection *gc );
112xt_status jabber_pkt_bind_sess( struct gaim_connection *gc, struct xt_node *node, struct xt_node *orig );
113int jabber_get_roster( struct gaim_connection *gc );
114int jabber_add_to_roster( struct gaim_connection *gc, char *handle, char *name );
115int jabber_remove_from_roster( struct gaim_connection *gc, char *handle );
116
117/* message.c */
118xt_status jabber_pkt_message( struct xt_node *node, gpointer data );
119
120/* presence.c */
121xt_status jabber_pkt_presence( struct xt_node *node, gpointer data );
122int presence_send_update( struct gaim_connection *gc );
123int presence_send_request( struct gaim_connection *gc, char *handle, char *request );
124
125/* jabber_util.c */
126char *set_eval_priority( set_t *set, char *value );
127char *set_eval_tls( set_t *set, char *value );
128struct xt_node *jabber_make_packet( char *name, char *type, char *to, struct xt_node *children );
129struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type );
130void jabber_cache_add( struct gaim_connection *gc, struct xt_node *node, jabber_cache_event func );
131struct xt_node *jabber_cache_get( struct gaim_connection *gc, char *id );
132void jabber_cache_entry_free( gpointer entry );
133void jabber_cache_clean( struct gaim_connection *gc );
134const struct jabber_away_state *jabber_away_state_by_code( char *code );
135const struct jabber_away_state *jabber_away_state_by_name( char *name );
136void jabber_buddy_ask( struct gaim_connection *gc, char *handle );
137struct jabber_buddy *jabber_buddy_add( struct gaim_connection *gc, char *full_jid );
138struct jabber_buddy *jabber_buddy_by_jid( struct gaim_connection *gc, char *jid );
139int jabber_buddy_remove( struct gaim_connection *gc, char *full_jid );
140int jabber_buddy_remove_bare( struct gaim_connection *gc, char *bare_jid );
141
142extern const struct jabber_away_state jabber_away_state_list[];
143
144/* io.c */
145int jabber_write_packet( struct gaim_connection *gc, struct xt_node *node );
146int jabber_write( struct gaim_connection *gc, char *buf, int len );
147gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition cond );
148gboolean jabber_connected_ssl( gpointer data, void *source, b_input_condition cond );
149gboolean jabber_start_stream( struct gaim_connection *gc );
150void jabber_end_stream( struct gaim_connection *gc );
151
152/* sasl.c */
153xt_status sasl_pkt_mechanisms( struct xt_node *node, gpointer data );
154xt_status sasl_pkt_challenge( struct xt_node *node, gpointer data );
155xt_status sasl_pkt_result( struct xt_node *node, gpointer data );
156gboolean sasl_supported( struct gaim_connection *gc );
157
158#endif
Note: See TracBrowser for help on using the repository browser.