agoo 2.5.5 → 2.5.6
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of agoo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/ext/agoo/agoo.c +4 -3
- data/ext/agoo/atomic.h +120 -0
- data/ext/agoo/bind.c +52 -52
- data/ext/agoo/bind.h +13 -13
- data/ext/agoo/con.c +499 -481
- data/ext/agoo/con.h +47 -39
- data/ext/agoo/debug.c +42 -42
- data/ext/agoo/debug.h +1 -1
- data/ext/agoo/doc.c +17 -17
- data/ext/agoo/doc.h +12 -12
- data/ext/agoo/err.c +18 -18
- data/ext/agoo/err.h +27 -27
- data/ext/agoo/error_stream.c +9 -9
- data/ext/agoo/extconf.rb +3 -0
- data/ext/agoo/gqlintro.c +43 -43
- data/ext/agoo/gqlintro.h +1 -1
- data/ext/agoo/gqlvalue.c +131 -131
- data/ext/agoo/gqlvalue.h +32 -32
- data/ext/agoo/graphql.c +158 -158
- data/ext/agoo/graphql.h +34 -33
- data/ext/agoo/hook.c +15 -14
- data/ext/agoo/hook.h +18 -14
- data/ext/agoo/http.c +14 -14
- data/ext/agoo/http.h +4 -4
- data/ext/agoo/kinds.h +5 -5
- data/ext/agoo/log.c +232 -224
- data/ext/agoo/log.h +93 -93
- data/ext/agoo/method.h +17 -17
- data/ext/agoo/page.c +88 -86
- data/ext/agoo/page.h +21 -21
- data/ext/agoo/pub.c +36 -36
- data/ext/agoo/pub.h +23 -23
- data/ext/agoo/queue.c +37 -38
- data/ext/agoo/queue.h +20 -19
- data/ext/agoo/rack_logger.c +13 -13
- data/ext/agoo/ready.c +357 -0
- data/ext/agoo/ready.h +41 -0
- data/ext/agoo/req.c +11 -11
- data/ext/agoo/req.h +30 -31
- data/ext/agoo/request.c +46 -46
- data/ext/agoo/request.h +2 -2
- data/ext/agoo/res.c +40 -18
- data/ext/agoo/res.h +14 -14
- data/ext/agoo/response.c +6 -6
- data/ext/agoo/response.h +9 -9
- data/ext/agoo/rhook.c +3 -3
- data/ext/agoo/rhook.h +1 -1
- data/ext/agoo/rlog.c +47 -42
- data/ext/agoo/rlog.h +0 -1
- data/ext/agoo/rresponse.c +33 -33
- data/ext/agoo/rresponse.h +1 -1
- data/ext/agoo/rserver.c +184 -175
- data/ext/agoo/rserver.h +2 -2
- data/ext/agoo/rupgraded.c +41 -41
- data/ext/agoo/rupgraded.h +3 -3
- data/ext/agoo/sdl.c +80 -80
- data/ext/agoo/sdl.h +1 -1
- data/ext/agoo/seg.h +2 -2
- data/ext/agoo/server.c +143 -117
- data/ext/agoo/server.h +43 -42
- data/ext/agoo/sse.c +7 -7
- data/ext/agoo/sse.h +4 -4
- data/ext/agoo/subject.c +5 -5
- data/ext/agoo/subject.h +6 -6
- data/ext/agoo/text.c +21 -21
- data/ext/agoo/text.h +14 -13
- data/ext/agoo/upgraded.c +41 -40
- data/ext/agoo/upgraded.h +41 -40
- data/ext/agoo/websocket.c +42 -42
- data/ext/agoo/websocket.h +16 -16
- data/lib/agoo/version.rb +1 -1
- data/test/static_test.rb +2 -0
- metadata +5 -5
- data/ext/agoo/log_queue.h +0 -30
- data/ext/agoo/sub.c +0 -111
- data/ext/agoo/sub.h +0 -36
data/ext/agoo/con.h
CHANGED
@@ -16,50 +16,58 @@
|
|
16
16
|
|
17
17
|
#define MAX_HEADER_SIZE 8192
|
18
18
|
|
19
|
-
struct
|
20
|
-
struct
|
21
|
-
struct
|
22
|
-
struct
|
23
|
-
struct
|
19
|
+
struct _agooUpgraded;
|
20
|
+
struct _agooReq;
|
21
|
+
struct _agooRes;
|
22
|
+
struct _agooBind;
|
23
|
+
struct _agooQueue;
|
24
24
|
|
25
|
-
typedef struct
|
26
|
-
struct
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
typedef struct _agooConLoop {
|
26
|
+
struct _agooConLoop *next;
|
27
|
+
struct _agooQueue pub_queue;
|
28
|
+
pthread_t thread;
|
29
|
+
int id;
|
30
|
+
// TBD use mutex for head and tail, volatile also
|
31
|
+
struct _agooRes *res_head;
|
32
|
+
struct _agooRes *res_tail;
|
33
|
+
|
34
|
+
pthread_mutex_t lock;
|
35
|
+
|
36
|
+
} *agooConLoop;
|
37
|
+
|
38
|
+
typedef struct _agooCon {
|
39
|
+
struct _agooCon *next;
|
40
|
+
int sock;
|
41
|
+
struct _agooBind *bind;
|
42
|
+
struct pollfd *pp;
|
43
|
+
uint64_t id;
|
44
|
+
char buf[MAX_HEADER_SIZE];
|
45
|
+
size_t bcnt;
|
33
46
|
|
34
|
-
ssize_t
|
35
|
-
ssize_t
|
47
|
+
ssize_t mcnt; // how much has been read so far
|
48
|
+
ssize_t wcnt; // how much has been written
|
36
49
|
|
37
|
-
double
|
38
|
-
bool
|
39
|
-
bool
|
40
|
-
volatile bool
|
41
|
-
struct
|
42
|
-
struct
|
43
|
-
struct
|
50
|
+
double timeout;
|
51
|
+
bool closing;
|
52
|
+
bool dead;
|
53
|
+
volatile bool hijacked;
|
54
|
+
struct _agooReq *req;
|
55
|
+
struct _agooRes *res_head;
|
56
|
+
struct _agooRes *res_tail;
|
44
57
|
|
45
|
-
struct
|
46
|
-
|
58
|
+
struct _agooUpgraded *up; // only set for push connections
|
59
|
+
agooConLoop loop;
|
60
|
+
} *agooCon;
|
47
61
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
pthread_t thread;
|
52
|
-
int id;
|
53
|
-
} *ConLoop;
|
54
|
-
|
55
|
-
extern Con con_create(Err err, int sock, uint64_t id, struct _Bind *b);
|
56
|
-
extern void con_destroy(Con c);
|
57
|
-
extern const char* con_header_value(const char *header, int hlen, const char *key, int *vlen);
|
62
|
+
extern agooCon agoo_con_create(agooErr err, int sock, uint64_t id, struct _agooBind *b);
|
63
|
+
extern void agoo_con_destroy(agooCon c);
|
64
|
+
extern const char* agoo_con_header_value(const char *header, int hlen, const char *key, int *vlen);
|
58
65
|
|
59
|
-
extern
|
66
|
+
extern agooConLoop agoo_conloop_create(agooErr err, int id);
|
67
|
+
extern void agoo_conloop_destroy(agooConLoop loop);
|
60
68
|
|
61
|
-
extern bool
|
62
|
-
extern bool
|
63
|
-
extern short
|
69
|
+
extern bool agoo_con_http_read(agooCon c);
|
70
|
+
extern bool agoo_con_http_write(agooCon c);
|
71
|
+
extern short agoo_con_http_events(agooCon c);
|
64
72
|
|
65
|
-
#endif
|
73
|
+
#endif // AGOO_CON_H
|
data/ext/agoo/debug.c
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
|
11
11
|
#include "debug.h"
|
12
12
|
|
13
|
-
typedef struct
|
14
|
-
struct
|
13
|
+
typedef struct _rec {
|
14
|
+
struct _rec *next;
|
15
15
|
void *ptr;
|
16
16
|
const char *type;
|
17
17
|
const char *file;
|
@@ -21,45 +21,45 @@ typedef struct _Rec {
|
|
21
21
|
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
|
22
22
|
static Rec recs = NULL;
|
23
23
|
|
24
|
-
atomic_int mem_bind = 0;
|
25
|
-
atomic_int mem_cb = 0;
|
26
|
-
atomic_int mem_con = 0;
|
27
|
-
atomic_int mem_cslot = 0;
|
28
|
-
atomic_int mem_err_stream = 0;
|
29
|
-
atomic_int mem_eval_threads = 0;
|
30
|
-
atomic_int mem_group = 0;
|
31
|
-
atomic_int mem_graphql_arg = 0;
|
32
|
-
atomic_int mem_graphql_directive = 0;
|
33
|
-
atomic_int mem_graphql_field = 0;
|
34
|
-
atomic_int mem_graphql_link = 0;
|
35
|
-
atomic_int mem_graphql_slot = 0;
|
36
|
-
atomic_int mem_graphql_type = 0;
|
37
|
-
atomic_int mem_graphql_value = 0;
|
38
|
-
atomic_int mem_group_path = 0;
|
39
|
-
atomic_int mem_header = 0;
|
40
|
-
atomic_int mem_hook = 0;
|
41
|
-
atomic_int mem_hook_pattern = 0;
|
42
|
-
atomic_int mem_http_slot = 0;
|
43
|
-
atomic_int mem_log_entry = 0;
|
44
|
-
atomic_int mem_log_what = 0;
|
45
|
-
atomic_int mem_log_tid = 0;
|
46
|
-
atomic_int mem_mime_slot = 0;
|
47
|
-
atomic_int mem_page = 0;
|
48
|
-
atomic_int mem_page_msg = 0;
|
49
|
-
atomic_int mem_page_path = 0;
|
50
|
-
atomic_int mem_page_slot = 0;
|
51
|
-
atomic_int mem_pub = 0;
|
52
|
-
atomic_int mem_qitem = 0;
|
53
|
-
atomic_int mem_queue_item = 0;
|
54
|
-
atomic_int mem_rack_logger = 0;
|
55
|
-
atomic_int mem_req = 0;
|
56
|
-
atomic_int mem_res = 0;
|
57
|
-
atomic_int mem_res_body = 0;
|
58
|
-
atomic_int mem_response = 0;
|
59
|
-
atomic_int mem_subject = 0;
|
60
|
-
atomic_int mem_text = 0;
|
61
|
-
atomic_int mem_to_s = 0;
|
62
|
-
atomic_int mem_upgraded = 0;
|
24
|
+
atomic_int mem_bind = AGOO_ATOMIC_INT_INIT(0);
|
25
|
+
atomic_int mem_cb = AGOO_ATOMIC_INT_INIT(0);
|
26
|
+
atomic_int mem_con = AGOO_ATOMIC_INT_INIT(0);
|
27
|
+
atomic_int mem_cslot = AGOO_ATOMIC_INT_INIT(0);
|
28
|
+
atomic_int mem_err_stream = AGOO_ATOMIC_INT_INIT(0);
|
29
|
+
atomic_int mem_eval_threads = AGOO_ATOMIC_INT_INIT(0);
|
30
|
+
atomic_int mem_group = AGOO_ATOMIC_INT_INIT(0);
|
31
|
+
atomic_int mem_graphql_arg = AGOO_ATOMIC_INT_INIT(0);
|
32
|
+
atomic_int mem_graphql_directive = AGOO_ATOMIC_INT_INIT(0);
|
33
|
+
atomic_int mem_graphql_field = AGOO_ATOMIC_INT_INIT(0);
|
34
|
+
atomic_int mem_graphql_link = AGOO_ATOMIC_INT_INIT(0);
|
35
|
+
atomic_int mem_graphql_slot = AGOO_ATOMIC_INT_INIT(0);
|
36
|
+
atomic_int mem_graphql_type = AGOO_ATOMIC_INT_INIT(0);
|
37
|
+
atomic_int mem_graphql_value = AGOO_ATOMIC_INT_INIT(0);
|
38
|
+
atomic_int mem_group_path = AGOO_ATOMIC_INT_INIT(0);
|
39
|
+
atomic_int mem_header = AGOO_ATOMIC_INT_INIT(0);
|
40
|
+
atomic_int mem_hook = AGOO_ATOMIC_INT_INIT(0);
|
41
|
+
atomic_int mem_hook_pattern = AGOO_ATOMIC_INT_INIT(0);
|
42
|
+
atomic_int mem_http_slot = AGOO_ATOMIC_INT_INIT(0);
|
43
|
+
atomic_int mem_log_entry = AGOO_ATOMIC_INT_INIT(0);
|
44
|
+
atomic_int mem_log_what = AGOO_ATOMIC_INT_INIT(0);
|
45
|
+
atomic_int mem_log_tid = AGOO_ATOMIC_INT_INIT(0);
|
46
|
+
atomic_int mem_mime_slot = AGOO_ATOMIC_INT_INIT(0);
|
47
|
+
atomic_int mem_page = AGOO_ATOMIC_INT_INIT(0);
|
48
|
+
atomic_int mem_page_msg = AGOO_ATOMIC_INT_INIT(0);
|
49
|
+
atomic_int mem_page_path = AGOO_ATOMIC_INT_INIT(0);
|
50
|
+
atomic_int mem_page_slot = AGOO_ATOMIC_INT_INIT(0);
|
51
|
+
atomic_int mem_pub = AGOO_ATOMIC_INT_INIT(0);
|
52
|
+
atomic_int mem_qitem = AGOO_ATOMIC_INT_INIT(0);
|
53
|
+
atomic_int mem_queue_item = AGOO_ATOMIC_INT_INIT(0);
|
54
|
+
atomic_int mem_rack_logger = AGOO_ATOMIC_INT_INIT(0);
|
55
|
+
atomic_int mem_req = AGOO_ATOMIC_INT_INIT(0);
|
56
|
+
atomic_int mem_res = AGOO_ATOMIC_INT_INIT(0);
|
57
|
+
atomic_int mem_res_body = AGOO_ATOMIC_INT_INIT(0);
|
58
|
+
atomic_int mem_response = AGOO_ATOMIC_INT_INIT(0);
|
59
|
+
atomic_int mem_subject = AGOO_ATOMIC_INT_INIT(0);
|
60
|
+
atomic_int mem_text = AGOO_ATOMIC_INT_INIT(0);
|
61
|
+
atomic_int mem_to_s = AGOO_ATOMIC_INT_INIT(0);
|
62
|
+
atomic_int mem_upgraded = AGOO_ATOMIC_INT_INIT(0);
|
63
63
|
|
64
64
|
#ifdef MEM_DEBUG
|
65
65
|
static void
|
@@ -159,7 +159,7 @@ debug_rreport() {
|
|
159
159
|
|
160
160
|
void
|
161
161
|
debug_add(void *ptr, const char *type, const char *file, int line) {
|
162
|
-
Rec r = (Rec)malloc(sizeof(struct
|
162
|
+
Rec r = (Rec)malloc(sizeof(struct _rec));
|
163
163
|
|
164
164
|
r->ptr = ptr;
|
165
165
|
r->type = type;
|
data/ext/agoo/debug.h
CHANGED
data/ext/agoo/doc.c
CHANGED
@@ -19,7 +19,7 @@ pttttttttttttttttttttttttttp.p.t\
|
|
19
19
|
................................";
|
20
20
|
|
21
21
|
void
|
22
|
-
|
22
|
+
agoo_doc_init(agooDoc doc, const char *str, int len) {
|
23
23
|
if (0 >= len) {
|
24
24
|
len = (int)strlen(str);
|
25
25
|
}
|
@@ -33,7 +33,7 @@ doc_init(Doc doc, const char *str, int len) {
|
|
33
33
|
}
|
34
34
|
|
35
35
|
int
|
36
|
-
|
36
|
+
agoo_doc_skip_white(agooDoc doc) {
|
37
37
|
const char *start = doc->cur;
|
38
38
|
|
39
39
|
for (; 'w' == char_map[*(uint8_t*)doc->cur]; doc->cur++) {
|
@@ -42,7 +42,7 @@ doc_skip_white(Doc doc) {
|
|
42
42
|
}
|
43
43
|
|
44
44
|
void
|
45
|
-
|
45
|
+
agoo_doc_skip_comment(agooDoc doc) {
|
46
46
|
for (; true; doc->cur++) {
|
47
47
|
switch (*doc->cur) {
|
48
48
|
case '\r':
|
@@ -55,7 +55,7 @@ doc_skip_comment(Doc doc) {
|
|
55
55
|
}
|
56
56
|
|
57
57
|
void
|
58
|
-
|
58
|
+
agoo_doc_read_token(agooDoc doc) {
|
59
59
|
if ('t' == char_map[*(uint8_t*)doc->cur] && '9' < *doc->cur) {
|
60
60
|
doc->cur++;
|
61
61
|
for (; 't' == char_map[*(uint8_t*)doc->cur]; doc->cur++) {
|
@@ -64,11 +64,11 @@ doc_read_token(Doc doc) {
|
|
64
64
|
}
|
65
65
|
|
66
66
|
void
|
67
|
-
|
67
|
+
agoo_doc_next_token(agooDoc doc) {
|
68
68
|
while (true) {
|
69
|
-
|
69
|
+
agoo_doc_skip_white(doc);
|
70
70
|
if ('#' == *doc->cur) {
|
71
|
-
|
71
|
+
agoo_doc_skip_comment(doc);
|
72
72
|
} else {
|
73
73
|
break;
|
74
74
|
}
|
@@ -77,12 +77,12 @@ doc_next_token(Doc doc) {
|
|
77
77
|
|
78
78
|
// Just find end.
|
79
79
|
int
|
80
|
-
|
80
|
+
agoo_doc_read_string(agooErr err, agooDoc doc) {
|
81
81
|
doc->cur++; // skip first "
|
82
82
|
if ('"' == *doc->cur) { // a """ string or an empty string
|
83
83
|
doc->cur++;
|
84
84
|
if ('"' != *doc->cur) {
|
85
|
-
return
|
85
|
+
return AGOO_ERR_OK; // empty string
|
86
86
|
}
|
87
87
|
doc->cur++;
|
88
88
|
for (; doc->cur < doc->end; doc->cur++) {
|
@@ -102,13 +102,13 @@ doc_read_string(Err err, Doc doc) {
|
|
102
102
|
}
|
103
103
|
}
|
104
104
|
if (doc->end <= doc->cur) {
|
105
|
-
return
|
105
|
+
return agoo_doc_err(doc, err, "String not terminated");
|
106
106
|
}
|
107
|
-
return
|
107
|
+
return AGOO_ERR_OK;
|
108
108
|
}
|
109
109
|
|
110
110
|
int
|
111
|
-
|
111
|
+
agoo_doc_err(agooDoc doc, agooErr err, const char *fmt, ...) {
|
112
112
|
va_list ap;
|
113
113
|
char msg[248];
|
114
114
|
int line = 0;
|
@@ -116,14 +116,14 @@ doc_err(Doc doc, Err err, const char *fmt, ...) {
|
|
116
116
|
|
117
117
|
va_start(ap, fmt);
|
118
118
|
vsnprintf(msg, sizeof(msg), fmt, ap);
|
119
|
-
|
119
|
+
agoo_doc_location(doc, &line, &col);
|
120
120
|
va_end(ap);
|
121
121
|
|
122
|
-
return
|
122
|
+
return agoo_err_set(err, AGOO_ERR_PARSE, "%s at %d:%d", msg, line, col);
|
123
123
|
}
|
124
124
|
|
125
125
|
void
|
126
|
-
|
126
|
+
agoo_doc_location(agooDoc doc, int *linep, int *colp) {
|
127
127
|
const char *s;
|
128
128
|
int line = 1;
|
129
129
|
int col = 1;
|
@@ -151,9 +151,9 @@ doc_location(Doc doc, int *linep, int *colp) {
|
|
151
151
|
}
|
152
152
|
|
153
153
|
gqlValue
|
154
|
-
|
154
|
+
agoo_doc_read_value(agooErr err, agooDoc doc) {
|
155
155
|
// TBD handle list and object as well as scalars, object is typeless
|
156
|
-
// TBD put this in
|
156
|
+
// TBD put this in agoo_doc_read_value
|
157
157
|
return NULL;
|
158
158
|
}
|
159
159
|
|
data/ext/agoo/doc.h
CHANGED
@@ -9,26 +9,26 @@
|
|
9
9
|
|
10
10
|
struct _gqlValue;
|
11
11
|
|
12
|
-
typedef struct
|
12
|
+
typedef struct _agooDoc {
|
13
13
|
const char *str;
|
14
14
|
const char *cur;
|
15
15
|
const char *end;
|
16
|
-
} *
|
16
|
+
} *agooDoc;
|
17
17
|
|
18
|
-
extern void
|
18
|
+
extern void agoo_doc_init(agooDoc doc, const char *str, int len);
|
19
19
|
|
20
|
-
extern int
|
21
|
-
extern void
|
22
|
-
extern int
|
20
|
+
extern int agoo_doc_skip_white(agooDoc doc);
|
21
|
+
extern void agoo_doc_skip_comment(agooDoc doc);
|
22
|
+
extern int agoo_doc_read_desc(agooErr err, agooDoc doc);
|
23
23
|
|
24
|
-
extern void
|
25
|
-
extern void
|
24
|
+
extern void agoo_doc_next_token(agooDoc doc);
|
25
|
+
extern void agoo_doc_read_token(agooDoc doc);
|
26
26
|
|
27
|
-
extern int
|
27
|
+
extern int agoo_doc_read_string(agooErr err, agooDoc doc);
|
28
28
|
|
29
|
-
extern int
|
30
|
-
extern void
|
29
|
+
extern int agoo_doc_err(agooDoc doc, agooErr err, const char *fmt, ...);
|
30
|
+
extern void agoo_doc_location(agooDoc doc, int *linep, int *colp);
|
31
31
|
|
32
|
-
extern struct _gqlValue*
|
32
|
+
extern struct _gqlValue* agoo_doc_read_value(agooErr err, agooDoc doc);
|
33
33
|
|
34
34
|
#endif // AGOO_DOC_H
|
data/ext/agoo/err.c
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#endif
|
12
12
|
|
13
13
|
int
|
14
|
-
|
14
|
+
agoo_err_set(agooErr err, int code, const char *fmt, ...) {
|
15
15
|
va_list ap;
|
16
16
|
|
17
17
|
va_start(ap, fmt);
|
@@ -23,7 +23,7 @@ err_set(Err err, int code, const char *fmt, ...) {
|
|
23
23
|
}
|
24
24
|
|
25
25
|
int
|
26
|
-
|
26
|
+
agoo_err_no(agooErr err, const char *fmt, ...) {
|
27
27
|
int cnt = 0;
|
28
28
|
|
29
29
|
if (NULL != fmt) {
|
@@ -45,32 +45,32 @@ err_no(Err err, const char *fmt, ...) {
|
|
45
45
|
}
|
46
46
|
|
47
47
|
void
|
48
|
-
|
49
|
-
err->code =
|
48
|
+
agoo_err_clear(agooErr err) {
|
49
|
+
err->code = AGOO_ERR_OK;
|
50
50
|
*err->msg = '\0';
|
51
51
|
}
|
52
52
|
|
53
53
|
const char*
|
54
|
-
|
54
|
+
agoo_err_str(agooErrCode code) {
|
55
55
|
const char *str = NULL;
|
56
56
|
|
57
|
-
if (code <
|
57
|
+
if (code < AGOO_ERR_START) {
|
58
58
|
str = strerror(code);
|
59
59
|
}
|
60
60
|
if (NULL == str) {
|
61
61
|
switch (code) {
|
62
|
-
case
|
63
|
-
case
|
64
|
-
case
|
65
|
-
case
|
66
|
-
case
|
67
|
-
case
|
68
|
-
case
|
69
|
-
case
|
70
|
-
case
|
71
|
-
case
|
72
|
-
case
|
73
|
-
case
|
62
|
+
case AGOO_ERR_PARSE: str = "parse error"; break;
|
63
|
+
case AGOO_ERR_READ: str = "read failed"; break;
|
64
|
+
case AGOO_ERR_WRITE: str = "write failed"; break;
|
65
|
+
case AGOO_ERR_ARG: str = "invalid argument"; break;
|
66
|
+
case AGOO_ERR_NOT_FOUND:str = "not found"; break;
|
67
|
+
case AGOO_ERR_THREAD: str = "thread error"; break;
|
68
|
+
case AGOO_ERR_NETWORK: str = "network error"; break;
|
69
|
+
case AGOO_ERR_LOCK: str = "lock error"; break;
|
70
|
+
case AGOO_ERR_FREE: str = "already freed"; break;
|
71
|
+
case AGOO_ERR_IN_USE: str = "in use"; break;
|
72
|
+
case AGOO_ERR_TOO_MANY: str = "too many"; break;
|
73
|
+
case AGOO_ERR_TYPE: str = "type error"; break;
|
74
74
|
default: str = "unknown error"; break;
|
75
75
|
}
|
76
76
|
}
|
data/ext/agoo/err.h
CHANGED
@@ -5,41 +5,41 @@
|
|
5
5
|
|
6
6
|
#include <errno.h>
|
7
7
|
|
8
|
-
#define
|
9
|
-
#define
|
8
|
+
#define AGOO_ERR_START 300
|
9
|
+
#define AGOO_ERR_INIT { 0, { 0 } }
|
10
10
|
|
11
11
|
typedef enum {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
}
|
12
|
+
AGOO_ERR_OK = 0,
|
13
|
+
AGOO_ERR_MEMORY = ENOMEM,
|
14
|
+
AGOO_ERR_DENIED = EACCES,
|
15
|
+
AGOO_ERR_IMPL = ENOSYS,
|
16
|
+
AGOO_ERR_PARSE = AGOO_ERR_START,
|
17
|
+
AGOO_ERR_READ,
|
18
|
+
AGOO_ERR_WRITE,
|
19
|
+
AGOO_ERR_OVERFLOW,
|
20
|
+
AGOO_ERR_ARG,
|
21
|
+
AGOO_ERR_NOT_FOUND,
|
22
|
+
AGOO_ERR_THREAD,
|
23
|
+
AGOO_ERR_NETWORK,
|
24
|
+
AGOO_ERR_LOCK,
|
25
|
+
AGOO_ERR_FREE,
|
26
|
+
AGOO_ERR_IN_USE,
|
27
|
+
AGOO_ERR_TOO_MANY,
|
28
|
+
AGOO_ERR_TYPE,
|
29
|
+
AGOO_ERR_LAST
|
30
|
+
} agooErrCode;
|
31
31
|
|
32
32
|
// The struct used to report errors or status after a function returns. The
|
33
33
|
// struct must be initialized before use as most calls that take an err
|
34
34
|
// argument will return immediately if an error has already occurred.
|
35
|
-
typedef struct
|
35
|
+
typedef struct _agooErr {
|
36
36
|
int code;
|
37
37
|
char msg[256];
|
38
|
-
} *
|
38
|
+
} *agooErr;
|
39
39
|
|
40
|
-
extern int
|
41
|
-
extern int
|
42
|
-
extern const char*
|
43
|
-
extern void
|
40
|
+
extern int agoo_err_set(agooErr err, int code, const char *fmt, ...);
|
41
|
+
extern int agoo_err_no(agooErr err, const char *fmt, ...);
|
42
|
+
extern const char* agoo_err_str(agooErrCode code);
|
43
|
+
extern void agoo_err_clear(agooErr err);
|
44
44
|
|
45
45
|
#endif /* AGOO_ERR_H */
|