of INVALID_REQUEST instead of success.
+Version 1.0.3
+- Corrected bug in gnutls_bye() which made it return an error code
+ of INVALID_REQUEST instead of success.
+
Version 1.0.2 (18/12/2003)
- Corrected a bug in the RSA key generation. This was
generating unusable RSA keys.
typedef enum HandshakeState { STATE0=0, STATE1, STATE2, STATE3, STATE4, STATE5,
STATE6, STATE7, STATE8, STATE9, STATE20=20, STATE21,
- STATE30=30, STATE31, STATE50=50, STATE60=60, STATE61 } HandshakeState;
+ STATE30=30, STATE31, STATE50=50, STATE60=60, STATE61, STATE62 } HandshakeState;
typedef enum HandshakeType { GNUTLS_HELLO_REQUEST, GNUTLS_CLIENT_HELLO, GNUTLS_SERVER_HELLO,
GNUTLS_CERTIFICATE_PKT=11, GNUTLS_SERVER_KEY_EXCHANGE,
**/
int gnutls_bye( gnutls_session session, gnutls_close_request how)
{
- int ret = 0, ret2 = 0;
+ int ret = 0;
switch (STATE) {
case STATE0:
case STATE60:
- if (STATE==STATE60) {
- ret = _gnutls_io_write_flush( session);
- } else {
- ret = gnutls_alert_send( session, GNUTLS_AL_WARNING, GNUTLS_A_CLOSE_NOTIFY);
- STATE = STATE60;
+ ret = _gnutls_io_write_flush( session);
+ STATE = STATE60;
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
}
- if (ret < 0)
- return ret;
case STATE61:
- if ( how == GNUTLS_SHUT_RDWR && ret >= 0) {
- ret2 = _gnutls_recv_int( session, GNUTLS_ALERT, -1, NULL, 0);
- if (ret2 >= 0) session->internals.may_read = 1;
- }
+ ret = gnutls_alert_send( session, GNUTLS_AL_WARNING, GNUTLS_A_CLOSE_NOTIFY);
STATE = STATE61;
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
- if (ret2 < 0)
- return ret2;
+ case STATE62:
+ if ( how == GNUTLS_SHUT_RDWR) {
+ ret = _gnutls_recv_int( session, GNUTLS_ALERT, -1, NULL, 0);
+ if (ret >= 0) session->internals.may_read = 1;
+ }
+ STATE = STATE62;
+
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
break;
default:
gnutls_assert();
uint16 header_size;
int empty_packet = 0;
- if (sizeofdata == 0 || data == NULL) {
+ if (type != GNUTLS_ALERT && (sizeofdata == 0 || data == NULL)) {
return GNUTLS_E_INVALID_REQUEST;
}
gnutls_bye(socket->session, GNUTLS_SHUT_RDWR);
while (ret == GNUTLS_E_INTERRUPTED
|| ret == GNUTLS_E_AGAIN);
+ if (ret < 0)
+ fprintf(stderr, "*** gnutls_bye() error: %s\n", gnutls_strerror(ret));
gnutls_deinit(socket->session);
socket->session = NULL;
}