annotate mcabber/libjabber/jabber.h @ 403:17aa60c6dc63

Allow a different server name than the jid domain name Sync libjabber with upstream (centericq). The libjabber patch is from Ian Johannesen. This allows connecting to Google Talk, for example.
author Mikael Berthe <mikael@lilotux.net>
date Sat, 27 Aug 2005 11:21:27 +0200
parents 1fa1185346be
children c3ae9251c197
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
1 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
2 * This program is free software; you can redistribute it and/or modify
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
3 * it under the terms of the GNU General Public License as published by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
4 * the Free Software Foundation; either version 2 of the License, or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
5 * (at your option) any later version.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
6 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
7 * This program is distributed in the hope that it will be useful,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
10 * GNU General Public License for more details.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
11 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
12 * You should have received a copy of the GNU General Public License
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
13 * along with this program; if not, write to the Free Software
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
14 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
15 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
16 * Jabber
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
17 * Copyright (C) 1998-1999 The Jabber Team http://jabber.org/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
18 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
19
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
20 #include <string.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
21 #include <stdlib.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
22 #include <sys/types.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
23 #include <stdio.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
24 #include <setjmp.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
25 #include <sys/stat.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
26 #include <fcntl.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
27 #include <errno.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
28 #include <signal.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
29 #include <stdarg.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
30 #include <syslog.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
31 #include <strings.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
32 #include <unistd.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
33 #include <sys/socket.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
34 #include <netinet/in.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
35 #include <netdb.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
36 #include <arpa/inet.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
37 #include <ctype.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
38 #include <time.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
39
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
40 #include "libxode.h"
56
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
41 #include "../connwrap/connwrap.h"
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
42
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
43 #ifndef INCL_JABBER_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
44 #define INCL_JABBER_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
45
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
46 #ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
47 extern "C" {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
48 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
49
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
50 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
51 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
52 /* JID structures & constants */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
53 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
54 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
55 #define JID_RESOURCE 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
56 #define JID_USER 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
57 #define JID_SERVER 4
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
58
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
59 typedef struct jid_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
60 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
61 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
62 char* resource;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
63 char* user;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
64 char* server;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
65 char* full;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
66 struct jid_struct *next; /* for lists of jids */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
67 } *jid;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
68
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
69 jid jid_new(pool p, char *idstr); /* Creates a jabber id from the idstr */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
70
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
71 void jid_set(jid id, char *str, int item); /* Individually sets jid components */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
72 char* jid_full(jid id); /* Builds a string type=user/resource@server from the jid data */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
73 int jid_cmp(jid a, jid b); /* Compares two jid's, returns 0 for perfect match */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
74 int jid_cmpx(jid a, jid b, int parts); /* Compares just the parts specified as JID_|JID_ */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
75 jid jid_append(jid a, jid b); /* Appending b to a (list), no dups */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
76 xmlnode jid_xres(jid id); /* Returns xmlnode representation of the resource?query=string */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
77 xmlnode jid_nodescan(jid id, xmlnode x); /* Scans the children of the node for a matching jid attribute */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
78
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
79
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
80 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
81 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
82 /* JPacket structures & constants */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
83 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
84 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
85 #define JPACKET_UNKNOWN 0x00
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
86 #define JPACKET_MESSAGE 0x01
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
87 #define JPACKET_PRESENCE 0x02
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
88 #define JPACKET_IQ 0x04
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
89 #define JPACKET_S10N 0x08
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
90
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
91 #define JPACKET__UNKNOWN 0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
92 #define JPACKET__NONE 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
93 #define JPACKET__ERROR 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
94 #define JPACKET__CHAT 3
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
95 #define JPACKET__GROUPCHAT 4
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
96 #define JPACKET__GET 5
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
97 #define JPACKET__SET 6
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
98 #define JPACKET__RESULT 7
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
99 #define JPACKET__SUBSCRIBE 8
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
100 #define JPACKET__SUBSCRIBED 9
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
101 #define JPACKET__UNSUBSCRIBE 10
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
102 #define JPACKET__UNSUBSCRIBED 11
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
103 #define JPACKET__AVAILABLE 12
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
104 #define JPACKET__UNAVAILABLE 13
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
105 #define JPACKET__PROBE 14
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
106 #define JPACKET__HEADLINE 15
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
107
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
108 typedef struct jpacket_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
109 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
110 unsigned char type;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
111 int subtype;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
112 int flag;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
113 void* aux1;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
114 xmlnode x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
115 jid to;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
116 jid from;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
117 char* iqns;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
118 xmlnode iq;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
119 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
120 } *jpacket, _jpacket;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
121
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
122 jpacket jpacket_new(xmlnode x); /* Creates a jabber packet from the xmlnode */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
123 jpacket jpacket_reset(jpacket p); /* Resets the jpacket values based on the xmlnode */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
124 int jpacket_subtype(jpacket p); /* Returns the subtype value (looks at xmlnode for it) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
125
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
126
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
127 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
128 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
129 /* Presence Proxy DB structures & constants */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
130 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
131 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
132 typedef struct ppdb_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
133 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
134 jid id; /* entry data */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
135 int pri;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
136 xmlnode x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
137 struct ppdb_struct* user; /* linked list for user@server */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
138 pool p; /* db-level data */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
139 struct ppdb_struct* next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
140 } _ppdb, *ppdb;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
141
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
142 ppdb ppdb_insert(ppdb db, jid id, xmlnode x); /* Inserts presence into the proxy */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
143 xmlnode ppdb_primary(ppdb db, jid id); /* Fetches the matching primary presence for the id */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
144 void ppdb_free(ppdb db); /* Frees the db and all entries */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
145 xmlnode ppdb_get(ppdb db, jid id); /* Called successively to return each presence xmlnode */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
146 /* for the id and children, returns NULL at the end */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
147
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
148
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
149 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
150 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
151 /* Simple Jabber Rate limit functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
152 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
153 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
154 typedef struct jlimit_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
155 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
156 char *key;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
157 int start;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
158 int points;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
159 int maxt, maxp;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
160 pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
161 } *jlimit, _jlimit;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
162
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
163 jlimit jlimit_new(int maxt, int maxp);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
164 void jlimit_free(jlimit r);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
165 int jlimit_check(jlimit r, char *key, int points);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
166
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
167
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
168 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
169 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
170 /* Error structures & constants */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
171 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
172 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
173 typedef struct terror_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
174 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
175 int code;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
176 char msg[64];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
177 } terror;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
178
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
179 #define TERROR_BAD (terror){400,"Bad Request"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
180 #define TERROR_AUTH (terror){401,"Unauthorized"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
181 #define TERROR_PAY (terror){402,"Payment Required"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
182 #define TERROR_FORBIDDEN (terror){403,"Forbidden"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
183 #define TERROR_NOTFOUND (terror){404,"Not Found"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
184 #define TERROR_NOTALLOWED (terror){405,"Not Allowed"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
185 #define TERROR_NOTACCEPTABLE (terror){406,"Not Acceptable"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
186 #define TERROR_REGISTER (terror){407,"Registration Required"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
187 #define TERROR_REQTIMEOUT (terror){408,"Request Timeout"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
188 #define TERROR_CONFLICT (terror){409,"Conflict"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
189
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
190 #define TERROR_INTERNAL (terror){500,"Internal Server Error"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
191 #define TERROR_NOTIMPL (terror){501,"Not Implemented"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
192 #define TERROR_EXTERNAL (terror){502,"Remote Server Error"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
193 #define TERROR_UNAVAIL (terror){503,"Service Unavailable"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
194 #define TERROR_EXTTIMEOUT (terror){504,"Remote Server Timeout"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
195 #define TERROR_DISCONNECTED (terror){510,"Disconnected"}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
196
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
197 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
198 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
199 /* Namespace constants */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
200 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
201 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
202 #define NSCHECK(x,n) (j_strcmp(xmlnode_get_attrib(x,"xmlns"),n) == 0)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
203
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
204 #define NS_CLIENT "jabber:client"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
205 #define NS_SERVER "jabber:server"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
206 #define NS_AUTH "jabber:iq:auth"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
207 #define NS_REGISTER "jabber:iq:register"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
208 #define NS_ROSTER "jabber:iq:roster"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
209 #define NS_OFFLINE "jabber:x:offline"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
210 #define NS_AGENT "jabber:iq:agent"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
211 #define NS_AGENTS "jabber:iq:agents"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
212 #define NS_DELAY "jabber:x:delay"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
213 #define NS_VERSION "jabber:iq:version"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
214 #define NS_TIME "jabber:iq:time"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
215 #define NS_VCARD "vcard-temp"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
216 #define NS_PRIVATE "jabber:iq:private"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
217 #define NS_SEARCH "jabber:iq:search"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
218 #define NS_OOB "jabber:iq:oob"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
219 #define NS_XOOB "jabber:x:oob"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
220 #define NS_ADMIN "jabber:iq:admin"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
221 #define NS_FILTER "jabber:iq:filter"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
222 #define NS_AUTH_0K "jabber:iq:auth:0k"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
223
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
224
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
225 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
226 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
227 /* Message Types */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
228 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
229 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
230 #define TMSG_NORMAL "normal"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
231 #define TMSG_ERROR "error"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
232 #define TMSG_CHAT "chat"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
233 #define TMSG_GROUPCHAT "groupchat"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
234 #define TMSG_HEADLINE "headline"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
235
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
236
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
237 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
238 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
239 /* JUtil functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
240 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
241 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
242 xmlnode jutil_presnew(int type, char *to, char *status); /* Create a skeleton presence packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
243 xmlnode jutil_iqnew(int type, char *ns); /* Create a skeleton iq packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
244 xmlnode jutil_msgnew(char *type, char *to, char *subj, char *body);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
245 /* Create a skeleton message packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
246 xmlnode jutil_header(char* xmlns, char* server); /* Create a skeleton stream packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
247 int jutil_priority(xmlnode x); /* Determine priority of this packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
248 void jutil_tofrom(xmlnode x); /* Swaps to/from fields on a packet */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
249 xmlnode jutil_iqresult(xmlnode x); /* Generate a skeleton iq/result, given a iq/query */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
250 char* jutil_timestamp(void); /* Get stringified timestamp */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
251 void jutil_error(xmlnode x, terror E); /* Append an <error> node to x */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
252 void jutil_delay(xmlnode msg, char *reason); /* Append a delay packet to msg */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
253 char* jutil_regkey(char *key, char *seed); /* pass a seed to generate a key, pass the key again to validate (returns it) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
254
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
255
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
256 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
257 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
258 /* JConn structures & functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
259 /* */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
260 /* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
261 #define JCONN_STATE_OFF 0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
262 #define JCONN_STATE_CONNECTED 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
263 #define JCONN_STATE_ON 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
264 #define JCONN_STATE_AUTH 3
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
265 #define JCONN_STATE_CONNECTING 4
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
266
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
267 typedef struct jconn_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
268 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
269 /* Core structure */
56
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
270 pool p; /* Memory allocation pool */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
271 int state; /* Connection state flag */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
272 int cw_state; /* Low level connection state flag */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
273 int fd; /* Connection file descriptor */
403
17aa60c6dc63 Allow a different server name than the jid domain name
Mikael Berthe <mikael@lilotux.net>
parents: 56
diff changeset
274 char *server; /* The server we'll connect too */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
275 int port;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
276 int ssl;
56
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
277 jid user; /* User info */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
278 char *pass; /* User passwd */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
279
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
280 /* Stream stuff */
56
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
281 int id; /* id counter for jab_getid() function */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
282 char idbuf[9]; /* temporary storage for jab_getid() */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
283 char *sid; /* stream id from server, for digest auth */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
284 XML_Parser parser; /* Parser instance */
1fa1185346be [/trunk] Changeset 71 by mikael
mikael
parents: 25
diff changeset
285 xmlnode current; /* Current node in parsing instance.. */
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
286
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
287 /* Event callback ptrs */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
288 void (*on_state)(struct jconn_struct *j, int state);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
289 void (*on_packet)(struct jconn_struct *j, jpacket p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
290 void (*logger)(struct jconn_struct *j, int inout, const char *p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
291
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
292 } *jconn, jconn_struct;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
293
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
294 typedef void (*jconn_state_h)(jconn j, int state);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
295 typedef void (*jconn_packet_h)(jconn j, jpacket p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
296 typedef void (*jconn_logger)(jconn j, int inout, const char *p);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
297
403
17aa60c6dc63 Allow a different server name than the jid domain name
Mikael Berthe <mikael@lilotux.net>
parents: 56
diff changeset
298 jconn jab_new(char *user, char *pass, char *server, int port, int ssl);
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
299 void jab_delete(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
300 void jab_state_handler(jconn j, jconn_state_h h);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
301 void jab_packet_handler(jconn j, jconn_packet_h h);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
302 void jab_logger(jconn j, jconn_logger h);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
303 void jab_start(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
304 void jab_stop(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
305
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
306 int jab_getfd(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
307 jid jab_getjid(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
308 char *jab_getsid(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
309 char *jab_getid(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
310
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
311 void jab_send(jconn j, xmlnode x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
312 void jab_send_raw(jconn j, const char *str);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
313 void jab_recv(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
314 void jab_poll(jconn j, int timeout);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
315
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
316 char *jab_auth(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
317 char *jab_reg(jconn j);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
318
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
319 #ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
320 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
321 #endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
322
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
323 #endif /* INCL_JABBER_H */