Ejemplo n.º 1
0
/* returns data_size or a negative number on failure
 */
static int
_gnutls_max_record_send_params (gnutls_session_t session, gnutls_buffer_st* extdata)
{
  uint8_t p;
  int ret;

  /* this function sends the client extension data (dnsname) */
  if (session->security_parameters.entity == GNUTLS_CLIENT)
    {
      extension_priv_data_t epriv;

      ret = _gnutls_ext_get_session_data (session,
                                          GNUTLS_EXTENSION_MAX_RECORD_SIZE,
                                          &epriv);
      if (ret < 0)              /* it is ok not to have it */
        {
          return 0;
        }

      if (epriv.num != DEFAULT_MAX_RECORD_SIZE)
        {
          p = (uint8_t) _gnutls_mre_record2num (epriv.num);
          ret = _gnutls_buffer_append_data( extdata, &p, 1);
          if (ret < 0)
            return gnutls_assert_val(ret);

          return 1;
        }

    }
  else
    {                           /* server side */

      if (session->security_parameters.max_record_recv_size !=
          DEFAULT_MAX_RECORD_SIZE)
        {
          p =
            (uint8_t)
            _gnutls_mre_record2num
            (session->security_parameters.max_record_recv_size);

          ret = _gnutls_buffer_append_data( extdata, &p, 1);
          if (ret < 0)
            return gnutls_assert_val(ret);

          return 1;
        }
    }

  return 0;
}
Ejemplo n.º 2
0
/**
 * gnutls_record_set_max_size:
 * @session: is a #gnutls_session_t structure.
 * @size: is the new size
 *
 * This function sets the maximum record packet size in this
 * connection.  This property can only be set to clients.  The server
 * may choose not to accept the requested size.
 *
 * Acceptable values are 512(=2^9), 1024(=2^10), 2048(=2^11) and
 * 4096(=2^12).  The requested record size does get in effect
 * immediately only while sending data. The receive part will take
 * effect after a successful handshake.
 *
 * This function uses a TLS extension called 'max record size'.  Not
 * all TLS implementations use or even understand this extension.
 *
 * Returns: On success, %GNUTLS_E_SUCCESS (zero) is returned,
 *   otherwise an error code is returned.
 **/
ssize_t
gnutls_record_set_max_size (gnutls_session_t session, size_t size)
{
  ssize_t new_size;
  extension_priv_data_t epriv;

  if (session->security_parameters.entity == GNUTLS_SERVER)
    return GNUTLS_E_INVALID_REQUEST;

  new_size = _gnutls_mre_record2num (size);

  if (new_size < 0)
    {
      gnutls_assert ();
      return new_size;
    }

  session->security_parameters.max_record_send_size = size;
  epriv.num = size;

  _gnutls_ext_set_session_data (session, GNUTLS_EXTENSION_MAX_RECORD_SIZE,
                                epriv);

  return 0;
}
Ejemplo n.º 3
0
/**
  * gnutls_record_set_max_size - sets the maximum record size
  * @session: is a #gnutls_session_t structure.
  * @size: is the new size
  *
  * This function sets the maximum record packet size in this connection.
  * This property can only be set to clients. The server may
  * choose not to accept the requested size.
  *
  * Acceptable values are 512(=2^9), 1024(=2^10), 2048(=2^11) and 4096(=2^12).
  * Returns 0 on success. The requested record size does
  * get in effect immediately only while sending data. The receive
  * part will take effect after a successful handshake.
  *
  * This function uses a TLS extension called 'max record size'.
  * Not all TLS implementations use or even understand this extension.
  *
  **/
ssize_t
gnutls_record_set_max_size (gnutls_session_t session, size_t size)
{
  ssize_t new_size;

  if (session->security_parameters.entity == GNUTLS_SERVER)
    return GNUTLS_E_INVALID_REQUEST;

  new_size = _gnutls_mre_record2num (size);

  if (new_size < 0)
    {
      gnutls_assert ();
      return new_size;
    }

  session->security_parameters.max_record_send_size = size;

  session->internals.proposed_record_size = size;

  return 0;
}