stropheruby 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +9 -0
- data/History.txt +4 -0
- data/Manifest.txt +40 -0
- data/PostInstall.txt +4 -0
- data/README.txt +28 -0
- data/Rakefile +21 -0
- data/examples/xmpp_client.rb +77 -0
- data/ext/auth.c +990 -0
- data/ext/common.h +287 -0
- data/ext/conn.c +611 -0
- data/ext/ctx.c +416 -0
- data/ext/event.c +351 -0
- data/ext/extconf.rb +8 -0
- data/ext/handler.c +592 -0
- data/ext/hash.c +278 -0
- data/ext/hash.h +64 -0
- data/ext/jid.c +177 -0
- data/ext/md5.c +289 -0
- data/ext/md5.h +41 -0
- data/ext/ostypes.h +27 -0
- data/ext/parser.c +208 -0
- data/ext/sasl.c +614 -0
- data/ext/sasl.h +44 -0
- data/ext/sha1.c +389 -0
- data/ext/sha1.h +31 -0
- data/ext/snprintf.c +839 -0
- data/ext/sock.c +911 -0
- data/ext/sock.h +51 -0
- data/ext/stanza.c +908 -0
- data/ext/strophe.h +372 -0
- data/ext/strophe_ruby.c +721 -0
- data/ext/thread.c +119 -0
- data/ext/thread.h +43 -0
- data/ext/tls.h +46 -0
- data/ext/tls_dummy.c +89 -0
- data/ext/util.c +107 -0
- data/ext/util.h +32 -0
- data/lib/strophe_ruby.rb +6 -0
- data/test/test_helper.rb +3 -0
- data/test/test_strophe_ruby.rb +11 -0
- data/test/test_strophe_ruby_extn.rb +9 -0
- metadata +111 -0
data/ext/thread.c
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
/* thread.c
|
2
|
+
** strophe XMPP client library -- thread abstraction
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* Thread absraction.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <stdio.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
|
22
|
+
#ifdef _WIN32
|
23
|
+
#define WIN32_LEAN_AND_MEAN
|
24
|
+
#include <windows.h>
|
25
|
+
#else
|
26
|
+
#include <pthread.h>
|
27
|
+
#endif
|
28
|
+
|
29
|
+
#include "strophe.h"
|
30
|
+
#include "common.h"
|
31
|
+
#include "thread.h"
|
32
|
+
|
33
|
+
struct _mutex_t {
|
34
|
+
const xmpp_ctx_t *ctx;
|
35
|
+
|
36
|
+
#ifdef _WIN32
|
37
|
+
HANDLE mutex;
|
38
|
+
#else
|
39
|
+
pthread_mutex_t *mutex;
|
40
|
+
#endif
|
41
|
+
};
|
42
|
+
|
43
|
+
/* mutex functions */
|
44
|
+
|
45
|
+
mutex_t *mutex_create(const xmpp_ctx_t * ctx)
|
46
|
+
{
|
47
|
+
mutex_t *mutex;
|
48
|
+
|
49
|
+
mutex = xmpp_alloc(ctx, sizeof(mutex_t));
|
50
|
+
if (mutex) {
|
51
|
+
mutex->ctx = ctx;
|
52
|
+
#ifdef _WIN32
|
53
|
+
mutex->mutex = CreateMutex(NULL, FALSE, NULL);
|
54
|
+
#else
|
55
|
+
mutex->mutex = xmpp_alloc(ctx, sizeof(pthread_mutex_t));
|
56
|
+
if (mutex->mutex)
|
57
|
+
if (pthread_mutex_init(mutex->mutex, NULL) != 0) {
|
58
|
+
xmpp_free(ctx, mutex->mutex);
|
59
|
+
mutex->mutex = NULL;
|
60
|
+
}
|
61
|
+
#endif
|
62
|
+
if (!mutex->mutex) {
|
63
|
+
xmpp_free(ctx, mutex);
|
64
|
+
mutex = NULL;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
return mutex;
|
69
|
+
}
|
70
|
+
|
71
|
+
int mutex_destroy(mutex_t *mutex)
|
72
|
+
{
|
73
|
+
int ret = 1;
|
74
|
+
const xmpp_ctx_t *ctx;
|
75
|
+
|
76
|
+
#ifdef _WIN32
|
77
|
+
if (mutex->mutex)
|
78
|
+
ret = CloseHandle(mutex->mutex);
|
79
|
+
#else
|
80
|
+
if (mutex->mutex)
|
81
|
+
ret = pthread_mutex_destroy(mutex->mutex) == 0;
|
82
|
+
#endif
|
83
|
+
ctx = mutex->ctx;
|
84
|
+
xmpp_free(ctx, mutex);
|
85
|
+
|
86
|
+
return ret;
|
87
|
+
}
|
88
|
+
|
89
|
+
int mutex_lock(mutex_t *mutex)
|
90
|
+
{
|
91
|
+
int ret;
|
92
|
+
|
93
|
+
#ifdef _WIN32
|
94
|
+
ret = WaitForSingleObject(mutex->mutex, INFINITE) == 0;
|
95
|
+
#else
|
96
|
+
ret = pthread_mutex_lock(mutex->mutex) == 0;
|
97
|
+
#endif
|
98
|
+
|
99
|
+
return ret;
|
100
|
+
}
|
101
|
+
|
102
|
+
int mutex_trylock(mutex_t *mutex)
|
103
|
+
{
|
104
|
+
/* TODO */
|
105
|
+
return 0;
|
106
|
+
}
|
107
|
+
|
108
|
+
int mutex_unlock(mutex_t *mutex)
|
109
|
+
{
|
110
|
+
int ret;
|
111
|
+
|
112
|
+
#ifdef _WIN32
|
113
|
+
ret = ReleaseMutex(mutex->mutex);
|
114
|
+
#else
|
115
|
+
ret = pthread_mutex_unlock(mutex->mutex) == 0;
|
116
|
+
#endif
|
117
|
+
|
118
|
+
return ret;
|
119
|
+
}
|
data/ext/thread.h
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
/* thread.h
|
2
|
+
** strophe XMPP client library -- thread abstraction header
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* Threading abstraction API.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef __LIBSTROPHE_THREAD_H__
|
20
|
+
#define __LIBSTROPHE_THREAD_H__
|
21
|
+
|
22
|
+
#include <stdio.h>
|
23
|
+
#include <stdlib.h>
|
24
|
+
|
25
|
+
#ifdef _WIN32
|
26
|
+
#include <windows.h>
|
27
|
+
#else
|
28
|
+
#include <pthread.h>
|
29
|
+
#endif
|
30
|
+
|
31
|
+
#include "strophe.h"
|
32
|
+
|
33
|
+
typedef struct _mutex_t mutex_t;
|
34
|
+
|
35
|
+
/* mutex functions */
|
36
|
+
|
37
|
+
mutex_t *mutex_create(const xmpp_ctx_t *ctx);
|
38
|
+
int mutex_destroy(mutex_t *mutex);
|
39
|
+
int mutex_lock(mutex_t *mutex);
|
40
|
+
int mutex_trylock(mutex_t *mutex);
|
41
|
+
int mutex_unlock(mutex_t *mutex);
|
42
|
+
|
43
|
+
#endif /* __LIBSTROPHE_THREAD_H__ */
|
data/ext/tls.h
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
/* tls.h
|
2
|
+
** strophe XMPP client library -- TLS abstraction header
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* TLS abstraction API.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef __LIBSTROPHE_TLS_H__
|
20
|
+
#define __LIBSTROPHE_TLS_H__
|
21
|
+
|
22
|
+
#include "common.h"
|
23
|
+
#include "sock.h"
|
24
|
+
|
25
|
+
typedef struct _tls tls_t;
|
26
|
+
|
27
|
+
void tls_initialize(void);
|
28
|
+
void tls_shutdown(void);
|
29
|
+
|
30
|
+
tls_t *tls_new(xmpp_ctx_t *ctx, sock_t sock);
|
31
|
+
void tls_free(tls_t *tls);
|
32
|
+
|
33
|
+
int tls_set_credentials(tls_t *tls, const char *cafilename);
|
34
|
+
|
35
|
+
int tls_start(tls_t *tls);
|
36
|
+
int tls_stop(tls_t *tls);
|
37
|
+
|
38
|
+
int tls_error(tls_t *tls);
|
39
|
+
|
40
|
+
int tls_read(tls_t *tls, void * const buff, const size_t len);
|
41
|
+
int tls_write(tls_t *tls, const void * const buff, const size_t len);
|
42
|
+
|
43
|
+
int tls_clear_pending_write(tls_t *tls);
|
44
|
+
int tls_is_recoverable(int error);
|
45
|
+
|
46
|
+
#endif /* __LIBSTROPHE_TLS_H__ */
|
data/ext/tls_dummy.c
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
/* tls_dummy.c
|
2
|
+
** strophe XMPP client library -- TLS abstraction dummy impl.
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* TLS dummy implementation.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include "common.h"
|
20
|
+
#include "tls.h"
|
21
|
+
#include "sock.h"
|
22
|
+
|
23
|
+
struct _tls {
|
24
|
+
xmpp_ctx_t *ctx; /* do we need this? */
|
25
|
+
sock_t sock;
|
26
|
+
/* we don't implement anything */
|
27
|
+
};
|
28
|
+
|
29
|
+
void tls_initialize(void)
|
30
|
+
{
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
|
34
|
+
void tls_shutdown(void)
|
35
|
+
{
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
|
39
|
+
tls_t *tls_new(xmpp_ctx_t *ctx, sock_t sock)
|
40
|
+
{
|
41
|
+
/* always fail */
|
42
|
+
return NULL;
|
43
|
+
}
|
44
|
+
|
45
|
+
void tls_free(tls_t *tls)
|
46
|
+
{
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
|
50
|
+
int tls_set_credentials(tls_t *tls, const char *cafilename)
|
51
|
+
{
|
52
|
+
return -1;
|
53
|
+
}
|
54
|
+
|
55
|
+
int tls_start(tls_t *tls)
|
56
|
+
{
|
57
|
+
return -1;
|
58
|
+
}
|
59
|
+
|
60
|
+
int tls_stop(tls_t *tls)
|
61
|
+
{
|
62
|
+
return -1;
|
63
|
+
}
|
64
|
+
|
65
|
+
int tls_error(tls_t *tls)
|
66
|
+
{
|
67
|
+
/* todo: some kind of error polling/dump */
|
68
|
+
return 0;
|
69
|
+
}
|
70
|
+
|
71
|
+
int tls_read(tls_t *tls, void * const buff, const size_t len)
|
72
|
+
{
|
73
|
+
return -1;
|
74
|
+
}
|
75
|
+
|
76
|
+
int tls_write(tls_t *tls, const void * const buff, const size_t len)
|
77
|
+
{
|
78
|
+
return -1;
|
79
|
+
}
|
80
|
+
|
81
|
+
int tls_clear_pending_write(tls_t *tls)
|
82
|
+
{
|
83
|
+
return -1;
|
84
|
+
}
|
85
|
+
|
86
|
+
int tls_is_recoverable(int error)
|
87
|
+
{
|
88
|
+
return 0;
|
89
|
+
}
|
data/ext/util.c
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
/* util.c
|
2
|
+
** strophe XMPP client library -- various utility functions
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* Utility functions.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <stdio.h>
|
20
|
+
#include <string.h>
|
21
|
+
|
22
|
+
#ifdef _WIN32
|
23
|
+
#include <winsock2.h>
|
24
|
+
#else
|
25
|
+
#include <sys/time.h>
|
26
|
+
#include <time.h>
|
27
|
+
#include <stdint.h>
|
28
|
+
#endif
|
29
|
+
|
30
|
+
#include "strophe.h"
|
31
|
+
#include "common.h"
|
32
|
+
#include "util.h"
|
33
|
+
|
34
|
+
/** implement our own strdup that uses the ctx allocator */
|
35
|
+
/** Duplicate a string.
|
36
|
+
* This function replaces the standard strdup library call with a version
|
37
|
+
* that uses the Strophe context object's allocator.
|
38
|
+
*
|
39
|
+
* @param ctx a Strophe context object
|
40
|
+
* @param s a string
|
41
|
+
*
|
42
|
+
* @return a new allocates string with the same data as s or NULL on error
|
43
|
+
*/
|
44
|
+
char *xmpp_strdup(const xmpp_ctx_t * const ctx, const char * const s)
|
45
|
+
{
|
46
|
+
size_t len;
|
47
|
+
char *copy;
|
48
|
+
|
49
|
+
len = strlen(s);
|
50
|
+
copy = xmpp_alloc(ctx, len + 1);
|
51
|
+
if (!copy) {
|
52
|
+
xmpp_error(ctx, "xmpp", "failed to allocate required memory");
|
53
|
+
return NULL;
|
54
|
+
}
|
55
|
+
|
56
|
+
memcpy(copy, s, len + 1);
|
57
|
+
|
58
|
+
return copy;
|
59
|
+
}
|
60
|
+
|
61
|
+
/** Return an integer based time stamp.
|
62
|
+
* This function uses gettimeofday or timeGetTime (on Win32 platforms) to
|
63
|
+
* compute an integer based time stamp. This is used internally by the
|
64
|
+
* event loop and timed handlers.
|
65
|
+
*
|
66
|
+
* @return an integer time stamp
|
67
|
+
*/
|
68
|
+
uint64_t time_stamp(void)
|
69
|
+
{
|
70
|
+
#ifdef _WIN32
|
71
|
+
return timeGetTime();
|
72
|
+
#else
|
73
|
+
struct timeval tv;
|
74
|
+
|
75
|
+
gettimeofday(&tv, NULL);
|
76
|
+
|
77
|
+
return (uint64_t)tv.tv_sec * 1000 + (uint64_t)tv.tv_usec / 1000;
|
78
|
+
#endif
|
79
|
+
}
|
80
|
+
|
81
|
+
/** Get the time elapsed between two time stamps.
|
82
|
+
* This function returns the time elapsed between t1 and t2 by subtracting
|
83
|
+
* t1 from t2. If t2 happened before t1, the result will be negative. This
|
84
|
+
* function is used internally by the event loop and timed handlers.
|
85
|
+
*
|
86
|
+
* @param t1 first time stamp
|
87
|
+
* @param t2 second time stamp
|
88
|
+
*
|
89
|
+
* @return number of milliseconds between the stamps
|
90
|
+
*/
|
91
|
+
uint64_t time_elapsed(uint64_t t1, uint64_t t2)
|
92
|
+
{
|
93
|
+
return (uint64_t)(t2 - t1);
|
94
|
+
}
|
95
|
+
|
96
|
+
/** Disconnect the stream with a memory error.
|
97
|
+
* This is a convenience function used internally by various parts of
|
98
|
+
* the Strophe library for terminating the connection because of a
|
99
|
+
* memory error.
|
100
|
+
*
|
101
|
+
* @param conn a Strophe connection object
|
102
|
+
*/
|
103
|
+
void disconnect_mem_error(xmpp_conn_t * const conn)
|
104
|
+
{
|
105
|
+
xmpp_error(conn->ctx, "xmpp", "Memory allocation error");
|
106
|
+
xmpp_disconnect(conn);
|
107
|
+
}
|
data/ext/util.h
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
/* util.h
|
2
|
+
** strophe XMPP client library -- various utility functions
|
3
|
+
**
|
4
|
+
** Copyright (C) 2005-2008 OGG, LLC. All rights reserved.
|
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
|
+
* Internally used utility functions.
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef __LIBSTROPHE_UTIL_H__
|
20
|
+
#define __LIBSTROPHE_UTIL_H__
|
21
|
+
|
22
|
+
#ifndef _WIN32
|
23
|
+
#include <stdint.h>
|
24
|
+
#else
|
25
|
+
#include "ostypes.h"
|
26
|
+
#endif
|
27
|
+
|
28
|
+
/* timing functions */
|
29
|
+
uint64_t time_stamp(void);
|
30
|
+
uint64_t time_elapsed(uint64_t t1, uint64_t t2);
|
31
|
+
|
32
|
+
#endif /* __LIBSTROPHE_UTIL_H__ */
|
data/lib/strophe_ruby.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stropheruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Fran\xC3\xA7ois Lamontagne"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-06 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.3
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email:
|
27
|
+
- flamontagne@gmail.com
|
28
|
+
executables: []
|
29
|
+
|
30
|
+
extensions:
|
31
|
+
- ext/extconf.rb
|
32
|
+
extra_rdoc_files:
|
33
|
+
- History.txt
|
34
|
+
- Manifest.txt
|
35
|
+
- PostInstall.txt
|
36
|
+
files:
|
37
|
+
- .autotest
|
38
|
+
- History.txt
|
39
|
+
- Manifest.txt
|
40
|
+
- PostInstall.txt
|
41
|
+
- README.txt
|
42
|
+
- Rakefile
|
43
|
+
- ext/md5.c
|
44
|
+
- ext/parser.c
|
45
|
+
- ext/util.c
|
46
|
+
- ext/strophe_ruby.c
|
47
|
+
- ext/conn.c
|
48
|
+
- ext/ctx.c
|
49
|
+
- ext/jid.c
|
50
|
+
- ext/handler.c
|
51
|
+
- ext/hash.c
|
52
|
+
- ext/sasl.c
|
53
|
+
- ext/event.c
|
54
|
+
- ext/auth.c
|
55
|
+
- ext/thread.c
|
56
|
+
- ext/stanza.c
|
57
|
+
- ext/tls_dummy.c
|
58
|
+
- ext/sha1.c
|
59
|
+
- ext/snprintf.c
|
60
|
+
- ext/sock.c
|
61
|
+
- ext/tls.h
|
62
|
+
- ext/sasl.h
|
63
|
+
- ext/thread.h
|
64
|
+
- ext/util.h
|
65
|
+
- ext/common.h
|
66
|
+
- ext/md5.h
|
67
|
+
- ext/hash.h
|
68
|
+
- ext/sha1.h
|
69
|
+
- ext/sock.h
|
70
|
+
- ext/strophe.h
|
71
|
+
- ext/ostypes.h
|
72
|
+
- lib/strophe_ruby.rb
|
73
|
+
- test/test_helper.rb
|
74
|
+
- test/test_strophe_ruby.rb
|
75
|
+
- test/test_strophe_ruby_extn.rb
|
76
|
+
- ext/extconf.rb
|
77
|
+
- examples/xmpp_client.rb
|
78
|
+
has_rdoc: true
|
79
|
+
homepage:
|
80
|
+
licenses: []
|
81
|
+
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options:
|
84
|
+
- --main
|
85
|
+
- README.txt
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
- ext
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
version:
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0"
|
100
|
+
version:
|
101
|
+
requirements: []
|
102
|
+
|
103
|
+
rubyforge_project: strophe_ruby
|
104
|
+
rubygems_version: 1.3.5
|
105
|
+
signing_key:
|
106
|
+
specification_version: 2
|
107
|
+
summary: strophe_ruby
|
108
|
+
test_files:
|
109
|
+
- test/test_strophe_ruby_extn.rb
|
110
|
+
- test/test_strophe_ruby.rb
|
111
|
+
- test/test_helper.rb
|