本文整理汇总了C++中IS_DTLS函数的典型用法代码示例。如果您正苦于以下问题:C++ IS_DTLS函数的具体用法?C++ IS_DTLS怎么用?C++ IS_DTLS使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IS_DTLS函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _gnutls_handshake_io_cache_int
/* This is a send function for the gnutls handshake
* protocol. Just makes sure that all data have been sent.
*
*/
int
_gnutls_handshake_io_cache_int(gnutls_session_t session,
gnutls_handshake_description_t htype,
mbuffer_st * bufel)
{
mbuffer_head_st *send_buffer;
if (IS_DTLS(session)) {
bufel->handshake_sequence =
session->internals.dtls.hsk_write_seq - 1;
}
send_buffer = &session->internals.handshake_send_buffer;
/* ensure that our epoch does not get garbage collected
* before we send all queued messages with it */
bufel->epoch =
(uint16_t) _gnutls_epoch_refcount_inc(session,
EPOCH_WRITE_CURRENT);
bufel->htype = htype;
if (bufel->htype == GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC)
bufel->type = GNUTLS_CHANGE_CIPHER_SPEC;
else
bufel->type = GNUTLS_HANDSHAKE;
_mbuffer_enqueue(send_buffer, bufel);
_gnutls_write_log
("HWRITE: enqueued [%s] %d. Total %d bytes.\n",
_gnutls_handshake2str(bufel->htype), (int) bufel->msg.size,
(int) send_buffer->byte_length);
return 0;
}
开发者ID:gnutls,项目名称:gnutls,代码行数:38,代码来源:buffers.c
示例2: check_buffers
/* Checks if there are pending data in the record buffers. If there are
* then it copies the data.
*/
static int
check_buffers (gnutls_session_t session, content_type_t type,
uint8_t * data, int data_size, void* seq)
{
if ((type == GNUTLS_APPLICATION_DATA ||
type == GNUTLS_HANDSHAKE ||
type == GNUTLS_CHANGE_CIPHER_SPEC)
&& _gnutls_record_buffer_get_size (session) > 0)
{
int ret;
ret = _gnutls_record_buffer_get (type, session, data, data_size, seq);
if (ret < 0)
{
if (IS_DTLS(session))
{
if (ret == GNUTLS_E_UNEXPECTED_PACKET)
{
ret = GNUTLS_E_AGAIN;
}
}
gnutls_assert ();
return ret;
}
return ret;
}
return 0;
}
开发者ID:frankmorgner,项目名称:gnutls,代码行数:32,代码来源:gnutls_record.c
示例3: _gnutls_dumbfw_send_params
static int
_gnutls_dumbfw_send_params(gnutls_session_t session,
gnutls_buffer_st * extdata)
{
int total_size = 0, ret;
uint8_t pad[257];
unsigned pad_size;
if (session->security_parameters.entity == GNUTLS_SERVER ||
session->internals.priorities.dumbfw == 0 ||
IS_DTLS(session) != 0 ||
(extdata->length < 256 || extdata->length >= 512)) {
return 0;
} else {
/* 256 <= extdata->length < 512 */
pad_size = 512 - extdata->length;
memset(pad, 0, pad_size);
ret =
gnutls_buffer_append_data(extdata, pad,
pad_size);
if (ret < 0)
return gnutls_assert_val(ret);
total_size += pad_size;
}
return total_size;
}
开发者ID:GostCrypt,项目名称:GnuTLS,代码行数:29,代码来源:dumbfw.c
示例4: record_check_version
/* Here we check if the advertized version is the one we
* negotiated in the handshake.
*/
inline static int
record_check_version (gnutls_session_t session,
gnutls_handshake_description_t htype, uint8_t version[2])
{
if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO)
{
/* Reject hello packets with major version higher than 3.
*/
if (!(IS_DTLS(session)) && version[0] > 3)
{
gnutls_assert ();
_gnutls_record_log
("REC[%p]: INVALID VERSION PACKET: (%d) %d.%d\n", session,
htype, version[0], version[1]);
return GNUTLS_E_UNSUPPORTED_VERSION_PACKET;
}
}
else if (htype != GNUTLS_HANDSHAKE_SERVER_HELLO &&
gnutls_protocol_get_version (session) !=
_gnutls_version_get (version[0], version[1]))
{
/* Reject record packets that have a different version than the
* one negotiated. Note that this version is not protected by any
* mac. I don't really think that this check serves any purpose.
*/
gnutls_assert ();
_gnutls_record_log ("REC[%p]: INVALID VERSION PACKET: (%d) %d.%d\n",
session, htype, version[0], version[1]);
return GNUTLS_E_UNSUPPORTED_VERSION_PACKET;
}
return 0;
}
开发者ID:intgr,项目名称:gnutls,代码行数:37,代码来源:gnutls_record.c
示例5: ssl_CalculatePaddingExtLen
/* Takes the size of the ClientHello, less the record header, and determines how
* much padding is required. */
static unsigned int
ssl_CalculatePaddingExtLen(const sslSocket *ss, unsigned int clientHelloLength)
{
unsigned int recordLength = 1 /* handshake message type */ +
3 /* handshake message length */ +
clientHelloLength;
unsigned int extensionLen;
/* Don't pad for DTLS, for SSLv3, or for renegotiation. */
if (IS_DTLS(ss) ||
ss->vrange.max < SSL_LIBRARY_VERSION_TLS_1_0 ||
ss->firstHsDone) {
return 0;
}
/* A padding extension may be included to ensure that the record containing
* the ClientHello doesn't have a length between 256 and 511 bytes
* (inclusive). Initial ClientHello records with such lengths trigger bugs
* in F5 devices. */
if (recordLength < 256 || recordLength >= 512) {
return 0;
}
extensionLen = 512 - recordLength;
/* Extensions take at least four bytes to encode. Always include at least
* one byte of data if we are padding. Some servers will time out or
* terminate the connection if the last ClientHello extension is empty. */
if (extensionLen < 5) {
extensionLen = 5;
}
return extensionLen - 4;
}
开发者ID:franziskuskiefer,项目名称:nss,代码行数:35,代码来源:ssl3ext.c
示例6: _gnutls_epoch_alloc
int
_gnutls_epoch_alloc (gnutls_session_t session, uint16_t epoch,
record_parameters_st ** out)
{
record_parameters_st **slot;
_gnutls_record_log ("REC[%p]: Allocating epoch #%u\n", session, epoch);
slot = epoch_get_slot (session, epoch);
/* If slot out of range or not empty. */
if (slot == NULL)
return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST);
if (*slot != NULL)
return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST);
*slot = gnutls_calloc (1, sizeof (record_parameters_st));
if (*slot == NULL)
return gnutls_assert_val (GNUTLS_E_MEMORY_ERROR);
(*slot)->epoch = epoch;
(*slot)->cipher_algorithm = GNUTLS_CIPHER_UNKNOWN;
(*slot)->mac_algorithm = GNUTLS_MAC_UNKNOWN;
(*slot)->compression_algorithm = GNUTLS_COMP_UNKNOWN;
if (IS_DTLS (session))
_gnutls_write_uint16 (epoch, UINT64DATA((*slot)->write.sequence_number));
if (out != NULL)
*out = *slot;
return 0;
}
开发者ID:jothan,项目名称:gnutls,代码行数:34,代码来源:gnutls_constate.c
示例7: check_packet_buffers
/* Checks and retrieves any pending data in the application data record buffers.
*/
static int
check_packet_buffers(gnutls_session_t session, content_type_t type,
gnutls_packet_t *packet)
{
if (_gnutls_record_buffer_get_size(session) > 0) {
int ret;
ret =
_gnutls_record_buffer_get_packet(type, session,
packet);
if (ret < 0) {
if (IS_DTLS(session)) {
if (ret == GNUTLS_E_UNEXPECTED_PACKET) {
ret = GNUTLS_E_AGAIN;
}
}
gnutls_assert();
return ret;
}
return ret;
}
*packet = NULL;
return 0;
}
开发者ID:Distrotech,项目名称:gnutls,代码行数:27,代码来源:gnutls_record.c
示例8: gnutls_record_send
/**
* gnutls_record_send:
* @session: is a #gnutls_session_t structure.
* @data: contains the data to send
* @data_size: is the length of the data
*
* This function has the similar semantics with send(). The only
* difference is that it accepts a GnuTLS session, and uses different
* error codes.
* Note that if the send buffer is full, send() will block this
* function. See the send() documentation for more information.
*
* You can replace the default push function which is send(), by using
* gnutls_transport_set_push_function().
*
* If the EINTR is returned by the internal push function
* then %GNUTLS_E_INTERRUPTED will be returned. If
* %GNUTLS_E_INTERRUPTED or %GNUTLS_E_AGAIN is returned, you must
* call this function again, with the exact same parameters; alternatively
* you could provide a %NULL pointer for data, and 0 for
* size. cf. gnutls_record_get_direction().
*
* Note that in DTLS this function will return the %GNUTLS_E_LARGE_PACKET
* error code if the send data exceed the data MTU value - as returned
* by gnutls_dtls_get_data_mtu(). The errno value EMSGSIZE
* also maps to %GNUTLS_E_LARGE_PACKET.
* Note that since 3.2.13 this function can be called under cork in DTLS
* mode, and will refuse to send data over the MTU size by returning
* %GNUTLS_E_LARGE_PACKET.
*
* Returns: The number of bytes sent, or a negative error code. The
* number of bytes sent might be less than @data_size. The maximum
* number of bytes this function can send in a single call depends
* on the negotiated maximum record size.
**/
ssize_t
gnutls_record_send(gnutls_session_t session, const void *data,
size_t data_size)
{
if (session->internals.record_flush_mode == RECORD_FLUSH) {
return _gnutls_send_int(session, GNUTLS_APPLICATION_DATA,
-1, EPOCH_WRITE_CURRENT, data,
data_size, MBUFFER_FLUSH);
} else { /* GNUTLS_CORKED */
int ret;
if (IS_DTLS(session)) {
if (data_size + session->internals.record_presend_buffer.length >
gnutls_dtls_get_data_mtu(session)) {
return gnutls_assert_val(GNUTLS_E_LARGE_PACKET);
}
}
ret =
_gnutls_buffer_append_data(&session->internals.
record_presend_buffer, data,
data_size);
if (ret < 0)
return gnutls_assert_val(ret);
return data_size;
}
}
开发者ID:Distrotech,项目名称:gnutls,代码行数:64,代码来源:gnutls_record.c
示例9: _gnutls_record_buffer_get_packet
int
_gnutls_record_buffer_get_packet(content_type_t type, gnutls_session_t session, gnutls_packet_t *packet)
{
mbuffer_st *bufel;
bufel =
_mbuffer_head_pop_first(&session->internals.record_buffer);
if (bufel == NULL)
return
gnutls_assert_val
(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
if (type != bufel->type) {
if (IS_DTLS(session))
_gnutls_audit_log(session,
"Discarded unexpected %s (%d) packet (expecting: %s)\n",
_gnutls_packet2str(bufel->type),
(int) bufel->type,
_gnutls_packet2str(type));
_mbuffer_head_remove_bytes(&session->internals.
record_buffer, bufel->msg.size);
return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET);
}
*packet = bufel;
return bufel->msg.size - bufel->mark;
}
开发者ID:gnutls,项目名称:gnutls,代码行数:28,代码来源:buffers.c
示例10: _gnutls_io_check_recv
/* Checks whether there are received data within
* a timeframe.
*
* Returns 0 if data were received, GNUTLS_E_TIMEDOUT
* on timeout and a negative error code on error.
*/
int _gnutls_io_check_recv(gnutls_session_t session, unsigned int ms)
{
gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr;
int ret = 0, err;
if (unlikely
(session->internals.pull_timeout_func == gnutls_system_recv_timeout
&& session->internals.pull_func != system_read)) {
_gnutls_debug_log("The pull function has been replaced but not the pull timeout.");
return gnutls_assert_val(GNUTLS_E_PULL_ERROR);
}
reset_errno(session);
ret = session->internals.pull_timeout_func(fd, ms);
if (ret == -1) {
err = get_errno(session);
_gnutls_read_log
("READ_TIMEOUT: %d returned from %p, errno=%d (timeout: %u)\n",
(int) ret, fd, err, ms);
return errno_to_gerr(err, IS_DTLS(session));
}
if (ret > 0)
return 0;
else
return GNUTLS_E_TIMEDOUT;
}
开发者ID:gnutls,项目名称:gnutls,代码行数:34,代码来源:buffers.c
示例11: _gnutls_encrypt
/* returns ciphertext which contains the headers too. This also
* calculates the size in the header field.
*
* If random pad != 0 then the random pad data will be appended.
*/
int
_gnutls_encrypt (gnutls_session_t session, const opaque * headers,
size_t headers_size, const opaque * data,
size_t data_size, opaque * ciphertext,
size_t ciphertext_size, content_type_t type,
record_parameters_st * params)
{
gnutls_datum_t comp;
int free_comp = 0;
int ret;
if (data_size == 0 || is_write_comp_null (params) == 0)
{
comp.data = (opaque*)data;
comp.size = data_size;
}
else
{
/* Here comp is allocated and must be
* freed.
*/
free_comp = 1;
comp.size = ciphertext_size - headers_size;
comp.data = gnutls_malloc(comp.size);
if (comp.data == NULL)
return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
ret = _gnutls_compress( ¶ms->write.compression_state, data, data_size, comp.data, comp.size);
if (ret < 0)
{
gnutls_free(comp.data);
return gnutls_assert_val(ret);
}
comp.size = ret;
}
ret = compressed_to_ciphertext (session, &ciphertext[headers_size],
ciphertext_size - headers_size,
&comp, type, params);
if (free_comp)
gnutls_free(comp.data);
if (ret < 0)
return gnutls_assert_val(ret);
/* copy the headers */
memcpy (ciphertext, headers, headers_size);
if(IS_DTLS(session))
_gnutls_write_uint16 (ret, &ciphertext[11]);
else
_gnutls_write_uint16 (ret, &ciphertext[3]);
return ret + headers_size;
}
开发者ID:MihirKulkarni,项目名称:TLS_extension,代码行数:63,代码来源:gnutls_cipher.c
示例12: get_last_packet
/* returns the last stored handshake packet.
*/
static int get_last_packet(gnutls_session_t session, gnutls_handshake_description_t htype,
handshake_buffer_st * hsk)
{
handshake_buffer_st* recv_buf = session->internals.handshake_recv_buffer;
if (IS_DTLS(session))
{
if (session->internals.handshake_recv_buffer_size == 0 ||
(session->internals.dtls.hsk_read_seq != recv_buf[LAST_ELEMENT].sequence))
goto timeout;
if (htype != recv_buf[LAST_ELEMENT].htype)
{
hsk->htype = recv_buf[LAST_ELEMENT].htype;
return gnutls_assert_val(GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET);
}
else if ((recv_buf[LAST_ELEMENT].start_offset == 0 &&
recv_buf[LAST_ELEMENT].end_offset == recv_buf[LAST_ELEMENT].length -1) ||
recv_buf[LAST_ELEMENT].length == 0)
{
session->internals.dtls.hsk_read_seq++;
_gnutls_handshake_buffer_move(hsk, &recv_buf[LAST_ELEMENT]);
session->internals.handshake_recv_buffer_size--;
return 0;
}
else
goto timeout;
}
else /* TLS */
{
if (session->internals.handshake_recv_buffer_size > 0 && recv_buf[0].length == recv_buf[0].data.length)
{
if (cmp_hsk_types(htype, recv_buf[0].htype) == 0)
{
hsk->htype = recv_buf[LAST_ELEMENT].htype;
return gnutls_assert_val(GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET);
}
_gnutls_handshake_buffer_move(hsk, &recv_buf[0]);
session->internals.handshake_recv_buffer_size--;
return 0;
}
else
return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
}
timeout:
if (time(0)-session->internals.dtls.handshake_start_time > session->internals.dtls.total_timeout/1000)
return gnutls_assert_val(GNUTLS_E_TIMEDOUT);
else
{
if (session->internals.dtls.blocking != 0)
millisleep(50);
return gnutls_assert_val(GNUTLS_E_AGAIN);
}
}
开发者ID:jothan,项目名称:gnutls,代码行数:60,代码来源:gnutls_buffers.c
示例13: sequence_increment
/* Increments the sequence value
*/
inline static int
sequence_increment(gnutls_session_t session, uint64 * value)
{
if (IS_DTLS(session)) {
return _gnutls_uint48pp(value);
} else {
return _gnutls_uint64pp(value);
}
}
开发者ID:Distrotech,项目名称:gnutls,代码行数:11,代码来源:gnutls_record.c
示例14: _gnutls_read
/* This function is like read. But it does not return -1 on error.
* It does return gnutls_errno instead.
*
* Flags are only used if the default recv() function is being used.
*/
static ssize_t
_gnutls_read (gnutls_session_t session, mbuffer_st **bufel,
size_t size, gnutls_pull_func pull_func)
{
if (IS_DTLS (session))
/* Size is not passed, since a whole datagram will be read. */
return _gnutls_dgram_read (session, bufel, pull_func);
else
return _gnutls_stream_read (session, bufel, size, pull_func);
}
开发者ID:jothan,项目名称:gnutls,代码行数:15,代码来源:gnutls_buffers.c
示例15: tls13_SendShortHeaderXtn
PRInt32
tls13_SendShortHeaderXtn(const sslSocket *ss,
TLSExtensionData *xtnData,
PRBool append, PRUint32 maxBytes)
{
PRUint32 extension_len = 2 + 2; /* Type + length (0). */
if (!ss->opt.enableShortHeaders) {
return 0;
}
/* Presently this is incompatible with 0-RTT. We will fix if
* it becomes more than an experiment. */
if (ss->opt.enable0RttData) {
return 0;
}
if (IS_DTLS(ss)) {
return 0;
}
/* Don't send this if TLS 1.3 isn't at least possible. */
if (ss->vrange.max < SSL_LIBRARY_VERSION_TLS_1_3) {
/* This should only happen on the client. */
PORT_Assert(!ss->sec.isServer);
return 0;
}
SSL_TRC(3, ("%d: TLS13[%d]: send short_header extension",
SSL_GETPID(), ss->fd));
if (maxBytes < extension_len) {
PORT_Assert(0);
return 0;
}
if (append) {
SECStatus rv;
rv = ssl3_ExtAppendHandshakeNumber(ss, ssl_tls13_short_header_xtn, 2);
if (rv != SECSuccess)
return -1;
rv = ssl3_ExtAppendHandshakeNumber(ss, 0, 2);
if (rv != SECSuccess)
return -1;
xtnData->advertised[xtnData->numAdvertised++] =
ssl_tls13_short_header_xtn;
}
return extension_len;
}
开发者ID:Wafflespeanut,项目名称:gecko-dev,代码行数:53,代码来源:tls13exthandle.c
示例16: _gnutls_handshake_io_write_flush
/* This function writes the data that are left in the
* Handshake write buffer (ie. because the previous write was
* interrupted.
*
*/
ssize_t
_gnutls_handshake_io_write_flush (gnutls_session_t session)
{
mbuffer_head_st *const send_buffer =
&session->internals.handshake_send_buffer;
gnutls_datum_t msg;
int ret;
uint16_t epoch;
ssize_t total = 0;
mbuffer_st *cur;
_gnutls_write_log ("HWRITE FLUSH: %d bytes in buffer.\n",
(int) send_buffer->byte_length);
if (IS_DTLS(session))
return _dtls_transmit(session);
for (cur = _mbuffer_head_get_first (send_buffer, &msg);
cur != NULL; cur = _mbuffer_head_get_first (send_buffer, &msg))
{
epoch = cur->epoch;
ret = _gnutls_send_int (session, cur->type,
cur->htype,
epoch,
msg.data, msg.size, 0);
if (ret >= 0)
{
total += ret;
ret = _mbuffer_head_remove_bytes (send_buffer, ret);
if (ret == 1)
_gnutls_epoch_refcount_dec(session, epoch);
_gnutls_write_log ("HWRITE: wrote %d bytes, %d bytes left.\n",
ret, (int) send_buffer->byte_length);
}
else
{
_gnutls_write_log ("HWRITE error: code %d, %d bytes left.\n",
ret, (int) send_buffer->byte_length);
gnutls_assert ();
return ret;
}
}
return _gnutls_io_write_flush (session);
}
开发者ID:jothan,项目名称:gnutls,代码行数:56,代码来源:gnutls_buffers.c
示例17: _gnutls_encrypt
/* returns ciphertext which contains the headers too. This also
* calculates the size in the header field.
*
*/
int
_gnutls_encrypt(gnutls_session_t session,
const uint8_t *data, size_t data_size,
size_t min_pad,
mbuffer_st *bufel,
content_type_t type, record_parameters_st *params)
{
gnutls_datum_t plaintext;
const version_entry_st *vers = get_version(session);
int ret;
plaintext.data = (uint8_t *) data;
plaintext.size = data_size;
if (vers && vers->tls13_sem) {
/* it fills the header, as it is included in the authenticated
* data of the AEAD cipher. */
ret =
encrypt_packet_tls13(session,
_mbuffer_get_udata_ptr(bufel),
_mbuffer_get_udata_size(bufel),
&plaintext, min_pad, type,
params);
if (ret < 0)
return gnutls_assert_val(ret);
} else {
ret =
encrypt_packet(session,
_mbuffer_get_udata_ptr(bufel),
_mbuffer_get_udata_size
(bufel), &plaintext, min_pad, type,
params);
if (ret < 0)
return gnutls_assert_val(ret);
}
if (IS_DTLS(session))
_gnutls_write_uint16(ret,
((uint8_t *)
_mbuffer_get_uhead_ptr(bufel)) + 11);
else
_gnutls_write_uint16(ret,
((uint8_t *)
_mbuffer_get_uhead_ptr(bufel)) + 3);
_mbuffer_set_udata_size(bufel, ret);
_mbuffer_set_uhead_size(bufel, 0);
return _mbuffer_get_udata_size(bufel);
}
开发者ID:gnutls,项目名称:gnutls,代码行数:55,代码来源:cipher.c
示例18: _gnutls_record_buffer_get
int
_gnutls_record_buffer_get(content_type_t type,
gnutls_session_t session, uint8_t * data,
size_t length, uint8_t seq[8])
{
gnutls_datum_t msg;
mbuffer_st *bufel;
if (length == 0 || data == NULL) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}
bufel =
_mbuffer_head_get_first(&session->internals.record_buffer,
&msg);
if (bufel == NULL)
return
gnutls_assert_val
(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
if (type != bufel->type) {
if (IS_DTLS(session))
_gnutls_audit_log(session,
"Discarded unexpected %s (%d) packet (expecting: %s (%d))\n",
_gnutls_packet2str(bufel->type),
(int) bufel->type,
_gnutls_packet2str(type),
(int) type);
else
_gnutls_debug_log("received unexpected packet: %s(%d)\n",
_gnutls_packet2str(bufel->type), (int)bufel->type);
_mbuffer_head_remove_bytes(&session->internals.
record_buffer, msg.size);
return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET);
}
if (msg.size <= length)
length = msg.size;
if (seq)
memcpy(seq, bufel->record_sequence.i, 8);
memcpy(data, msg.data, length);
_mbuffer_head_remove_bytes(&session->internals.record_buffer,
length);
return length;
}
开发者ID:gnutls,项目名称:gnutls,代码行数:50,代码来源:buffers.c
示例19: tls13_HandleShortHeaderXtn
SECStatus
tls13_HandleShortHeaderXtn(
const sslSocket *ss, TLSExtensionData *xtnData, PRUint16 ex_type,
SECItem *data)
{
SSL_TRC(3, ("%d: TLS13[%d]: handle short_header extension",
SSL_GETPID(), ss->fd));
/* The client might have asked for this, but we didn't negotiate TLS 1.3. */
if (ss->version < SSL_LIBRARY_VERSION_TLS_1_3) {
return SECSuccess;
}
/* Presently this is incompatible with 0-RTT. We will fix if
* it becomes more than an experiment. */
if (ss->opt.enable0RttData) {
return SECSuccess;
}
if (IS_DTLS(ss)) {
PORT_SetError(SSL_ERROR_EXTENSION_DISALLOWED_FOR_VERSION);
return SECFailure;
}
if (data->len) {
PORT_SetError(SSL_ERROR_RX_MALFORMED_HANDSHAKE);
return SECFailure;
}
if (!ss->opt.enableShortHeaders) {
/* Ignore. */
return SECSuccess;
}
/* Keep track of negotiated extensions. */
xtnData->negotiated[xtnData->numNegotiated++] = ex_type;
if (ss->sec.isServer) {
SECStatus rv;
rv = ssl3_RegisterExtensionSender(ss, xtnData,
ssl_tls13_short_header_xtn,
tls13_SendShortHeaderXtn);
if (rv != SECSuccess) {
return SECFailure;
}
}
return SECSuccess;
}
开发者ID:Wafflespeanut,项目名称:gecko-dev,代码行数:50,代码来源:tls13exthandle.c
示例20: _gnutls_supported_compression_methods
int
_gnutls_supported_compression_methods(gnutls_session_t session,
uint8_t * comp, size_t comp_size)
{
unsigned int i, j;
int tmp;
if (comp_size < SUPPORTED_COMPRESSION_METHODS)
return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR);
for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++) {
if (IS_DTLS(session) && session->internals.priorities.compression.priority[i] != GNUTLS_COMP_NULL) {
gnutls_assert();
continue;
}
tmp =
_gnutls_compression_get_num(session->
internals.priorities.
compression.priority[i]);
/* remove private compression algorithms, if requested.
*/
if (tmp == -1 || (tmp >= MIN_PRIVATE_COMP_ALGO &&
session->internals.enable_private == 0))
{
gnutls_assert();
continue;
}
comp[j] = (uint8_t) tmp;
j++;
}
if (j == 0) {
gnutls_assert();
return GNUTLS_E_NO_COMPRESSION_ALGORITHMS;
}
return j;
}
开发者ID:GostCrypt,项目名称:GnuTLS,代码行数:40,代码来源:compress.c
注:本文中的IS_DTLS函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论