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
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