plamo 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +12 -0
- data/Gemfile.lock +1 -1
- data/ext/plamo/plamo.c +5 -0
- data/ext/plamo/plamo.h +5 -0
- data/ext/plamo/plamo_app.c +26 -25
- data/ext/plamo/plamo_byte_array.c +28 -14
- data/ext/plamo/plamo_byte_array.h +1 -0
- data/ext/plamo/plamo_form_data.c +67 -0
- data/ext/plamo/plamo_form_data.h +6 -0
- data/ext/plamo/plamo_form_data_field.c +70 -0
- data/ext/plamo/plamo_form_data_field.h +9 -0
- data/ext/plamo/plamo_form_data_field_array.c +88 -0
- data/ext/plamo/plamo_form_data_field_array.h +9 -0
- data/ext/plamo/plamo_form_data_file.c +69 -0
- data/ext/plamo/plamo_form_data_file.h +9 -0
- data/ext/plamo/plamo_form_urlencoded.c +62 -0
- data/ext/plamo/plamo_form_urlencoded.h +6 -0
- data/ext/plamo/plamo_http_header.c +32 -31
- data/ext/plamo/plamo_http_header.h +1 -0
- data/ext/plamo/plamo_http_query.c +26 -21
- data/ext/plamo/plamo_http_query.h +1 -0
- data/ext/plamo/plamo_middleware.c +19 -18
- data/ext/plamo/plamo_middleware.h +1 -0
- data/ext/plamo/plamo_request.c +44 -45
- data/ext/plamo/plamo_request.h +1 -0
- data/ext/plamo/plamo_response.c +33 -33
- data/ext/plamo/plamo_response.h +1 -0
- data/ext/plamo/plamo_string_array.c +46 -27
- data/ext/plamo/plamo_string_array.h +1 -0
- data/lib/plamo/version.rb +1 -1
- metadata +13 -3
- data/ext/plamo/wrapper.h +0 -8
@@ -0,0 +1,9 @@
|
|
1
|
+
#ifndef RUBY_PLAMO_FORM_DATA_FIELD_ARRAY_H
|
2
|
+
#define RUBY_PLAMO_FORM_DATA_FIELD_ARRAY_H
|
3
|
+
|
4
|
+
extern VALUE rb_cPlamoFormDataFieldArray;
|
5
|
+
extern const rb_data_type_t rb_plamo_form_data_field_array_type;
|
6
|
+
|
7
|
+
void Init_plamo_form_data_field_array(void);
|
8
|
+
|
9
|
+
#endif /* RUBY_PLAMO_FORM_DATA_FIELD_ARRAY_H */
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#include "plamo.h"
|
2
|
+
|
3
|
+
VALUE rb_cPlamoFormDataFile;
|
4
|
+
|
5
|
+
const rb_data_type_t rb_plamo_form_data_file_type = {
|
6
|
+
"FormDataFile",
|
7
|
+
{
|
8
|
+
NULL,
|
9
|
+
NULL,
|
10
|
+
NULL,
|
11
|
+
},
|
12
|
+
NULL,
|
13
|
+
NULL,
|
14
|
+
0,
|
15
|
+
};
|
16
|
+
|
17
|
+
static VALUE allocate(VALUE klass) {
|
18
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_form_data_file_type, NULL);
|
19
|
+
}
|
20
|
+
|
21
|
+
static VALUE get_content_type(VALUE self) {
|
22
|
+
PlamoFormDataFile *plamo_form_data_file;
|
23
|
+
TypedData_Get_Struct(self, PlamoFormDataFile, &rb_plamo_form_data_file_type, plamo_form_data_file);
|
24
|
+
const char *str = plamo_form_data_file_get_content_type(plamo_form_data_file);
|
25
|
+
if (str != NULL) {
|
26
|
+
return rb_str_new2(str);
|
27
|
+
} else {
|
28
|
+
return Qnil;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
static VALUE get_file_name(VALUE self) {
|
33
|
+
PlamoFormDataFile *plamo_form_data_file;
|
34
|
+
TypedData_Get_Struct(self, PlamoFormDataFile, &rb_plamo_form_data_file_type, plamo_form_data_file);
|
35
|
+
const char *str = plamo_form_data_file_get_file_name(plamo_form_data_file);
|
36
|
+
if (str != NULL) {
|
37
|
+
return rb_str_new2(str);
|
38
|
+
} else {
|
39
|
+
return Qnil;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
static VALUE get_body(VALUE self) {
|
44
|
+
PlamoFormDataFile *plamo_form_data_file;
|
45
|
+
TypedData_Get_Struct(self, PlamoFormDataFile, &rb_plamo_form_data_file_type, plamo_form_data_file);
|
46
|
+
const size_t size = plamo_form_data_file_get_body_size(plamo_form_data_file);
|
47
|
+
const unsigned char *body = plamo_form_data_file_get_body(plamo_form_data_file);
|
48
|
+
VALUE rb_array = rb_ary_new2(size);
|
49
|
+
for (int i = 0; i < size; i++) {
|
50
|
+
rb_ary_store(rb_array, i, CHR2FIX(*(body + i)));
|
51
|
+
}
|
52
|
+
OBJ_FREEZE(rb_array);
|
53
|
+
return rb_array;
|
54
|
+
}
|
55
|
+
|
56
|
+
static VALUE get_body_size(VALUE self) {
|
57
|
+
PlamoFormDataFile *plamo_form_data_file;
|
58
|
+
TypedData_Get_Struct(self, PlamoFormDataFile, &rb_plamo_form_data_file_type, plamo_form_data_file);
|
59
|
+
return SIZET2NUM(plamo_form_data_file_get_body_size(plamo_form_data_file));
|
60
|
+
}
|
61
|
+
|
62
|
+
void Init_plamo_form_data_file(void) {
|
63
|
+
rb_cPlamoFormDataFile = rb_define_class_under(rb_mPlamo, "FormDataFile", rb_cObject);
|
64
|
+
rb_define_alloc_func(rb_cPlamoFormDataFile, allocate);
|
65
|
+
rb_define_method(rb_cPlamoFormDataFile, "content_type", get_content_type, 0);
|
66
|
+
rb_define_method(rb_cPlamoFormDataFile, "file_name", get_file_name, 0);
|
67
|
+
rb_define_method(rb_cPlamoFormDataFile, "size", get_body_size, 0);
|
68
|
+
rb_define_method(rb_cPlamoFormDataFile, "body", get_body, 0);
|
69
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#include "plamo.h"
|
2
|
+
|
3
|
+
VALUE rb_cPlamoFormUrlencoded;
|
4
|
+
|
5
|
+
static void deallocate(void *plamo_form_urlencoded) {
|
6
|
+
plamo_form_urlencoded_destroy(plamo_form_urlencoded);
|
7
|
+
}
|
8
|
+
|
9
|
+
static const rb_data_type_t rb_plamo_form_urlencoded_type = {
|
10
|
+
"FormUrlencoded",
|
11
|
+
{
|
12
|
+
NULL,
|
13
|
+
deallocate,
|
14
|
+
NULL,
|
15
|
+
},
|
16
|
+
NULL,
|
17
|
+
NULL,
|
18
|
+
0,
|
19
|
+
};
|
20
|
+
|
21
|
+
static VALUE allocate(VALUE klass) {
|
22
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_form_urlencoded_type, NULL);
|
23
|
+
}
|
24
|
+
|
25
|
+
static VALUE initialize(VALUE self, VALUE request) {
|
26
|
+
PlamoRequest *plamo_request;
|
27
|
+
TypedData_Get_Struct(request, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
28
|
+
DATA_PTR(self) = plamo_form_urlencoded_new(plamo_request);
|
29
|
+
return self;
|
30
|
+
}
|
31
|
+
|
32
|
+
static VALUE get(VALUE self, VALUE key) {
|
33
|
+
PlamoFormUrlencoded *plamo_form_urlencoded;
|
34
|
+
TypedData_Get_Struct(self, PlamoFormUrlencoded, &rb_plamo_form_urlencoded_type, plamo_form_urlencoded);
|
35
|
+
const PlamoStringArray *plamo_string_array = plamo_form_urlencoded_get(plamo_form_urlencoded, StringValueCStr(key));
|
36
|
+
if (plamo_string_array != NULL) {
|
37
|
+
VALUE rb_plamo_string_array = TypedData_Wrap_Struct(rb_cPlamoStringArray, &rb_plamo_string_array_type, (PlamoStringArray*)plamo_string_array);
|
38
|
+
OBJ_FREEZE(rb_plamo_string_array);
|
39
|
+
return rb_plamo_string_array;
|
40
|
+
} else {
|
41
|
+
return Qnil;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
static void execute_each(const char *key, const char *value) {
|
46
|
+
rb_yield(rb_ary_new3(2, rb_str_new2(key), rb_str_new2(value)));
|
47
|
+
}
|
48
|
+
|
49
|
+
static VALUE each(VALUE self) {
|
50
|
+
PlamoFormUrlencoded *plamo_form_urlencoded;
|
51
|
+
TypedData_Get_Struct(self, PlamoFormUrlencoded, &rb_plamo_form_urlencoded_type, plamo_form_urlencoded);
|
52
|
+
plamo_form_urlencoded_for_each(plamo_form_urlencoded, execute_each);
|
53
|
+
return Qnil;
|
54
|
+
}
|
55
|
+
|
56
|
+
void Init_plamo_form_urlencoded(void) {
|
57
|
+
rb_cPlamoFormUrlencoded = rb_define_class_under(rb_mPlamo, "FormUrlencoded", rb_cObject);
|
58
|
+
rb_define_alloc_func(rb_cPlamoFormUrlencoded, allocate);
|
59
|
+
rb_define_method(rb_cPlamoFormUrlencoded, "initialize", initialize, 1);
|
60
|
+
rb_define_method(rb_cPlamoFormUrlencoded, "[]", get, 1);
|
61
|
+
rb_define_method(rb_cPlamoFormUrlencoded, "each", each, 0);
|
62
|
+
}
|
@@ -1,65 +1,66 @@
|
|
1
1
|
#include "plamo.h"
|
2
|
-
#include "wrapper.h"
|
3
2
|
|
4
3
|
VALUE rb_cPlamoHttpHeader;
|
5
4
|
|
6
|
-
static void deallocate(
|
7
|
-
plamo_http_header_destroy(
|
8
|
-
free(wrapper);
|
5
|
+
static void deallocate(void *plamo_http_header) {
|
6
|
+
plamo_http_header_destroy(plamo_http_header);
|
9
7
|
}
|
10
8
|
|
9
|
+
const rb_data_type_t rb_plamo_http_header_type = {
|
10
|
+
"HttpHeader",
|
11
|
+
{
|
12
|
+
NULL,
|
13
|
+
deallocate,
|
14
|
+
NULL,
|
15
|
+
},
|
16
|
+
NULL,
|
17
|
+
NULL,
|
18
|
+
0,
|
19
|
+
};
|
20
|
+
|
11
21
|
static VALUE allocate(VALUE klass) {
|
12
|
-
return
|
22
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_http_header_type, NULL);
|
13
23
|
}
|
14
24
|
|
15
25
|
static VALUE initialize(VALUE self) {
|
16
|
-
|
17
|
-
Data_Get_Struct(self, Wrapper, wrapper);
|
18
|
-
wrapper->inner = plamo_http_header_new();
|
26
|
+
DATA_PTR(self) = plamo_http_header_new();
|
19
27
|
return self;
|
20
28
|
}
|
21
29
|
|
22
30
|
static VALUE push(VALUE self, VALUE key, VALUE value) {
|
23
|
-
|
24
|
-
|
25
|
-
plamo_http_header_add(
|
31
|
+
PlamoHttpHeader *plamo_http_header;
|
32
|
+
TypedData_Get_Struct(self, PlamoHttpHeader, &rb_plamo_http_header_type, plamo_http_header);
|
33
|
+
plamo_http_header_add(plamo_http_header, StringValueCStr(key), StringValueCStr(value));
|
26
34
|
return Qnil;
|
27
35
|
}
|
28
36
|
|
29
37
|
static VALUE get(VALUE self, VALUE key) {
|
30
|
-
|
31
|
-
|
32
|
-
PlamoStringArray *plamo_string_array = plamo_http_header_get(
|
38
|
+
PlamoHttpHeader *plamo_http_header;
|
39
|
+
TypedData_Get_Struct(self, PlamoHttpHeader, &rb_plamo_http_header_type, plamo_http_header);
|
40
|
+
PlamoStringArray *plamo_string_array = plamo_http_header_get(plamo_http_header, StringValueCStr(key));
|
33
41
|
if (plamo_string_array != NULL) {
|
34
|
-
VALUE rb_plamo_string_array =
|
35
|
-
Wrapper *wrapper2;
|
36
|
-
Data_Get_Struct(rb_plamo_string_array, Wrapper, wrapper2);
|
37
|
-
wrapper2->inner = plamo_string_array;
|
42
|
+
VALUE rb_plamo_string_array = TypedData_Wrap_Struct(rb_cPlamoStringArray, &rb_plamo_string_array_type, plamo_string_array);
|
38
43
|
return rb_plamo_string_array;
|
39
44
|
} else {
|
40
45
|
return Qnil;
|
41
46
|
}
|
42
47
|
}
|
43
48
|
|
44
|
-
static void execute_each(const char *key,
|
45
|
-
|
46
|
-
VALUE rb_plamo_string_array = Data_Wrap_Struct(rb_cPlamoStringArray, NULL, free, malloc(sizeof(Wrapper)));
|
47
|
-
Data_Get_Struct(rb_plamo_string_array, Wrapper, wrapper);
|
48
|
-
wrapper->inner = values;
|
49
|
-
rb_yield(rb_ary_new3(2, rb_str_new2(key), rb_plamo_string_array));
|
49
|
+
static void execute_each(const char *key, const char *value) {
|
50
|
+
rb_yield(rb_ary_new3(2, rb_str_new2(key), rb_str_new2(value)));
|
50
51
|
}
|
51
52
|
|
52
|
-
static VALUE each(VALUE self
|
53
|
-
|
54
|
-
|
55
|
-
plamo_http_header_for_each(
|
53
|
+
static VALUE each(VALUE self) {
|
54
|
+
PlamoHttpHeader *plamo_http_header;
|
55
|
+
TypedData_Get_Struct(self, PlamoHttpHeader, &rb_plamo_http_header_type, plamo_http_header);
|
56
|
+
plamo_http_header_for_each(plamo_http_header, execute_each);
|
56
57
|
return Qnil;
|
57
58
|
}
|
58
59
|
|
59
60
|
static VALUE delete_at(VALUE self, VALUE key) {
|
60
|
-
|
61
|
-
|
62
|
-
if (plamo_http_header_remove(
|
61
|
+
PlamoHttpHeader *plamo_http_header;
|
62
|
+
TypedData_Get_Struct(self, PlamoHttpHeader, &rb_plamo_http_header_type, plamo_http_header);
|
63
|
+
if (plamo_http_header_remove(plamo_http_header, StringValueCStr(key))) {
|
63
64
|
return Qtrue;
|
64
65
|
} else {
|
65
66
|
return Qfalse;
|
@@ -1,40 +1,45 @@
|
|
1
1
|
#include "plamo.h"
|
2
|
-
#include "wrapper.h"
|
3
2
|
|
4
3
|
VALUE rb_cPlamoHttpQuery;
|
5
4
|
|
6
|
-
static void deallocate(
|
7
|
-
plamo_http_query_destroy(
|
8
|
-
free(wrapper);
|
5
|
+
static void deallocate(void *plamo_http_query) {
|
6
|
+
plamo_http_query_destroy(plamo_http_query);
|
9
7
|
}
|
10
8
|
|
9
|
+
const rb_data_type_t rb_plamo_http_query_type = {
|
10
|
+
"HttpQuery",
|
11
|
+
{
|
12
|
+
NULL,
|
13
|
+
deallocate,
|
14
|
+
NULL,
|
15
|
+
},
|
16
|
+
NULL,
|
17
|
+
NULL,
|
18
|
+
0,
|
19
|
+
};
|
20
|
+
|
11
21
|
static VALUE allocate(VALUE klass) {
|
12
|
-
return
|
22
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_http_query_type, NULL);
|
13
23
|
}
|
14
24
|
|
15
25
|
static VALUE initialize(VALUE self) {
|
16
|
-
|
17
|
-
Data_Get_Struct(self, Wrapper, wrapper);
|
18
|
-
wrapper->inner = plamo_http_query_new();
|
26
|
+
DATA_PTR(self) = plamo_http_query_new();
|
19
27
|
return self;
|
20
28
|
}
|
21
29
|
|
22
30
|
static VALUE push(VALUE self, VALUE key, VALUE value) {
|
23
|
-
|
24
|
-
|
25
|
-
plamo_http_query_add(
|
31
|
+
PlamoHttpQuery *plamo_http_query;
|
32
|
+
TypedData_Get_Struct(self, PlamoHttpQuery, &rb_plamo_http_query_type, plamo_http_query);
|
33
|
+
plamo_http_query_add(plamo_http_query, StringValueCStr(key), StringValueCStr(value));
|
26
34
|
return Qnil;
|
27
35
|
}
|
28
36
|
|
29
37
|
static VALUE get(VALUE self, VALUE key) {
|
30
|
-
|
31
|
-
|
32
|
-
PlamoStringArray *plamo_string_array = plamo_http_query_get(
|
38
|
+
PlamoHttpQuery *plamo_http_query;
|
39
|
+
TypedData_Get_Struct(self, PlamoHttpQuery, &rb_plamo_http_query_type, plamo_http_query);
|
40
|
+
PlamoStringArray *plamo_string_array = plamo_http_query_get(plamo_http_query, StringValueCStr(key));
|
33
41
|
if (plamo_string_array != NULL) {
|
34
|
-
VALUE rb_plamo_string_array =
|
35
|
-
Wrapper *wrapper2;
|
36
|
-
Data_Get_Struct(rb_plamo_string_array, Wrapper, wrapper2);
|
37
|
-
wrapper2->inner = plamo_string_array;
|
42
|
+
VALUE rb_plamo_string_array = TypedData_Wrap_Struct(rb_cPlamoStringArray, &rb_plamo_string_array_type, plamo_string_array);
|
38
43
|
return rb_plamo_string_array;
|
39
44
|
} else {
|
40
45
|
return Qnil;
|
@@ -42,9 +47,9 @@ static VALUE get(VALUE self, VALUE key) {
|
|
42
47
|
}
|
43
48
|
|
44
49
|
static VALUE delete_at(VALUE self, VALUE key) {
|
45
|
-
|
46
|
-
|
47
|
-
if (plamo_http_query_remove(
|
50
|
+
PlamoHttpQuery *plamo_http_query;
|
51
|
+
TypedData_Get_Struct(self, PlamoHttpQuery, &rb_plamo_http_query_type, plamo_http_query);
|
52
|
+
if (plamo_http_query_remove(plamo_http_query, StringValueCStr(key))) {
|
48
53
|
return Qtrue;
|
49
54
|
} else {
|
50
55
|
return Qfalse;
|
@@ -1,11 +1,10 @@
|
|
1
1
|
#include "plamo.h"
|
2
|
-
#include "wrapper.h"
|
3
2
|
#include <stdbool.h>
|
4
3
|
#include <pthread.h>
|
5
4
|
#include <ruby/thread.h>
|
6
5
|
|
7
6
|
// This hack is reference the below post.
|
8
|
-
// https://www.burgestrand.se
|
7
|
+
// https://www.burgestrand.se/articles/asynchronous-callbacks-in-ruby-c-extensions/
|
9
8
|
|
10
9
|
VALUE rb_cPlamoMiddleware;
|
11
10
|
|
@@ -46,13 +45,24 @@ static callback_t* g_callback_queue_pop(void) {
|
|
46
45
|
return callback;
|
47
46
|
}
|
48
47
|
|
49
|
-
static void deallocate(
|
50
|
-
plamo_middleware_destroy(
|
51
|
-
free(wrapper);
|
48
|
+
static void deallocate(void *plamo_middleware) {
|
49
|
+
plamo_middleware_destroy(plamo_middleware);
|
52
50
|
}
|
53
51
|
|
52
|
+
const rb_data_type_t rb_plamo_middleware_type = {
|
53
|
+
"Middleware",
|
54
|
+
{
|
55
|
+
NULL,
|
56
|
+
deallocate,
|
57
|
+
NULL,
|
58
|
+
},
|
59
|
+
NULL,
|
60
|
+
NULL,
|
61
|
+
0,
|
62
|
+
};
|
63
|
+
|
54
64
|
static VALUE allocate(VALUE klass) {
|
55
|
-
return
|
65
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_middleware_type, NULL);
|
56
66
|
}
|
57
67
|
|
58
68
|
static void* plamo_callback(void *args) {
|
@@ -98,14 +108,8 @@ static VALUE handle_callback(void *cb) {
|
|
98
108
|
VALUE rb_config = callback->config->config;
|
99
109
|
VALUE rb_proc = callback->config->callback;
|
100
110
|
|
101
|
-
VALUE rb_plamo_request =
|
102
|
-
|
103
|
-
Data_Get_Struct(rb_plamo_request, Wrapper, plamo_request_wrapper);
|
104
|
-
plamo_request_wrapper->inner = (PlamoRequest*)callback->plamo_request;
|
105
|
-
VALUE rb_plamo_response = Data_Wrap_Struct(rb_cPlamoResponse, NULL, free, malloc(sizeof(Wrapper)));
|
106
|
-
Wrapper *plamo_response_wrapper;
|
107
|
-
Data_Get_Struct(rb_plamo_response, Wrapper, plamo_response_wrapper);
|
108
|
-
plamo_response_wrapper->inner = callback->plamo_response;
|
111
|
+
VALUE rb_plamo_request = TypedData_Wrap_Struct(rb_cPlamoRequest, &rb_plamo_request_type, (PlamoRequest*)callback->plamo_request);
|
112
|
+
VALUE rb_plamo_response = TypedData_Wrap_Struct(rb_cPlamoResponse, &rb_plamo_response_type, callback->plamo_response);
|
109
113
|
|
110
114
|
rb_proc_call(rb_proc, rb_ary_new3(3, rb_config, rb_plamo_request, rb_plamo_response));
|
111
115
|
|
@@ -158,13 +162,10 @@ static VALUE event_thread(void *_) {
|
|
158
162
|
}
|
159
163
|
|
160
164
|
static VALUE initialize(VALUE self, VALUE rb_config, VALUE rb_callback) {
|
161
|
-
Wrapper *wrapper;
|
162
|
-
Data_Get_Struct(self, Wrapper, wrapper);
|
163
165
|
PlamoRbCallbackConfig *plamo_rb_calback_config = malloc(sizeof(PlamoRbCallbackConfig));
|
164
166
|
plamo_rb_calback_config->config = rb_config;
|
165
167
|
plamo_rb_calback_config->callback = rb_callback;
|
166
|
-
|
167
|
-
|
168
|
+
DATA_PTR(self) = plamo_middleware_new(plamo_rb_calback_config, before_plamo_callback);
|
168
169
|
return self;
|
169
170
|
}
|
170
171
|
|
data/ext/plamo/plamo_request.c
CHANGED
@@ -1,22 +1,30 @@
|
|
1
1
|
#include "plamo.h"
|
2
|
-
#include "wrapper.h"
|
3
2
|
|
4
3
|
VALUE rb_cPlamoRequest;
|
5
4
|
|
6
5
|
static VALUE sym_http, sym_https, sym_http_2_0, sym_http_1_1, sym_http_1_0, sym_http_0_9;
|
7
6
|
|
8
|
-
static void deallocate(
|
9
|
-
plamo_request_destroy(
|
10
|
-
free(wrapper);
|
7
|
+
static void deallocate(void *plamo_request) {
|
8
|
+
plamo_request_destroy(plamo_request);
|
11
9
|
}
|
12
10
|
|
11
|
+
const rb_data_type_t rb_plamo_request_type = {
|
12
|
+
"Request",
|
13
|
+
{
|
14
|
+
NULL,
|
15
|
+
deallocate,
|
16
|
+
NULL,
|
17
|
+
},
|
18
|
+
NULL,
|
19
|
+
NULL,
|
20
|
+
0,
|
21
|
+
};
|
22
|
+
|
13
23
|
static VALUE allocate(VALUE klass) {
|
14
|
-
return
|
24
|
+
return TypedData_Wrap_Struct(klass, &rb_plamo_request_type, NULL);
|
15
25
|
}
|
16
26
|
|
17
27
|
static VALUE initialize(VALUE self, VALUE rb_scheme, VALUE rb_version, VALUE rb_method, VALUE rb_path, VALUE rb_query, VALUE rb_header, VALUE rb_body) {
|
18
|
-
Wrapper *wrapper;
|
19
|
-
Data_Get_Struct(self, Wrapper, wrapper);
|
20
28
|
const PlamoScheme scheme = sym_http == rb_scheme ? PlamoSchemeHttp : PlamoSchemeHttps;
|
21
29
|
const PlamoHttpVersion version = sym_http_2_0 == rb_version ? PlamoHttpVersionHttp20
|
22
30
|
: sym_http_1_1 == rb_version ? PlamoHttpVersionHttp11
|
@@ -29,26 +37,26 @@ static VALUE initialize(VALUE self, VALUE rb_scheme, VALUE rb_version, VALUE rb_
|
|
29
37
|
method.undefined_http_method = StringValueCStr(rb_method);
|
30
38
|
}
|
31
39
|
const char *path = StringValueCStr(rb_path);
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
PlamoHttpQuery *plamo_http_query;
|
41
|
+
TypedData_Get_Struct(rb_query, PlamoHttpQuery, &rb_plamo_http_query_type, plamo_http_query);
|
42
|
+
PlamoHttpHeader *plamo_http_header;
|
43
|
+
TypedData_Get_Struct(rb_header, PlamoHttpHeader, &rb_plamo_http_header_type, plamo_http_header);
|
44
|
+
PlamoByteArray *plamo_byte_array;
|
45
|
+
TypedData_Get_Struct(rb_body, PlamoByteArray, &rb_plamo_byte_array_type, plamo_byte_array);
|
46
|
+
DATA_PTR(self) = plamo_request_new(scheme, version, method, path, plamo_http_query, plamo_http_header, plamo_byte_array);
|
39
47
|
return self;
|
40
48
|
}
|
41
49
|
|
42
50
|
static VALUE scheme(VALUE self) {
|
43
|
-
|
44
|
-
|
45
|
-
return
|
51
|
+
PlamoRequest *plamo_request;
|
52
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
53
|
+
return plamo_request->scheme == PlamoSchemeHttp ? sym_http : sym_https;
|
46
54
|
}
|
47
55
|
|
48
56
|
static VALUE version(VALUE self) {
|
49
|
-
|
50
|
-
|
51
|
-
switch (
|
57
|
+
PlamoRequest *plamo_request;
|
58
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
59
|
+
switch (plamo_request->version) {
|
52
60
|
case PlamoHttpVersionHttp20:
|
53
61
|
return sym_http_2_0;
|
54
62
|
case PlamoHttpVersionHttp11:
|
@@ -61,9 +69,9 @@ static VALUE version(VALUE self) {
|
|
61
69
|
}
|
62
70
|
|
63
71
|
static VALUE method(VALUE self) {
|
64
|
-
|
65
|
-
|
66
|
-
PlamoDefinedHttpMethod method =
|
72
|
+
PlamoRequest *plamo_request;
|
73
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
74
|
+
PlamoDefinedHttpMethod method = plamo_request->method.defined_http_method;
|
67
75
|
if (method == PLAMO_HTTP_METHOD_GET) {
|
68
76
|
return rb_str_new2("GET");
|
69
77
|
} else if (method == PLAMO_HTTP_METHOD_POST) {
|
@@ -83,43 +91,34 @@ static VALUE method(VALUE self) {
|
|
83
91
|
} else if (method == PLAMO_HTTP_METHOD_PATCH) {
|
84
92
|
return rb_str_new2("PATCH");
|
85
93
|
} else {
|
86
|
-
return rb_str_new2(
|
94
|
+
return rb_str_new2(plamo_request->method.undefined_http_method);
|
87
95
|
}
|
88
96
|
}
|
89
97
|
|
90
98
|
static VALUE path(VALUE self) {
|
91
|
-
|
92
|
-
|
93
|
-
return rb_str_new2(plamo_string_get_char(
|
99
|
+
PlamoRequest *plamo_request;
|
100
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
101
|
+
return rb_str_new2(plamo_string_get_char(plamo_request->path));
|
94
102
|
}
|
95
103
|
|
96
104
|
static VALUE query(VALUE self) {
|
97
|
-
|
98
|
-
|
99
|
-
VALUE rb_plamo_http_query =
|
100
|
-
Wrapper *plamo_http_query_wrapper;
|
101
|
-
Data_Get_Struct(rb_plamo_http_query, Wrapper, plamo_http_query_wrapper);
|
102
|
-
plamo_http_query_wrapper->inner = ((PlamoRequest*)wrapper->inner)->query;
|
105
|
+
PlamoRequest *plamo_request;
|
106
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
107
|
+
VALUE rb_plamo_http_query = TypedData_Wrap_Struct(rb_cPlamoHttpQuery, &rb_plamo_http_query_type, plamo_request->query);
|
103
108
|
return rb_plamo_http_query;
|
104
109
|
}
|
105
110
|
|
106
111
|
static VALUE header(VALUE self) {
|
107
|
-
|
108
|
-
|
109
|
-
VALUE rb_plamo_http_header =
|
110
|
-
Wrapper *plamo_http_header_wrapper;
|
111
|
-
Data_Get_Struct(rb_plamo_http_header, Wrapper, plamo_http_header_wrapper);
|
112
|
-
plamo_http_header_wrapper->inner = ((PlamoRequest*)wrapper->inner)->header;
|
112
|
+
PlamoRequest *plamo_request;
|
113
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
114
|
+
VALUE rb_plamo_http_header = TypedData_Wrap_Struct(rb_cPlamoHttpHeader, &rb_plamo_http_header_type, plamo_request->header);
|
113
115
|
return rb_plamo_http_header;
|
114
116
|
}
|
115
117
|
|
116
118
|
static VALUE body(VALUE self) {
|
117
|
-
|
118
|
-
|
119
|
-
VALUE rb_plamo_byte_array =
|
120
|
-
Wrapper *plamo_byte_array_wrapper;
|
121
|
-
Data_Get_Struct(rb_plamo_byte_array, Wrapper, plamo_byte_array_wrapper);
|
122
|
-
plamo_byte_array_wrapper->inner = ((PlamoRequest*)wrapper->inner)->body;
|
119
|
+
PlamoRequest *plamo_request;
|
120
|
+
TypedData_Get_Struct(self, PlamoRequest, &rb_plamo_request_type, plamo_request);
|
121
|
+
VALUE rb_plamo_byte_array = TypedData_Wrap_Struct(rb_cPlamoByteArray, &rb_plamo_byte_array_type, plamo_request->body);
|
123
122
|
return rb_plamo_byte_array;
|
124
123
|
}
|
125
124
|
|