Exemplo n.º 1
0
static int gen_supplemental(gnutls_session_t session, const gnutls_supplemental_entry_st *supp,
			    gnutls_buffer_st * buf)
{
	int ret;
	gnutls_supp_send_func supp_send = supp->supp_send_func;
	size_t sizepos = buf->length;

	/* Make room for supplement type and length byte length field. */
	ret = _gnutls_buffer_append_data(buf, "\0\0\0\0", 4);
	if (ret < 0) {
		gnutls_assert();
		return ret;
	}

	ret = supp_send(session, buf);
	if (ret < 0) {
		gnutls_assert();
		return ret;
	}

	/* If data were added, store type+length, otherwise reset. */
	if (buf->length > sizepos + 4) {
		buf->data[sizepos] = (supp->type >> 8) & 0xFF;
		buf->data[sizepos + 1] = supp->type & 0xFF;
		buf->data[sizepos + 2] =
		    ((buf->length - sizepos - 4) >> 8) & 0xFF;
		buf->data[sizepos + 3] =
		    (buf->length - sizepos - 4) & 0xFF;
	} else
Exemplo n.º 2
0
int
_gnutls_gen_supplemental (gnutls_session_t session, gnutls_buffer * buf)
{
  gnutls_supplemental_entry *p;
  int ret;

  /* Make room for 3 byte length field. */
  ret = _gnutls_buffer_append (buf, "\0\0\0", 3);
  if (ret < 0)
    {
      gnutls_assert ();
      return ret;
    }

  for (p = _gnutls_supplemental; p->name; p++)
    {
      supp_send_func supp_send = p->supp_send_func;
      size_t sizepos = buf->length;

      /* Make room for supplement type and length byte length field. */
      ret = _gnutls_buffer_append (buf, "\0\0\0\0", 4);
      if (ret < 0)
	{
	  gnutls_assert ();
	  return ret;
	}

      ret = supp_send (session, buf);
      if (ret < 0)
	{
	  gnutls_assert ();
	  return ret;
	}

      /* If data were added, store type+length, otherwise reset. */
      if (buf->length > sizepos + 4)
	{
	  buf->data[sizepos] = 0;
	  buf->data[sizepos + 1] = p->type;
	  buf->data[sizepos + 2] = ((buf->length - sizepos - 4) >> 8) & 0xFF;
	  buf->data[sizepos + 3] = (buf->length - sizepos - 4) & 0xFF;
	}
      else