summaryrefslogtreecommitdiffstats
path: root/ssl/record
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-02-02 13:43:38 +0000
committerMatt Caswell <matt@openssl.org>2015-03-26 15:01:59 +0000
commitbbcd6d7fe263361f18060c40cac676d6a6193ead (patch)
tree75f7c18344ebb9d7ffec1cf7804fbe01b444222d /ssl/record
parentf161995e0e1a77415354b1690fb92ae3f1480547 (diff)
Provide RECORD_LAYER_set_data function
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'ssl/record')
-rw-r--r--ssl/record/rec_layer.h1
-rw-r--r--ssl/record/s3_pkt.c16
-rw-r--r--ssl/record/ssl3_buffer.c2
-rw-r--r--ssl/record/ssl3_buffer.h2
4 files changed, 19 insertions, 2 deletions
diff --git a/ssl/record/rec_layer.h b/ssl/record/rec_layer.h
index 96e245e2c0..4d91476d4e 100644
--- a/ssl/record/rec_layer.h
+++ b/ssl/record/rec_layer.h
@@ -170,6 +170,7 @@ void RECORD_LAYER_clear(RECORD_LAYER *rl);
void RECORD_LAYER_release(RECORD_LAYER *rl);
int RECORD_LAYER_read_pending(RECORD_LAYER *rl);
int RECORD_LAYER_write_pending(RECORD_LAYER *rl);
+int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len);
__owur int ssl23_read_bytes(SSL *s, int n);
__owur int ssl23_write_bytes(SSL *s);
__owur int ssl3_write_bytes(SSL *s, int type, const void *buf, int len);
diff --git a/ssl/record/s3_pkt.c b/ssl/record/s3_pkt.c
index 21ded63e38..376697f744 100644
--- a/ssl/record/s3_pkt.c
+++ b/ssl/record/s3_pkt.c
@@ -178,6 +178,22 @@ int RECORD_LAYER_write_pending(RECORD_LAYER *rl)
return SSL3_BUFFER_get_left(&rl->wbuf) != 0;
}
+int RECORD_LAYER_set_data(RECORD_LAYER *rl, const unsigned char *buf, int len)
+{
+ rl->s->packet_length = len;
+ if(len != 0) {
+ rl->s->rstate = SSL_ST_READ_HEADER;
+ if (!SSL3_BUFFER_is_initialised(&rl->rbuf))
+ if (!ssl3_setup_read_buffer(rl->s))
+ return 0;
+ }
+
+ rl->s->packet = SSL3_BUFFER_get_buf(&rl->rbuf);
+ SSL3_BUFFER_set_data(&rl->rbuf, buf, len);
+
+ return 1;
+}
+
int ssl3_read_n(SSL *s, int n, int max, int extend)
{
/*
diff --git a/ssl/record/ssl3_buffer.c b/ssl/record/ssl3_buffer.c
index 65dcd8a292..2ea55c8ba4 100644
--- a/ssl/record/ssl3_buffer.c
+++ b/ssl/record/ssl3_buffer.c
@@ -111,7 +111,7 @@
#include "../ssl_locl.h"
-void SSL3_BUFFER_set_data(SSL3_BUFFER *b, unsigned char *d, int n)
+void SSL3_BUFFER_set_data(SSL3_BUFFER *b, const unsigned char *d, int n)
{
if(d != NULL)
memcpy(b->buf, d, n);
diff --git a/ssl/record/ssl3_buffer.h b/ssl/record/ssl3_buffer.h
index 4668f4507a..8e55250a25 100644
--- a/ssl/record/ssl3_buffer.h
+++ b/ssl/record/ssl3_buffer.h
@@ -127,7 +127,7 @@ typedef struct ssl3_buffer_st {
#define SSL3_BUFFER_get_left(b) ((b)->left)
#define SSL3_BUFFER_is_initialised(b) ((b)->buf != NULL)
-void SSL3_BUFFER_set_data(SSL3_BUFFER *b, unsigned char *d, int n);
+void SSL3_BUFFER_set_data(SSL3_BUFFER *b, const unsigned char *d, int n);
void SSL3_BUFFER_release(SSL3_BUFFER *b);
__owur int ssl3_setup_buffers(SSL *s);
__owur int ssl3_setup_read_buffer(SSL *s);