2 * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
12 int dtls1_write_app_data_bytes(SSL
*s
, int type
, const void *buf_
, size_t len
,
17 if (SSL_in_init(s
) && !ossl_statem_get_in_handshake(s
)) {
18 i
= s
->handshake_func(s
);
22 SSLerr(SSL_F_DTLS1_WRITE_APP_DATA_BYTES
,
23 SSL_R_SSL_HANDSHAKE_FAILURE
);
28 if (len
> SSL3_RT_MAX_PLAIN_LENGTH
) {
29 SSLerr(SSL_F_DTLS1_WRITE_APP_DATA_BYTES
, SSL_R_DTLS_MESSAGE_TOO_BIG
);
33 return dtls1_write_bytes(s
, type
, buf_
, len
, written
);
36 int dtls1_dispatch_alert(SSL
*s
)
39 void (*cb
) (const SSL
*ssl
, int type
, int val
) = NULL
;
40 unsigned char buf
[DTLS1_AL_HEADER_LENGTH
];
41 unsigned char *ptr
= &buf
[0];
44 s
->s3
.alert_dispatch
= 0;
46 memset(buf
, 0, sizeof(buf
));
47 *ptr
++ = s
->s3
.send_alert
[0];
48 *ptr
++ = s
->s3
.send_alert
[1];
50 i
= do_dtls1_write(s
, SSL3_RT_ALERT
, &buf
[0], sizeof(buf
), 0, &written
);
52 s
->s3
.alert_dispatch
= 1;
53 /* fprintf( stderr, "not done with alert\n" ); */
55 (void)BIO_flush(s
->wbio
);
58 s
->msg_callback(1, s
->version
, SSL3_RT_ALERT
, s
->s3
.send_alert
,
59 2, s
, s
->msg_callback_arg
);
61 if (s
->info_callback
!= NULL
)
62 cb
= s
->info_callback
;
63 else if (s
->ctx
->info_callback
!= NULL
)
64 cb
= s
->ctx
->info_callback
;
67 j
= (s
->s3
.send_alert
[0] << 8) | s
->s3
.send_alert
[1];
68 cb(s
, SSL_CB_WRITE_ALERT
, j
);