Sort nv in spdylay_submit_request and spdylay_submit_response
This commit is contained in:
parent
4c6765e1ed
commit
de57b6efea
|
@ -337,6 +337,18 @@ char** spdylay_frame_nv_copy(const char **nv)
|
||||||
return nnv;
|
return nnv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int spdylay_string_compar(const void *lhs, const void *rhs)
|
||||||
|
{
|
||||||
|
return strcmp(*(char **)lhs, *(char **)rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void spdylay_frame_nv_sort(char **nv)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
for(n = 0; nv[n]; ++n);
|
||||||
|
qsort(nv, n/2, 2*sizeof(char*), spdylay_string_compar);
|
||||||
|
}
|
||||||
|
|
||||||
void spdylay_frame_syn_stream_init(spdylay_syn_stream *frame, uint8_t flags,
|
void spdylay_frame_syn_stream_init(spdylay_syn_stream *frame, uint8_t flags,
|
||||||
int32_t stream_id, int32_t assoc_stream_id,
|
int32_t stream_id, int32_t assoc_stream_id,
|
||||||
uint8_t pri, char **nv)
|
uint8_t pri, char **nv)
|
||||||
|
|
|
@ -213,4 +213,9 @@ void spdylay_frame_nv_free(char **nv);
|
||||||
*/
|
*/
|
||||||
char** spdylay_frame_nv_copy(const char **nv);
|
char** spdylay_frame_nv_copy(const char **nv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sorts |nv| in the ascending order of name.
|
||||||
|
*/
|
||||||
|
void spdylay_frame_nv_sort(char **nv);
|
||||||
|
|
||||||
#endif /* SPDYLAY_FRAME_H */
|
#endif /* SPDYLAY_FRAME_H */
|
||||||
|
|
|
@ -1019,6 +1019,7 @@ int spdylay_submit_response(spdylay_session *session,
|
||||||
free(frame);
|
free(frame);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
spdylay_frame_nv_sort(nv_copy);
|
||||||
if(data_prd == NULL) {
|
if(data_prd == NULL) {
|
||||||
flags |= SPDYLAY_FLAG_FIN;
|
flags |= SPDYLAY_FLAG_FIN;
|
||||||
}
|
}
|
||||||
|
@ -1068,6 +1069,7 @@ int spdylay_submit_request(spdylay_session *session, uint8_t pri,
|
||||||
free(frame);
|
free(frame);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
|
spdylay_frame_nv_sort(nv_copy);
|
||||||
/* When we support POST using spdylay_data_provider, flags should be
|
/* When we support POST using spdylay_data_provider, flags should be
|
||||||
0 if data_prd is set. */
|
0 if data_prd is set. */
|
||||||
flags |= SPDYLAY_FLAG_FIN;
|
flags |= SPDYLAY_FLAG_FIN;
|
||||||
|
|
|
@ -91,7 +91,8 @@ int main()
|
||||||
test_spdylay_frame_count_nv_space) ||
|
test_spdylay_frame_count_nv_space) ||
|
||||||
!CU_add_test(pSuite, "frame_pack_ping", test_spdylay_frame_pack_ping) ||
|
!CU_add_test(pSuite, "frame_pack_ping", test_spdylay_frame_pack_ping) ||
|
||||||
!CU_add_test(pSuite, "frame_pack_headers",
|
!CU_add_test(pSuite, "frame_pack_headers",
|
||||||
test_spdylay_frame_pack_headers)) {
|
test_spdylay_frame_pack_headers) ||
|
||||||
|
!CU_add_test(pSuite, "frame_nv_sort", test_spdylay_frame_nv_sort)) {
|
||||||
CU_cleanup_registry();
|
CU_cleanup_registry();
|
||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,3 +99,22 @@ void test_spdylay_frame_pack_headers()
|
||||||
spdylay_zlib_inflate_free(&inflater);
|
spdylay_zlib_inflate_free(&inflater);
|
||||||
spdylay_zlib_deflate_free(&deflater);
|
spdylay_zlib_deflate_free(&deflater);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_spdylay_frame_nv_sort()
|
||||||
|
{
|
||||||
|
char *nv[7];
|
||||||
|
nv[0] = (char*)"version";
|
||||||
|
nv[1] = (char*)"HTTP/1.1";
|
||||||
|
nv[2] = (char*)"method";
|
||||||
|
nv[3] = (char*)"GET";
|
||||||
|
nv[4] = (char*)"scheme";
|
||||||
|
nv[5] = (char*)"https";
|
||||||
|
nv[6] = NULL;
|
||||||
|
spdylay_frame_nv_sort(nv);
|
||||||
|
CU_ASSERT(strcmp("method", nv[0]) == 0);
|
||||||
|
CU_ASSERT(strcmp("GET", nv[1]) == 0);
|
||||||
|
CU_ASSERT(strcmp("scheme", nv[2]) == 0);
|
||||||
|
CU_ASSERT(strcmp("https", nv[3]) == 0);
|
||||||
|
CU_ASSERT(strcmp("version", nv[4]) == 0);
|
||||||
|
CU_ASSERT(strcmp("HTTP/1.1", nv[5]) == 0);
|
||||||
|
}
|
||||||
|
|
|
@ -29,5 +29,6 @@ void test_spdylay_frame_unpack_nv();
|
||||||
void test_spdylay_frame_count_nv_space();
|
void test_spdylay_frame_count_nv_space();
|
||||||
void test_spdylay_frame_pack_ping();
|
void test_spdylay_frame_pack_ping();
|
||||||
void test_spdylay_frame_pack_headers();
|
void test_spdylay_frame_pack_headers();
|
||||||
|
void test_spdylay_frame_nv_sort();
|
||||||
|
|
||||||
#endif /* SPDYLAY_FRAME_TEST_H */
|
#endif /* SPDYLAY_FRAME_TEST_H */
|
||||||
|
|
Loading…
Reference in New Issue