mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
ext_help.h, minissl.c, puma_http11.c - change Data -> TypedData (#2430)
'Data_' macros have been 'deprecated' since Ruby 2.3 or earlier, but are still supported. Update c source to use the 'TypedData_' macros.
This commit is contained in:
parent
2f90396c95
commit
04eb8bdb39
3 changed files with 55 additions and 46 deletions
|
@ -2,7 +2,7 @@
|
||||||
#define ext_help_h
|
#define ext_help_h
|
||||||
|
|
||||||
#define RAISE_NOT_NULL(T) if(T == NULL) rb_raise(rb_eArgError, "%s", "NULL found for " # T " when shouldn't be.");
|
#define RAISE_NOT_NULL(T) if(T == NULL) rb_raise(rb_eArgError, "%s", "NULL found for " # T " when shouldn't be.");
|
||||||
#define DATA_GET(from,type,name) Data_Get_Struct(from,type,name); RAISE_NOT_NULL(name);
|
#define DATA_GET(from,type,data_type,name) TypedData_Get_Struct(from,type,data_type,name); RAISE_NOT_NULL(name);
|
||||||
#define REQUIRE_TYPE(V, T) if(TYPE(V) != T) rb_raise(rb_eTypeError, "%s", "Wrong argument type for " # V " required " # T);
|
#define REQUIRE_TYPE(V, T) if(TYPE(V) != T) rb_raise(rb_eTypeError, "%s", "Wrong argument type for " # V " required " # T);
|
||||||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,7 @@
|
||||||
|
|
||||||
#include <ruby.h>
|
#include <ruby.h>
|
||||||
#include <ruby/version.h>
|
#include <ruby/version.h>
|
||||||
|
|
||||||
#if RUBY_API_VERSION_MAJOR == 1
|
|
||||||
#include <rubyio.h>
|
|
||||||
#else
|
|
||||||
#include <ruby/io.h>
|
#include <ruby/io.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_OPENSSL_BIO_H
|
#ifdef HAVE_OPENSSL_BIO_H
|
||||||
|
|
||||||
|
@ -33,7 +28,8 @@ typedef struct {
|
||||||
int bytes;
|
int bytes;
|
||||||
} ms_cert_buf;
|
} ms_cert_buf;
|
||||||
|
|
||||||
void engine_free(ms_conn* conn) {
|
void engine_free(void *ptr) {
|
||||||
|
ms_conn *conn = ptr;
|
||||||
ms_cert_buf* cert_buf = (ms_cert_buf*)SSL_get_app_data(conn->ssl);
|
ms_cert_buf* cert_buf = (ms_cert_buf*)SSL_get_app_data(conn->ssl);
|
||||||
if(cert_buf) {
|
if(cert_buf) {
|
||||||
OPENSSL_free(cert_buf->buf);
|
OPENSSL_free(cert_buf->buf);
|
||||||
|
@ -45,10 +41,16 @@ void engine_free(ms_conn* conn) {
|
||||||
free(conn);
|
free(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rb_data_type_t engine_data_type = {
|
||||||
|
"MiniSSL/ENGINE",
|
||||||
|
{ 0, engine_free, 0 },
|
||||||
|
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
||||||
|
};
|
||||||
|
|
||||||
ms_conn* engine_alloc(VALUE klass, VALUE* obj) {
|
ms_conn* engine_alloc(VALUE klass, VALUE* obj) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
|
|
||||||
*obj = Data_Make_Struct(klass, ms_conn, 0, engine_free, conn);
|
*obj = TypedData_Make_Struct(klass, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
conn->read = BIO_new(BIO_s_mem());
|
conn->read = BIO_new(BIO_s_mem());
|
||||||
BIO_set_nbio(conn->read, 1);
|
BIO_set_nbio(conn->read, 1);
|
||||||
|
@ -281,7 +283,7 @@ VALUE engine_inject(VALUE self, VALUE str) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
long used;
|
long used;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
StringValue(str);
|
StringValue(str);
|
||||||
|
|
||||||
|
@ -334,7 +336,7 @@ VALUE engine_read(VALUE self) {
|
||||||
char buf[512];
|
char buf[512];
|
||||||
int bytes, error;
|
int bytes, error;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
|
|
||||||
|
@ -361,7 +363,7 @@ VALUE engine_write(VALUE self, VALUE str) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
int bytes;
|
int bytes;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
StringValue(str);
|
StringValue(str);
|
||||||
|
|
||||||
|
@ -385,7 +387,7 @@ VALUE engine_extract(VALUE self) {
|
||||||
size_t pending;
|
size_t pending;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
pending = BIO_pending(conn->write);
|
pending = BIO_pending(conn->write);
|
||||||
if(pending > 0) {
|
if(pending > 0) {
|
||||||
|
@ -404,7 +406,7 @@ VALUE engine_shutdown(VALUE self) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
int ok;
|
int ok;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
|
|
||||||
|
@ -419,7 +421,7 @@ VALUE engine_shutdown(VALUE self) {
|
||||||
VALUE engine_init(VALUE self) {
|
VALUE engine_init(VALUE self) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
return SSL_in_init(conn->ssl) ? Qtrue : Qfalse;
|
return SSL_in_init(conn->ssl) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
@ -432,7 +434,7 @@ VALUE engine_peercert(VALUE self) {
|
||||||
ms_cert_buf* cert_buf = NULL;
|
ms_cert_buf* cert_buf = NULL;
|
||||||
VALUE rb_cert_buf;
|
VALUE rb_cert_buf;
|
||||||
|
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
|
|
||||||
cert = SSL_get_peer_certificate(conn->ssl);
|
cert = SSL_get_peer_certificate(conn->ssl);
|
||||||
if(!cert) {
|
if(!cert) {
|
||||||
|
@ -469,7 +471,7 @@ VALUE engine_peercert(VALUE self) {
|
||||||
static VALUE
|
static VALUE
|
||||||
engine_ssl_vers_st(VALUE self) {
|
engine_ssl_vers_st(VALUE self) {
|
||||||
ms_conn* conn;
|
ms_conn* conn;
|
||||||
Data_Get_Struct(self, ms_conn, conn);
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
||||||
return rb_ary_new3(2, rb_str_new2(SSL_get_version(conn->ssl)), rb_str_new2(SSL_state_string(conn->ssl)));
|
return rb_ary_new3(2, rb_str_new2(SSL_get_version(conn->ssl)), rb_str_new2(SSL_state_string(conn->ssl)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -253,11 +253,18 @@ void HttpParser_free(void *data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HttpParser_mark(puma_parser* hp) {
|
void HttpParser_mark(void *ptr) {
|
||||||
|
puma_parser *hp = ptr;
|
||||||
if(hp->request) rb_gc_mark(hp->request);
|
if(hp->request) rb_gc_mark(hp->request);
|
||||||
if(hp->body) rb_gc_mark(hp->body);
|
if(hp->body) rb_gc_mark(hp->body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rb_data_type_t HttpParser_data_type = {
|
||||||
|
"HttpParser",
|
||||||
|
{ HttpParser_mark, HttpParser_free, 0 },
|
||||||
|
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
||||||
|
};
|
||||||
|
|
||||||
VALUE HttpParser_alloc(VALUE klass)
|
VALUE HttpParser_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
puma_parser *hp = ALLOC_N(puma_parser, 1);
|
puma_parser *hp = ALLOC_N(puma_parser, 1);
|
||||||
|
@ -274,7 +281,7 @@ VALUE HttpParser_alloc(VALUE klass)
|
||||||
|
|
||||||
puma_parser_init(hp);
|
puma_parser_init(hp);
|
||||||
|
|
||||||
return Data_Wrap_Struct(klass, HttpParser_mark, HttpParser_free, hp);
|
return TypedData_Wrap_Struct(klass, &HttpParser_data_type, hp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -286,7 +293,7 @@ VALUE HttpParser_alloc(VALUE klass)
|
||||||
VALUE HttpParser_init(VALUE self)
|
VALUE HttpParser_init(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
puma_parser_init(http);
|
puma_parser_init(http);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -303,7 +310,7 @@ VALUE HttpParser_init(VALUE self)
|
||||||
VALUE HttpParser_reset(VALUE self)
|
VALUE HttpParser_reset(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
puma_parser_init(http);
|
puma_parser_init(http);
|
||||||
|
|
||||||
return Qnil;
|
return Qnil;
|
||||||
|
@ -320,7 +327,7 @@ VALUE HttpParser_reset(VALUE self)
|
||||||
VALUE HttpParser_finish(VALUE self)
|
VALUE HttpParser_finish(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
puma_parser_finish(http);
|
puma_parser_finish(http);
|
||||||
|
|
||||||
return puma_parser_is_finished(http) ? Qtrue : Qfalse;
|
return puma_parser_is_finished(http) ? Qtrue : Qfalse;
|
||||||
|
@ -351,7 +358,7 @@ VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data, VALUE start)
|
||||||
char *dptr = NULL;
|
char *dptr = NULL;
|
||||||
long dlen = 0;
|
long dlen = 0;
|
||||||
|
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
|
|
||||||
from = FIX2INT(start);
|
from = FIX2INT(start);
|
||||||
dptr = rb_extract_chars(data, &dlen);
|
dptr = rb_extract_chars(data, &dlen);
|
||||||
|
@ -385,7 +392,7 @@ VALUE HttpParser_execute(VALUE self, VALUE req_hash, VALUE data, VALUE start)
|
||||||
VALUE HttpParser_has_error(VALUE self)
|
VALUE HttpParser_has_error(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
|
|
||||||
return puma_parser_has_error(http) ? Qtrue : Qfalse;
|
return puma_parser_has_error(http) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
@ -400,7 +407,7 @@ VALUE HttpParser_has_error(VALUE self)
|
||||||
VALUE HttpParser_is_finished(VALUE self)
|
VALUE HttpParser_is_finished(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
|
|
||||||
return puma_parser_is_finished(http) ? Qtrue : Qfalse;
|
return puma_parser_is_finished(http) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
@ -416,7 +423,7 @@ VALUE HttpParser_is_finished(VALUE self)
|
||||||
VALUE HttpParser_nread(VALUE self)
|
VALUE HttpParser_nread(VALUE self)
|
||||||
{
|
{
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
|
|
||||||
return INT2FIX(http->nread);
|
return INT2FIX(http->nread);
|
||||||
}
|
}
|
||||||
|
@ -429,7 +436,7 @@ VALUE HttpParser_nread(VALUE self)
|
||||||
*/
|
*/
|
||||||
VALUE HttpParser_body(VALUE self) {
|
VALUE HttpParser_body(VALUE self) {
|
||||||
puma_parser *http = NULL;
|
puma_parser *http = NULL;
|
||||||
DATA_GET(self, puma_parser, http);
|
DATA_GET(self, puma_parser, &HttpParser_data_type, http);
|
||||||
|
|
||||||
return http->body;
|
return http->body;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue