|
1 | 1 | #include "mruby.h"
|
2 | 2 | #include "mruby/class.h"
|
3 | 3 | #include "mruby/data.h"
|
| 4 | +#include "mruby/string.h" |
4 | 5 | #include "mruby/ext/io.h"
|
5 | 6 | #include "polarssl/entropy.h"
|
6 | 7 | #include "polarssl/ctr_drbg.h"
|
@@ -201,6 +202,23 @@ static mrb_value mrb_ssl_handshake(mrb_state *mrb, mrb_value self) {
|
201 | 202 | return mrb_true_value();
|
202 | 203 | }
|
203 | 204 |
|
| 205 | +static mrb_value mrb_ssl_write(mrb_state *mrb, mrb_value self) { |
| 206 | + ssl_context *ssl; |
| 207 | + mrb_value msg; |
| 208 | + char *buffer; |
| 209 | + int ret; |
| 210 | + |
| 211 | + mrb_get_args(mrb, "S", &msg); |
| 212 | + ssl = DATA_CHECK_GET_PTR(mrb, self, &mrb_ssl_type, ssl_context); |
| 213 | + |
| 214 | + buffer = RSTRING_PTR(msg); |
| 215 | + ret = ssl_write(ssl, (const unsigned char *)buffer, RSTRING_LEN(msg)); |
| 216 | + if (ret < 0) { |
| 217 | + mrb_raise(mrb, E_SSL_ERROR, "ssl_write() returned E_SSL_ERROR"); |
| 218 | + } |
| 219 | + return mrb_true_value(); |
| 220 | +} |
| 221 | + |
204 | 222 | void mrb_mruby_polarssl_gem_init(mrb_state *mrb) {
|
205 | 223 | struct RClass *p, *e, *c, *s;
|
206 | 224 |
|
@@ -232,6 +250,7 @@ void mrb_mruby_polarssl_gem_init(mrb_state *mrb) {
|
232 | 250 | mrb_define_method(mrb, s, "set_rng", mrb_ssl_set_rng, MRB_ARGS_REQ(1));
|
233 | 251 | mrb_define_method(mrb, s, "set_socket", mrb_ssl_set_socket, MRB_ARGS_REQ(1));
|
234 | 252 | mrb_define_method(mrb, s, "handshake", mrb_ssl_handshake, MRB_ARGS_NONE());
|
| 253 | + mrb_define_method(mrb, s, "write", mrb_ssl_write, MRB_ARGS_REQ(1)); |
235 | 254 | }
|
236 | 255 |
|
237 | 256 | void mrb_mruby_polarssl_gem_final(mrb_state *mrb) {
|
|
0 commit comments