コード例 #1
0
ファイル: nghttp2_submit.c プロジェクト: jujis008/nghttp2
ssize_t nghttp2_pack_settings_payload(uint8_t *buf, size_t buflen,
                                      const nghttp2_settings_entry *iv,
                                      size_t niv) {
  if (!nghttp2_iv_check(iv, niv)) {
    return NGHTTP2_ERR_INVALID_ARGUMENT;
  }

  if (buflen < (niv * NGHTTP2_FRAME_SETTINGS_ENTRY_LENGTH)) {
    return NGHTTP2_ERR_INSUFF_BUFSIZE;
  }

  return (ssize_t)nghttp2_frame_pack_settings_payload(buf, iv, niv);
}
コード例 #2
0
ファイル: nghttp2_frame_test.c プロジェクト: DrDoing/nghttp2
void test_nghttp2_iv_check(void)
{
  nghttp2_settings_entry iv[5];

  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
  iv[0].value = 100;
  iv[1].settings_id = NGHTTP2_SETTINGS_HEADER_TABLE_SIZE;
  iv[1].value = 1024;

  CU_ASSERT(nghttp2_iv_check(iv, 2));

  iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
  iv[1].value = NGHTTP2_MAX_WINDOW_SIZE;
  CU_ASSERT(nghttp2_iv_check(iv, 2));

  /* Too large window size */
  iv[1].value = (uint32_t)NGHTTP2_MAX_WINDOW_SIZE + 1;
  CU_ASSERT(0 == nghttp2_iv_check(iv, 2));

  /* ENABLE_PUSH only allows 0 or 1 */
  iv[1].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
  iv[1].value = 0;
  CU_ASSERT(nghttp2_iv_check(iv, 2));
  iv[1].value = 1;
  CU_ASSERT(nghttp2_iv_check(iv, 2));
  iv[1].value = 3;
  CU_ASSERT(!nghttp2_iv_check(iv, 2));

  /* Undefined SETTINGS ID is allowed */
  iv[1].settings_id = 1000000009;
  iv[1].value = 0;
  CU_ASSERT(nghttp2_iv_check(iv, 2));

  /* Too large SETTINGS_HEADER_TABLE_SIZE */
  iv[1].settings_id = NGHTTP2_SETTINGS_HEADER_TABLE_SIZE;
  iv[1].value = UINT32_MAX;
  CU_ASSERT(!nghttp2_iv_check(iv, 2));

  /* Too small SETTINGS_MAX_FRAME_SIZE */
  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_FRAME_SIZE;
  iv[0].value = NGHTTP2_MAX_FRAME_SIZE_MIN - 1;
  CU_ASSERT(!nghttp2_iv_check(iv, 1));

  /* Too large SETTINGS_MAX_FRAME_SIZE */
  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_FRAME_SIZE;
  iv[0].value = NGHTTP2_MAX_FRAME_SIZE_MAX + 1;
  CU_ASSERT(!nghttp2_iv_check(iv, 1));

  /* Max and min SETTINGS_MAX_FRAME_SIZE */
  iv[0].settings_id = NGHTTP2_SETTINGS_MAX_FRAME_SIZE;
  iv[0].value = NGHTTP2_MAX_FRAME_SIZE_MIN;
  iv[1].settings_id = NGHTTP2_SETTINGS_MAX_FRAME_SIZE;
  iv[1].value = NGHTTP2_MAX_FRAME_SIZE_MAX;
  CU_ASSERT(nghttp2_iv_check(iv, 2));
}