2 * Copyright (C) 2000-2011 Free Software Foundation, Inc.
4 * Author: Nikos Mavrogiannopoulos
6 * This file is part of GnuTLS.
8 * The GnuTLS is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 3 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>
22 #ifndef GNUTLS_BUFFERS_H
23 #define GNUTLS_BUFFERS_H
25 #define MBUFFER_FLUSH 1
28 _gnutls_record_buffer_put (gnutls_session_t session
,
29 content_type_t type
, uint64
* seq
, mbuffer_st
* bufel
);
32 _gnutls_record_buffer_get_size (content_type_t type
, gnutls_session_t session
)
34 return session
->internals
.record_buffer
.byte_length
;
37 int _gnutls_record_buffer_get (content_type_t type
,
38 gnutls_session_t session
, opaque
* data
,
39 size_t length
, opaque seq
[8]);
40 ssize_t
_gnutls_io_read_buffered (gnutls_session_t
, size_t n
, content_type_t
);
41 int _gnutls_io_clear_peeked_data (gnutls_session_t session
);
43 ssize_t
_gnutls_io_write_buffered (gnutls_session_t session
,
44 mbuffer_st
* bufel
, unsigned int mflag
);
46 int _gnutls_handshake_io_cache_int (gnutls_session_t
,
47 gnutls_handshake_description_t
,
51 _gnutls_handshake_io_recv_int (gnutls_session_t session
,
52 gnutls_handshake_description_t htype
,
53 handshake_buffer_st
* hsk
);
55 ssize_t
_gnutls_io_write_flush (gnutls_session_t session
);
57 _gnutls_io_check_recv (gnutls_session_t session
, unsigned int ms
);
58 ssize_t
_gnutls_handshake_io_write_flush (gnutls_session_t session
);
60 inline static void _gnutls_handshake_buffer_clear(handshake_buffer_st
* hsk
)
62 _gnutls_buffer_clear(&hsk
->data
);
66 inline static void _gnutls_handshake_buffer_init(handshake_buffer_st
* hsk
)
68 memset(hsk
, 0, sizeof(*hsk
));
69 _gnutls_buffer_init(&hsk
->data
);
73 inline static void _gnutls_handshake_recv_buffer_clear(gnutls_session_t session
)
76 for (i
=0;i
<session
->internals
.handshake_recv_buffer_size
;i
++)
77 _gnutls_handshake_buffer_clear(&session
->internals
.handshake_recv_buffer
[i
]);
78 session
->internals
.handshake_recv_buffer_size
= 0;
81 inline static void _gnutls_handshake_recv_buffer_init(gnutls_session_t session
)
84 for (i
=0;i
<MAX_HANDSHAKE_MSGS
;i
++)
86 _gnutls_handshake_buffer_init(&session
->internals
.handshake_recv_buffer
[i
]);
88 session
->internals
.handshake_recv_buffer_size
= 0;
92 _gnutls_recv_in_buffers (gnutls_session_t session
, content_type_t type
,
93 gnutls_handshake_description_t htype
);
95 #define _gnutls_handshake_io_buffer_clear( session) \
96 _mbuffer_head_clear( &session->internals.handshake_send_buffer); \
97 _gnutls_handshake_recv_buffer_clear( session);