stropheruby 0.1.5 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/ext/event.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* event.c
2
2
  ** strophe XMPP client library -- event loop and management
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -31,7 +31,7 @@
31
31
  * example, a GUI program will already include an event loop to
32
32
  * process UI events from users, and xmpp_run_once() would be called
33
33
  * from an idle function.
34
- */
34
+ */
35
35
 
36
36
  #include <stdio.h>
37
37
  #include <stdlib.h>
@@ -49,6 +49,7 @@
49
49
 
50
50
  #include "strophe.h"
51
51
  #include "common.h"
52
+ #include "parser.h"
52
53
 
53
54
  #ifndef DEFAULT_TIMEOUT
54
55
  /** @def DEFAULT_TIMEOUT
@@ -83,6 +84,7 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
83
84
  int towrite;
84
85
  char buf[4096];
85
86
  uint64_t next;
87
+ long usec;
86
88
 
87
89
  if (ctx->loop_status == XMPP_LOOP_QUIT) return -2;
88
90
  ctx->loop_status = XMPP_LOOP_RUNNING;
@@ -128,16 +130,16 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
128
130
  }
129
131
 
130
132
  } else {
131
- ret = sock_write(conn->sock, &sq->data[sq->written], towrite);
133
+ ret = sock_write(conn->sock, &sq->data[sq->written], towrite);
132
134
 
133
- if (ret < 0 && !sock_is_recoverable(sock_error())) {
134
- /* an error occured */
135
- conn->error = sock_error();
136
- break;
137
- } else if (ret < towrite) {
138
- /* not all data could be sent now */
139
- if (ret >= 0) sq->written += ret;
140
- break;
135
+ if (ret < 0 && !sock_is_recoverable(sock_error())) {
136
+ /* an error occured */
137
+ conn->error = sock_error();
138
+ break;
139
+ } else if (ret < towrite) {
140
+ /* not all data could be sent now */
141
+ if (ret >= 0) sq->written += ret;
142
+ break;
141
143
  }
142
144
  }
143
145
 
@@ -168,7 +170,7 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
168
170
  /* reset parsers if needed */
169
171
  for (connitem = ctx->connlist; connitem; connitem = connitem->next) {
170
172
  if (connitem->conn->reset_parser)
171
- parser_reset(connitem->conn);
173
+ conn_parser_reset(connitem->conn);
172
174
  }
173
175
 
174
176
 
@@ -177,7 +179,7 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
177
179
  to be called */
178
180
  next = handler_fire_timed(ctx);
179
181
 
180
- long usec = ((next < timeout) ? next : timeout) * 1000;
182
+ usec = ((next < timeout) ? next : timeout) * 1000;
181
183
  tv.tv_sec = usec / 1000000;
182
184
  tv.tv_usec = usec % 1000000;
183
185
 
@@ -223,19 +225,15 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
223
225
 
224
226
  /* select errored */
225
227
  if (ret < 0) {
226
- if (!sock_is_recoverable(sock_error())) {
227
- xmpp_error(ctx, "xmpp", "event watcher internal error %d",
228
- sock_error());
229
- conn->error = sock_error();
228
+ if (!sock_is_recoverable(sock_error()))
229
+ xmpp_error(ctx, "xmpp", "event watcher internal error %d",
230
+ sock_error());
230
231
  return -1;
231
232
  }
232
- }
233
233
 
234
234
  /* no events happened */
235
- if (ret == 0) {
236
- return 1;
237
- }
238
-
235
+ if (ret == 0) return 1;
236
+
239
237
  /* process events */
240
238
  connitem = ctx->connlist;
241
239
  while (connitem) {
@@ -247,8 +245,7 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
247
245
  /* connection complete */
248
246
 
249
247
  /* check for error */
250
- conn->error = sock_connect_error(conn->sock);
251
- if (conn->error != 0) {
248
+ if (sock_connect_error(conn->sock) != 0) {
252
249
  /* connection failed */
253
250
  xmpp_debug(ctx, "xmpp", "connection failed");
254
251
  conn_disconnect(conn);
@@ -269,16 +266,15 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
269
266
  if (conn->tls) {
270
267
  ret = tls_read(conn->tls, buf, 4096);
271
268
  } else {
272
- ret = sock_read(conn->sock, buf, 4096);
269
+ ret = sock_read(conn->sock, buf, 4096);
273
270
  }
274
271
 
275
272
  if (ret > 0) {
276
- ret = XML_Parse(conn->parser, buf, ret, 0);
273
+ ret = parser_feed(conn->parser, buf, ret);
277
274
  if (!ret) {
278
275
  /* parse error, we need to shut down */
279
276
  /* FIXME */
280
277
  xmpp_debug(ctx, "xmpp", "parse error, disconnecting");
281
- conn -> error = -1;
282
278
  conn_disconnect(conn);
283
279
  }
284
280
  } else {
@@ -290,13 +286,13 @@ int xmpp_run_once(xmpp_ctx_t *ctx, const unsigned long timeout)
290
286
  conn_disconnect(conn);
291
287
  }
292
288
  } else {
293
- /* return of 0 means socket closed by server */
294
- xmpp_debug(ctx, "xmpp", "Socket closed by remote host.");
295
- conn->error = ECONNRESET;
296
- conn_disconnect(conn);
289
+ /* return of 0 means socket closed by server */
290
+ xmpp_debug(ctx, "xmpp", "Socket closed by remote host.");
291
+ conn->error = ECONNRESET;
292
+ conn_disconnect(conn);
293
+ }
297
294
  }
298
295
  }
299
- }
300
296
 
301
297
  break;
302
298
  case XMPP_STATE_DISCONNECTED:
data/ext/handler.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* handler.c
2
2
  ** strophe XMPP client library -- event handler management
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -66,6 +66,7 @@ void handler_fire_stanza(xmpp_conn_t * const conn,
66
66
  hash_drop(conn->id_handlers, id);
67
67
  hash_add(conn->id_handlers, id, next);
68
68
  }
69
+ xmpp_free(conn->ctx, item->id);
69
70
  xmpp_free(conn->ctx, item);
70
71
  item = NULL;
71
72
  }
@@ -89,7 +90,7 @@ void handler_fire_stanza(xmpp_conn_t * const conn,
89
90
  while (item) {
90
91
  /* skip newly added handlers */
91
92
  if (!item->enabled) {
92
- prev = item;
93
+ prev = item;
93
94
  item = item->next;
94
95
  continue;
95
96
  }
@@ -111,6 +112,9 @@ void handler_fire_stanza(xmpp_conn_t * const conn,
111
112
  prev->next = item->next;
112
113
  else
113
114
  conn->handlers = item->next;
115
+ if (item->ns) xmpp_free(conn->ctx, item->ns);
116
+ if (item->name) xmpp_free(conn->ctx, item->name);
117
+ if (item->type) xmpp_free(conn->ctx, item->type);
114
118
  xmpp_free(conn->ctx, item);
115
119
  item = NULL;
116
120
  }
data/ext/hash.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* hash.c
2
2
  ** strophe XMPP client library -- hash table implementation
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * Hash tables.
17
- */
17
+ */
18
18
 
19
19
  #include <stdlib.h>
20
20
  #include <string.h>
data/ext/hash.h CHANGED
@@ -1,7 +1,7 @@
1
1
  /* hash.h
2
2
  ** strophe XMPP client library -- hash table interface
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * Hash table API.
17
- */
17
+ */
18
18
 
19
19
  #ifndef __LIBSTROPHE_HASH_H__
20
20
  #define __LIBSTROPHE_HASH_H__
data/ext/jid.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* jid.c
2
2
  ** strophe XMPP client library -- helper functions for parsing JIDs
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
data/ext/md5.h CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  /** @file
8
8
  * MD5 hash API.
9
- */
9
+ */
10
10
 
11
11
  #ifndef MD5_H
12
12
  #define MD5_H
data/ext/ostypes.h CHANGED
@@ -2,7 +2,7 @@
2
2
  ** strophe XMPP client library -- type definitions for platforms
3
3
  ** without stdint.h
4
4
  **
5
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
5
+ ** Copyright (C) 2005-2009 Collecta, Inc.
6
6
  **
7
7
  ** This software is provided AS-IS with no warranty, either express
8
8
  ** or implied.
@@ -15,7 +15,7 @@
15
15
 
16
16
  /** @file
17
17
  * Type definitions for platforms without stdint.h.
18
- */
18
+ */
19
19
 
20
20
  #ifndef __LIBSTROPHE_OSTYPES_H__
21
21
  #define __LIBSTROPHE_OSTYPES_H__
data/ext/parser.h ADDED
@@ -0,0 +1,43 @@
1
+ /* parser.h
2
+ ** strophe XMPP client library -- parser structures and functions
3
+ **
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
+ **
6
+ ** This software is provided AS-IS with no warranty, either express or
7
+ ** implied.
8
+ **
9
+ ** This software is distributed under license and may not be copied,
10
+ ** modified or distributed except as expressly authorized under the
11
+ ** terms of the license contained in the file LICENSE.txt in this
12
+ ** distribution.
13
+ */
14
+
15
+ /** @file
16
+ * Internally used functions and structures.
17
+ */
18
+
19
+ #ifndef __LIBSTROPHE_PARSER_H__
20
+ #define __LIBSTROPHE_PARSER_H__
21
+
22
+ #include "strophe.h"
23
+
24
+ typedef struct _parser_t parser_t;
25
+
26
+ typedef void (*parser_start_callback)(char *name,
27
+ char **attrs,
28
+ void * const userdata);
29
+ typedef void (*parser_end_callback)(char *name, void * const userdata);
30
+ typedef void (*parser_stanza_callback)(xmpp_stanza_t *stanza,
31
+ void * const userdata);
32
+
33
+
34
+ parser_t *parser_new(xmpp_ctx_t *ctx,
35
+ parser_start_callback startcb,
36
+ parser_end_callback endcb,
37
+ parser_stanza_callback stanzacb,
38
+ void *userdata);
39
+ void parser_free(parser_t * const parser);
40
+ int parser_reset(parser_t *parser);
41
+ int parser_feed(parser_t *parser, char *chunk, int len);
42
+
43
+ #endif /* __LIBSTROPHE_PARSER_H__ */
@@ -0,0 +1,202 @@
1
+ /* parser.c
2
+ ** strophe XMPP client library -- xml parser handlers and utility functions
3
+ **
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
+ **
6
+ ** This software is provided AS-IS with no warranty, either express
7
+ ** or implied.
8
+ **
9
+ ** This software is distributed under license and may not be copied,
10
+ ** modified or distributed except as expressly authorized under the
11
+ ** terms of the license contained in the file LICENSE.txt in this
12
+ ** distribution.
13
+ */
14
+
15
+ /** @file
16
+ * XML parser handlers.
17
+ */
18
+
19
+ #include <stdio.h>
20
+ #include <stdlib.h>
21
+ #include <string.h>
22
+
23
+ #include <expat.h>
24
+
25
+ #include <strophe.h>
26
+ #include "common.h"
27
+ #include "parser.h"
28
+
29
+ struct _parser_t {
30
+ xmpp_ctx_t *ctx;
31
+ XML_Parser expat;
32
+ parser_start_callback startcb;
33
+ parser_end_callback endcb;
34
+ parser_stanza_callback stanzacb;
35
+ void *userdata;
36
+ int depth;
37
+ xmpp_stanza_t *stanza;
38
+ };
39
+
40
+ static void _set_attributes(xmpp_stanza_t *stanza, const XML_Char **attrs)
41
+ {
42
+ int i;
43
+
44
+ if (!attrs) return;
45
+
46
+ for (i = 0; attrs[i]; i += 2) {
47
+ xmpp_stanza_set_attribute(stanza, attrs[i], attrs[i+1]);
48
+ }
49
+ }
50
+
51
+ static void _start_element(void *userdata,
52
+ const XML_Char *name,
53
+ const XML_Char **attrs)
54
+ {
55
+ parser_t *parser = (parser_t *)userdata;
56
+ xmpp_stanza_t *child;
57
+
58
+ if (parser->depth == 0) {
59
+ /* notify the owner */
60
+ if (parser->startcb)
61
+ parser->startcb((char *)name, (char **)attrs,
62
+ parser->userdata);
63
+ } else {
64
+ /* build stanzas at depth 1 */
65
+ if (!parser->stanza && parser->depth != 1) {
66
+ /* something terrible happened */
67
+ /* FIXME: shutdown disconnect */
68
+ xmpp_error(parser->ctx, "parser", "oops, where did our stanza go?");
69
+ } else if (!parser->stanza) {
70
+ /* starting a new toplevel stanza */
71
+ parser->stanza = xmpp_stanza_new(parser->ctx);
72
+ if (!parser->stanza) {
73
+ /* FIXME: can't allocate, disconnect */
74
+ }
75
+ xmpp_stanza_set_name(parser->stanza, name);
76
+ _set_attributes(parser->stanza, attrs);
77
+ } else {
78
+ /* starting a child of parser->stanza */
79
+ child = xmpp_stanza_new(parser->ctx);
80
+ if (!child) {
81
+ /* FIXME: can't allocate, disconnect */
82
+ }
83
+ xmpp_stanza_set_name(child, name);
84
+ _set_attributes(child, attrs);
85
+
86
+ /* add child to parent */
87
+ xmpp_stanza_add_child(parser->stanza, child);
88
+
89
+ /* the child is owned by the toplevel stanza now */
90
+ xmpp_stanza_release(child);
91
+
92
+ /* make child the current stanza */
93
+ parser->stanza = child;
94
+ }
95
+ }
96
+
97
+ parser->depth++;
98
+ }
99
+
100
+ static void _end_element(void *userdata, const XML_Char *name)
101
+ {
102
+ parser_t *parser = (parser_t *)userdata;
103
+
104
+ parser->depth--;
105
+
106
+ if (parser->depth == 0) {
107
+ /* notify the owner */
108
+ if (parser->endcb)
109
+ parser->endcb((char *)name, parser->userdata);
110
+ } else {
111
+ if (parser->stanza->parent) {
112
+ /* we're finishing a child stanza, so set current to the parent */
113
+ parser->stanza = parser->stanza->parent;
114
+ } else {
115
+ if (parser->stanzacb)
116
+ parser->stanzacb(parser->stanza,
117
+ parser->userdata);
118
+ xmpp_stanza_release(parser->stanza);
119
+ parser->stanza = NULL;
120
+ }
121
+ }
122
+ }
123
+
124
+ static void _characters(void *userdata, const XML_Char *s, int len)
125
+ {
126
+ parser_t *parser = (parser_t *)userdata;
127
+ xmpp_stanza_t *stanza;
128
+
129
+ if (parser->depth < 2) return;
130
+
131
+ /* create and populate stanza */
132
+ stanza = xmpp_stanza_new(parser->ctx);
133
+ if (!stanza) {
134
+ /* FIXME: allocation error, disconnect */
135
+ return;
136
+ }
137
+ xmpp_stanza_set_text_with_size(stanza, s, len);
138
+
139
+ xmpp_stanza_add_child(parser->stanza, stanza);
140
+ xmpp_stanza_release(stanza);
141
+ }
142
+
143
+ parser_t *parser_new(xmpp_ctx_t *ctx,
144
+ parser_start_callback startcb,
145
+ parser_end_callback endcb,
146
+ parser_stanza_callback stanzacb,
147
+ void *userdata)
148
+ {
149
+ parser_t *parser;
150
+
151
+ parser = xmpp_alloc(ctx, sizeof(parser_t));
152
+ if (parser != NULL) {
153
+ parser->ctx = ctx;
154
+ parser->expat = NULL;
155
+ parser->startcb = startcb;
156
+ parser->endcb = endcb;
157
+ parser->stanzacb = stanzacb;
158
+ parser->userdata = userdata;
159
+ parser->depth = 0;
160
+ parser->stanza = NULL;
161
+
162
+ parser_reset(parser);
163
+ }
164
+
165
+ return parser;
166
+ }
167
+
168
+ /* free a parser */
169
+ void parser_free(parser_t *parser)
170
+ {
171
+ if (parser->expat)
172
+ XML_ParserFree(parser->expat);
173
+
174
+ xmpp_free(parser->ctx, parser);
175
+ }
176
+
177
+ /* shuts down and restarts XML parser. true on success */
178
+ int parser_reset(parser_t *parser)
179
+ {
180
+ if (parser->expat)
181
+ XML_ParserFree(parser->expat);
182
+
183
+ if (parser->stanza)
184
+ xmpp_stanza_release(parser->stanza);
185
+
186
+ parser->expat = XML_ParserCreate(NULL);
187
+ if (!parser->expat) return 0;
188
+
189
+ parser->depth = 0;
190
+ parser->stanza = NULL;
191
+
192
+ XML_SetUserData(parser->expat, parser);
193
+ XML_SetElementHandler(parser->expat, _start_element, _end_element);
194
+ XML_SetCharacterDataHandler(parser->expat, _characters);
195
+
196
+ return 1;
197
+ }
198
+
199
+ int parser_feed(parser_t *parser, char *chunk, int len)
200
+ {
201
+ return XML_Parse(parser->expat, chunk, len, 0);
202
+ }
data/ext/sasl.h CHANGED
@@ -1,7 +1,7 @@
1
1
  /* sasl.h
2
2
  ** strophe XMPP client library -- SASL authentication helpers
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * SASL authentication helpers.
17
- */
17
+ */
18
18
 
19
19
  #ifndef __LIBSTROPHE_SASL_H__
20
20
  #define __LIBSTROPHE_SASL_H__
@@ -39,6 +39,6 @@ int base64_decoded_len(xmpp_ctx_t *ctx,
39
39
  const char * const buffer, const unsigned len);
40
40
 
41
41
  unsigned char *base64_decode(xmpp_ctx_t *ctx,
42
- const char * const buffer, const unsigned len);
42
+ const char * const buffer, const unsigned len);
43
43
 
44
44
  #endif /* _LIBXMPP_SASL_H__ */
data/ext/sock.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* sock.c
2
2
  ** strophe XMPP client library -- socket abstraction implementation
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
data/ext/sock.h CHANGED
@@ -1,7 +1,7 @@
1
1
  /* sock.h
2
2
  ** strophe XMPP client library -- socket abstraction header
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * Socket abstraction API.
17
- */
17
+ */
18
18
 
19
19
  #ifndef __LIBSTROPHE_SOCK_H__
20
20
  #define __LIBSTROPHE_SOCK_H__
data/ext/stanza.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* stanza.c
2
2
  ** strophe XMPP client library -- XMPP stanza object and utilities
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -165,13 +165,13 @@ int xmpp_stanza_release(xmpp_stanza_t * const stanza)
165
165
  if (stanza->ref > 1)
166
166
  stanza->ref--;
167
167
  else {
168
- /* release all children */
169
- child = stanza->children;
170
- while (child) {
171
- tchild = child;
172
- child = child->next;
173
- xmpp_stanza_release(tchild);
174
- }
168
+ /* release all children */
169
+ child = stanza->children;
170
+ while (child) {
171
+ tchild = child;
172
+ child = child->next;
173
+ xmpp_stanza_release(tchild);
174
+ }
175
175
 
176
176
  if (stanza->attributes) hash_release(stanza->attributes);
177
177
  if (stanza->data) xmpp_free(stanza->ctx, stanza->data);
@@ -400,45 +400,6 @@ char *xmpp_stanza_get_name(xmpp_stanza_t * const stanza)
400
400
  return stanza->data;
401
401
  }
402
402
 
403
- /** Set or replace attributes on a stanza.
404
- * This function replaces all previous attributes (if any) with the
405
- * attributes given. It is used primarily by the XML parser during
406
- * stanza creation. All strings in the array are copied before placing them
407
- * inside the stanza object.
408
- *
409
- * @param stanza a Strophe stanza object
410
- * @param attr an array of strings with the attributes in the following
411
- * format: attr[i] = attribute name, attr[i+1] = attribute value
412
- *
413
- * @return XMPP_EOK on success, a number less than 0 on failure (XMPP_EMEM,
414
- * XMPP_EINVOP)
415
- *
416
- * @ingroup Stanza
417
- */
418
- int xmpp_stanza_set_attributes(xmpp_stanza_t * const stanza,
419
- const char * const * const attr)
420
- {
421
- int i;
422
- char *value;
423
-
424
- if (stanza->attributes != NULL)
425
- hash_release(stanza->attributes);
426
-
427
- stanza->attributes = hash_new(stanza->ctx, 8, xmpp_free);
428
- if (!stanza->attributes) return XMPP_EMEM;
429
-
430
- for (i = 0; attr[i]; i += 2) {
431
- value = xmpp_strdup(stanza->ctx, attr[i + 1]);
432
- if (!value) {
433
- /* FIXME: memory allocation error */
434
- continue;
435
- }
436
- hash_add(stanza->attributes, attr[i], value);
437
- }
438
-
439
- return XMPP_EOK;
440
- }
441
-
442
403
  /** Count the attributes in a stanza object.
443
404
  *
444
405
  * @param stanza a Strophe stanza object
data/ext/strophe.h CHANGED
@@ -1,7 +1,7 @@
1
1
  /* strophe.h
2
2
  ** strophe XMPP client library C API
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express or
7
7
  ** implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * Strophe public C API definitions.
17
- */
17
+ */
18
18
 
19
19
  #ifndef __LIBSTROPHE_STROPHE_H__
20
20
  #define __LIBSTROPHE_STROPHE_H__
@@ -212,16 +212,19 @@ xmpp_conn_t * xmpp_conn_clone(xmpp_conn_t * const conn);
212
212
  int xmpp_conn_release(xmpp_conn_t * const conn);
213
213
 
214
214
  const char *xmpp_conn_get_jid(const xmpp_conn_t * const conn);
215
+ const char *xmpp_conn_get_bound_jid(const xmpp_conn_t * const conn);
215
216
  void xmpp_conn_set_jid(xmpp_conn_t * const conn, const char * const jid);
216
217
  const char *xmpp_conn_get_pass(const xmpp_conn_t * const conn);
217
218
  void xmpp_conn_set_pass(xmpp_conn_t * const conn, const char * const pass);
219
+ unsigned int xmpp_conn_get_connect_timeout(const xmpp_conn_t * const conn);
220
+ void xmpp_conn_set_connect_timeout(xmpp_conn_t * const conn, const unsigned int timeout);
218
221
  xmpp_ctx_t* xmpp_conn_get_context(xmpp_conn_t * const conn);
219
222
 
220
- int xmpp_connect_client(xmpp_conn_t * const conn,
223
+ int xmpp_connect_client(xmpp_conn_t * const conn,
221
224
  const char * const altdomain,
222
225
  unsigned short altport,
223
- xmpp_conn_handler callback,
224
- void * const userdata);
226
+ xmpp_conn_handler callback,
227
+ void * const userdata);
225
228
 
226
229
  /*
227
230
  int xmpp_connect_component(conn, name)
data/ext/thread.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /* thread.c
2
2
  ** strophe XMPP client library -- thread abstraction
3
3
  **
4
- ** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
4
+ ** Copyright (C) 2005-2009 Collecta, Inc.
5
5
  **
6
6
  ** This software is provided AS-IS with no warranty, either express
7
7
  ** or implied.
@@ -14,7 +14,7 @@
14
14
 
15
15
  /** @file
16
16
  * Thread absraction.
17
- */
17
+ */
18
18
 
19
19
  #include <stdio.h>
20
20
  #include <stdlib.h>