void tls_set_plain_alerts(OSSL_RECORD_LAYER *rl, int allow);
void tls_set_first_handshake(OSSL_RECORD_LAYER *rl, int first);
void tls_set_max_pipelines(OSSL_RECORD_LAYER *rl, size_t max_pipelines);
+void tls_get_state(OSSL_RECORD_LAYER *rl, const char **shortstr,
+ const char **longstr);
int rlayer_setup_read_buffer(OSSL_RECORD_LAYER *rl);
rl->read_ahead = 1;
}
+void tls_get_state(OSSL_RECORD_LAYER *rl, const char **shortstr,
+ const char **longstr)
+{
+ const char *shrt, *lng;
+ switch (rl->rstate) {
+ case SSL_ST_READ_HEADER:
+ shrt = "RH";
+ lng = "read header";
+ break;
+ case SSL_ST_READ_BODY:
+ shrt = "RB";
+ lng = "read body";
+ break;
+ default:
+ shrt = lng = "unknown";
+ break;
+ }
+ if (shortstr != NULL)
+ *shortstr = shrt;
+ if (longstr != NULL)
+ *longstr = lng;
+}
+
const OSSL_RECORD_METHOD ossl_tls_record_method = {
tls_new_record_layer,
tls_free,
tls_set_plain_alerts,
tls_set_first_handshake,
tls_set_max_pipelines,
- NULL
+ NULL,
+ tls_get_state
};
void RECORD_LAYER_clear(RECORD_LAYER *rl)
{
- rl->rstate = SSL_ST_READ_HEADER;
-
rl->wnum = 0;
memset(rl->handshake_fragment, 0, sizeof(rl->handshake_fragment));
rl->handshake_fragment_len = 0;
const char *SSL_rstate_string_long(const SSL *s)
{
const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
+ const char *lng;
if (sc == NULL)
return NULL;
- /* TODO(RECLAYER): Fix me */
- switch (sc->rlayer.rstate) {
- case SSL_ST_READ_HEADER:
- return "read header";
- case SSL_ST_READ_BODY:
- return "read body";
- case SSL_ST_READ_DONE:
- return "read done";
- default:
+ if (sc->rlayer.rrlmethod == NULL || sc->rlayer.rrl == NULL)
return "unknown";
- }
+
+ sc->rlayer.rrlmethod->get_state(sc->rlayer.rrl, NULL, &lng);
+
+ return lng;
}
const char *SSL_rstate_string(const SSL *s)
{
const SSL_CONNECTION *sc = SSL_CONNECTION_FROM_CONST_SSL(s);
+ const char *shrt;
if (sc == NULL)
return NULL;
- /* TODO(RECLAYER): Fix me */
- switch (sc->rlayer.rstate) {
- case SSL_ST_READ_HEADER:
- return "RH";
- case SSL_ST_READ_BODY:
- return "RB";
- case SSL_ST_READ_DONE:
- return "RD";
- default:
+ if (sc->rlayer.rrlmethod == NULL || sc->rlayer.rrl == NULL)
return "unknown";
- }
-}
+ sc->rlayer.rrlmethod->get_state(sc->rlayer.rrl, &shrt, NULL);
+
+ return shrt;
+}
/*
* Call this to write data in records of type 'type' It will return <= 0 if
* not. Default at creation of the record layer is "yes".
*/
void (*set_in_init)(OSSL_RECORD_LAYER *rl, int in_init);
+
+ /*
+ * Get a short or long human readable description of the record layer state
+ */
+ void (*get_state)(OSSL_RECORD_LAYER *rl, const char **shortstr,
+ const char **longstr);
};