Skip to content

Commit 0e711b6

Browse files
committed
added Polar::SSL#write
1 parent 7eb570c commit 0e711b6

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/polarssl.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "mruby.h"
22
#include "mruby/class.h"
33
#include "mruby/data.h"
4+
#include "mruby/string.h"
45
#include "mruby/ext/io.h"
56
#include "polarssl/entropy.h"
67
#include "polarssl/ctr_drbg.h"
@@ -201,6 +202,23 @@ static mrb_value mrb_ssl_handshake(mrb_state *mrb, mrb_value self) {
201202
return mrb_true_value();
202203
}
203204

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+
204222
void mrb_mruby_polarssl_gem_init(mrb_state *mrb) {
205223
struct RClass *p, *e, *c, *s;
206224

@@ -232,6 +250,7 @@ void mrb_mruby_polarssl_gem_init(mrb_state *mrb) {
232250
mrb_define_method(mrb, s, "set_rng", mrb_ssl_set_rng, MRB_ARGS_REQ(1));
233251
mrb_define_method(mrb, s, "set_socket", mrb_ssl_set_socket, MRB_ARGS_REQ(1));
234252
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));
235254
}
236255

237256
void mrb_mruby_polarssl_gem_final(mrb_state *mrb) {

test/polarssl.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,5 +151,18 @@
151151
end
152152
err.class == PolarSSL::SSL::Error
153153
end
154+
155+
assert('PolarSSL::SSL#write') do
156+
socket = TCPSocket.new('polarssl.org', 443)
157+
entropy = PolarSSL::Entropy.new
158+
ctr_drbg = PolarSSL::CtrDrbg.new(entropy)
159+
ssl = PolarSSL::SSL.new
160+
ssl.set_endpoint(PolarSSL::SSL::SSL_IS_CLIENT)
161+
ssl.set_authmode(PolarSSL::SSL::SSL_VERIFY_NONE)
162+
ssl.set_rng(ctr_drbg)
163+
ssl.set_socket(socket)
164+
ssl.handshake
165+
ssl.write "foo"
166+
end
154167

155168
end

0 commit comments

Comments
 (0)