ekg2  GIT master
 All Struktury Danych Pliki Funkcje Zmienne Definicje typów Wyliczenia Wartości wyliczeń Definicje Grupay Strony
jabber.h
Idź do dokumentacji tego pliku.
1 /* $Id$ */
2 
3 #ifndef __EKG_JABBER_JABBER_H
4 #define __EKG_JABBER_JABBER_H
5 
6 #ifdef HAVE_EXPAT_H
7  #include <expat.h>
8 #endif
9 
10 #include "jabber-ssl.h"
11 
12 #define DEFAULT_CLIENT_NAME "EKG2 -- http://www.ekg2.org"
13 #define JABBER_DEFAULT_RESOURCE "ekg2"
14 
15 /* some tlen constants */
16 #define TLEN_HUB "idi.tlen.pl" /* hub */
17 #define TLEN_FALLBACK_SERVER "s1.tlen.pl" /* fallback server */
18 #define TLEN_FALLBACK_PORT 443 /* fallback port */
19 
20 #define tlenjabber_escape(str) (j->istlen ? tlen_encode(str) : jabber_escape(str))
21 #define tlenjabber_unescape(str) (j->istlen ? tlen_decode(str) : jabber_unescape(str))
22 #define tlenjabber_uid(target) protocol_uid(j->istlen ? "tlen" : "xmpp", target)
23 
24 #define tlen_uid(target) protocol_uid("tlen", target)
25 #define xmpp_uid(target) protocol_uid("xmpp", target)
26 
27 struct xmlnode_s {
28  char *name;
29  char *data;
30  char **atts;
31  char *xmlns;
32 
33  struct xmlnode_s *parent;
35 
36  struct xmlnode_s *next;
37 /* struct xmlnode_s *prev; */
38 };
39 
40 typedef struct xmlnode_s xmlnode_t;
41 
47 };
48 
49 enum jabber_bookmark_type_t { /* see JEP-0048 for details */
53 };
54 
55 typedef enum {
62 
63 typedef struct {
64  char *name;
65  char *url;
67 
68 typedef struct {
69  char *name;
70  char *jid;
71  unsigned int autojoin : 1;
72  char *nick;
73  char *pass;
75 
76 typedef struct {
78  union { /* priv_data data based on bookmark type */
79  jabber_bookmark_url_t *url; /* for JABBER_BOOKMARK_URL */
80  jabber_bookmark_conference_t *conf; /* for JABBER_BOOKMARK_CONFERENCE */
81  void *other; /* ? ;p */
82  } priv_data;
84 
89 
92 };
93 
94  /* name bit allow/block: */
95 typedef enum {
96  PRIVACY_LIST_MESSAGE = 1, /* incoming messages */
97  PRIVACY_LIST_IQ = 2, /* incoming iq packets */
98  PRIVACY_LIST_PRESENCE_IN = 4, /* incoming presence packets */
99  PRIVACY_LIST_PRESENCE_OUT = 8, /* outgoint presence packets */
102 
103 typedef struct {
104  char *type; /* jid/group/subscription/ */
105  char *value; /* jid:.../@group/subscription ---- value */
106  unsigned int allow : 1; /* 1 - allow 0 - deny */
107  jabber_iq_privacy_flags_t items; /* lista bitmaski j/w */
108  unsigned int order; /* order */
110 
111 typedef struct {
112  char *thread;
113  char *uid;
114  char *subject;
115  void *next;
117 
118 typedef struct {
119  char *id;
120  char *to;
121  char *type;
122  char *xmlns;
123  void (*handler)(session_t *s, xmlnode_t *n, const char *from, const char *id);
124  void (*error)(session_t *s, xmlnode_t *n, const char *from, const char *id);
126 
130 typedef struct {
131  int fd;
132  unsigned int istlen : 2;
134  enum jabber_compression_method using_compress;
135 #ifdef JABBER_HAVE_SSL
136  unsigned char using_ssl : 2;
137  SSL_SESSION ssl_session;
138 #ifdef HAVE_LIBGNUTLS
139  gnutls_certificate_credentials xcred;
140 #endif
141 #endif
142  int id;
143  XML_Parser parser;
144  char *server;
145  guint16 port;
146  unsigned int sasl_connecting :1;
147  char *resource;
153 
156 
160 
161 typedef struct {
162  int authtype;
163 
164  /* from muc_userlist_t */
165  char *role; /* role: */
166  char *aff; /* affiliation: */
168 
176 };
177 
178 extern plugin_t jabber_plugin;
179 extern char *jabber_default_pubsub_server;
180 extern char *jabber_default_search_server;
181 extern int config_jabber_beep_mail;
182 extern const char *jabber_authtypes[];
183 
184 #define jabber_private(s) ((jabber_private_t*) session_private_get(s))
185 #define jabber_userlist_priv_get(u) ((jabber_userlist_private_t *) userlist_private_get(&jabber_plugin, u))
186 
187 void jabber_register_commands(void);
188 XML_Parser jabber_parser_recreate(XML_Parser parser, void *data);
189 
191 void jabber_handle(void *data, xmlnode_t *n);
192 
195 
196 const char *jabber_iq_reg(session_t *s, const char *prefix, const char *to, const char *type, const char *xmlns);
197 const char *jabber_iq_send(session_t *s, const char *prefix, jabber_iq_type_t iqtype, const char *to, const char *type, const char *xmlns);
198 
199 /* digest.c hashowanie.. */
200 char *jabber_digest(const char *sid, const char *password, int istlen);
201 char *jabber_sha1_generic(char *buf, int len);
202 char *jabber_dcc_digest(char *sid, char *initiator, char *target);
203 char *jabber_challenge_digest(const char *sid, const char *password, const char *nonce, const char *cnonce, const char *xmpp_temp, const char *realm);
204 void jabber_iq_auth_send(session_t *s, const char *username, const char *passwd, const char *stream_id);
205 
206 char *jabber_attr(char **atts, const char *att);
207 char *jabber_escape(const char *text);
208 char *jabber_unescape(const char *text);
209 char *tlen_encode(const char *what);
210 char *tlen_decode(const char *what);
212 
213 void jabber_reconnect_handler(int type, void *data);
214 
219 
220 #define jabber_write(s, args...) watch_write((s && s->priv) ? jabber_private(s)->send_watch : NULL, args);
222 
223 void xmlnode_handle_end(void *data, const char *name);
224 void xmlnode_handle_cdata(void *data, const char *text, int len);
225 
226 void jabber_handle_disconnect(session_t *s, const char *reason, int type);
227 
228 char *jabber_openpgp(session_t *s, const char *fromto, enum jabber_opengpg_type_t way, char *message, char *key, char **error);
229 #ifdef HAVE_LIBZ
230 char *jabber_zlib_decompress(const char *buf, int *len);
231 char *jabber_zlib_compress(const char *buf, int *len);
232 #endif
233 
234 int jabber_conversation_find(jabber_private_t *j, const char *uid, const char *subject, const char *thread, jabber_conversation_t **result, const int can_add);
236 char *jabber_thread_gen(jabber_private_t *j, const char *uid);
237 
238 guint32 *jabber_msg_format(const char *plaintext, const xmlnode_t *html);
239 #endif /* __EKG_JABBER_JABBER_H */
240 
241 /*
242  * Local Variables:
243  * mode: c
244  * c-file-style: "k&r"
245  * c-basic-offset: 8
246  * indent-tabs-mode: t
247  * End:
248  */