ekg2
 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 #include <ekg2-config.h>
7 
8 #include <ekg/dynstuff.h>
9 #include <ekg/plugins.h>
10 #include <ekg/protocol.h> /* XXX, protocol_uid() */
11 #include <ekg/sessions.h>
12 #include <ekg/userlist.h>
13 
14 #ifdef HAVE_EXPAT_H
15  #include <expat.h>
16 #endif
17 
18 #include "jabber-ssl.h"
19 
20 #define DEFAULT_CLIENT_NAME "EKG2 -- http://www.ekg2.org"
21 #define JABBER_DEFAULT_RESOURCE "ekg2"
22 
23 /* some tlen constants */
24 #define TLEN_HUB "idi.tlen.pl" /* hub */
25 #define TLEN_FALLBACK_SERVER "s1.tlen.pl" /* fallback server */
26 #define TLEN_FALLBACK_PORT 443 /* fallback port */
27 
28 #define tlenjabber_escape(str) (j->istlen ? tlen_encode(str) : jabber_escape(str))
29 #define tlenjabber_unescape(str) (j->istlen ? tlen_decode(str) : jabber_unescape(str))
30 #define tlenjabber_uid(target) protocol_uid(j->istlen ? "tlen" : "xmpp", target)
31 
32 #define tlen_uid(target) protocol_uid("tlen", target)
33 #define xmpp_uid(target) protocol_uid("xmpp", target)
34 
35 struct xmlnode_s {
36  char *name;
37  char *data;
38  char **atts;
39  char *xmlns;
40 
41  struct xmlnode_s *parent;
43 
44  struct xmlnode_s *next;
45 /* struct xmlnode_s *prev; */
46 };
47 
48 typedef struct xmlnode_s xmlnode_t;
49 
55 };
56 
57 enum jabber_bookmark_type_t { /* see JEP-0048 for details */
61 };
62 
63 typedef enum {
70 
71 typedef struct {
72  char *name;
73  char *url;
75 
76 typedef struct {
77  char *name;
78  char *jid;
79  unsigned int autojoin : 1;
80  char *nick;
81  char *pass;
83 
84 typedef struct {
86  union { /* priv_data data based on bookmark type */
87  jabber_bookmark_url_t *url; /* for JABBER_BOOKMARK_URL */
88  jabber_bookmark_conference_t *conf; /* for JABBER_BOOKMARK_CONFERENCE */
89  void *other; /* ? ;p */
90  } priv_data;
92 
97 
100 };
101 
102  /* name bit allow/block: */
103 typedef enum {
104  PRIVACY_LIST_MESSAGE = 1, /* incoming messages */
105  PRIVACY_LIST_IQ = 2, /* incoming iq packets */
106  PRIVACY_LIST_PRESENCE_IN = 4, /* incoming presence packets */
107  PRIVACY_LIST_PRESENCE_OUT = 8, /* outgoint presence packets */
110 
111 typedef struct {
112  char *type; /* jid/group/subscription/ */
113  char *value; /* jid:.../@group/subscription ---- value */
114  unsigned int allow : 1; /* 1 - allow 0 - deny */
115  jabber_iq_privacy_flags_t items; /* lista bitmaski j/w */
116  unsigned int order; /* order */
118 
119 typedef struct {
120  char *thread;
121  char *uid;
122  char *subject;
123  void *next;
125 
126 typedef struct {
127  char *id;
128  char *to;
129  char *type;
130  char *xmlns;
131  void (*handler)(session_t *s, xmlnode_t *n, const char *from, const char *id);
132  void (*error)(session_t *s, xmlnode_t *n, const char *from, const char *id);
134 
138 typedef struct {
139  int fd;
140  unsigned int istlen : 2;
143 #ifdef JABBER_HAVE_SSL
144  unsigned char using_ssl : 2;
146 #ifdef JABBER_HAVE_GNUTLS
147  gnutls_certificate_credentials xcred;
148 #endif
149 #endif
150  int id;
151  XML_Parser parser;
152  char *server;
153  uint16_t port;
154  unsigned int sasl_connecting :1;
155  char *resource;
161 
164 
168 
169 typedef struct {
170  int authtype;
171 
172  /* from muc_userlist_t */
173  char *role; /* role: */
174  char *aff; /* affiliation: */
176 
184 };
185 
186 extern plugin_t jabber_plugin;
187 extern char *jabber_default_pubsub_server;
188 extern char *jabber_default_search_server;
189 extern int config_jabber_beep_mail;
190 extern const char *jabber_authtypes[];
191 
192 #define jabber_private(s) ((jabber_private_t*) session_private_get(s))
193 #define jabber_userlist_priv_get(u) ((jabber_userlist_private_t *) userlist_private_get(&jabber_plugin, u))
194 
195 void jabber_register_commands(void);
196 XML_Parser jabber_parser_recreate(XML_Parser parser, void *data);
197 
199 void jabber_handle(void *data, xmlnode_t *n);
200 
203 
204 const char *jabber_iq_reg(session_t *s, const char *prefix, const char *to, const char *type, const char *xmlns);
205 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);
206 
207 /* digest.c hashowanie.. */
208 char *jabber_digest(const char *sid, const char *password, int istlen);
209 char *jabber_sha1_generic(char *buf, int len);
210 char *jabber_dcc_digest(char *sid, char *initiator, char *target);
211 char *jabber_challange_digest(const char *sid, const char *password, const char *nonce, const char *cnonce, const char *xmpp_temp, const char *realm);
212 void jabber_iq_auth_send(session_t *s, const char *username, const char *passwd, const char *stream_id);
213 
214 char *jabber_attr(char **atts, const char *att);
215 char *jabber_escape(const char *text);
216 char *jabber_unescape(const char *text);
217 char *tlen_encode(const char *what);
218 char *tlen_decode(const char *what);
220 
221 void jabber_reconnect_handler(int type, void *data);
222 
227 
228 #define jabber_write(s, args...) watch_write((s && s->priv) ? jabber_private(s)->send_watch : NULL, args);
230 
231 void xmlnode_handle_end(void *data, const char *name);
232 void xmlnode_handle_cdata(void *data, const char *text, int len);
233 
234 void jabber_handle_disconnect(session_t *s, const char *reason, int type);
235 
236 char *jabber_openpgp(session_t *s, const char *fromto, enum jabber_opengpg_type_t way, char *message, char *key, char **error);
237 #ifdef HAVE_ZLIB
238 char *jabber_zlib_decompress(const char *buf, int *len);
239 char *jabber_zlib_compress(const char *buf, int *len);
240 #endif
241 
242 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);
244 char *jabber_thread_gen(jabber_private_t *j, const char *uid);
245 
246 uint32_t *jabber_msg_format(const char *plaintext, const xmlnode_t *html);
247 #endif /* __EKG_JABBER_JABBER_H */
248 
249 /*
250  * Local Variables:
251  * mode: c
252  * c-file-style: "k&r"
253  * c-basic-offset: 8
254  * indent-tabs-mode: t
255  * End:
256  */