Added convenient function spdylay_frame_nv_norm_copy()
This commit is contained in:
parent
e79de111a4
commit
abfc100edb
|
@ -397,6 +397,17 @@ void spdylay_frame_nv_downcase(char **nv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char** spdylay_frame_nv_norm_copy(const char **nv)
|
||||||
|
{
|
||||||
|
char **nv_copy;
|
||||||
|
nv_copy = spdylay_frame_nv_copy(nv);
|
||||||
|
if(nv_copy != NULL) {
|
||||||
|
spdylay_frame_nv_downcase(nv_copy);
|
||||||
|
spdylay_frame_nv_sort(nv_copy);
|
||||||
|
}
|
||||||
|
return nv_copy;
|
||||||
|
}
|
||||||
|
|
||||||
void spdylay_frame_syn_stream_init(spdylay_syn_stream *frame,
|
void spdylay_frame_syn_stream_init(spdylay_syn_stream *frame,
|
||||||
uint16_t version, uint8_t flags,
|
uint16_t version, uint8_t flags,
|
||||||
int32_t stream_id, int32_t assoc_stream_id,
|
int32_t stream_id, int32_t assoc_stream_id,
|
||||||
|
|
|
@ -536,6 +536,17 @@ void spdylay_frame_nv_sort(char **nv);
|
||||||
*/
|
*/
|
||||||
void spdylay_frame_nv_downcase(char **nv);
|
void spdylay_frame_nv_downcase(char **nv);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function first makes a copy of |nv| using
|
||||||
|
* spdylay_frame_nv_copy(). If it succeeds, then call
|
||||||
|
* spdylay_frame_nv_downcase() and spdylay_frame_nv_sort() with the
|
||||||
|
* copied name/value pairs.
|
||||||
|
*
|
||||||
|
* This function returns the copied name/value pairs if it succeeds,
|
||||||
|
* or NULL.
|
||||||
|
*/
|
||||||
|
char** spdylay_frame_nv_norm_copy(const char **nv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Makes copy of |iv| and return the copy. The |niv| is the number of
|
* Makes copy of |iv| and return the copy. The |niv| is the number of
|
||||||
* entries in |iv|. This function returns the pointer to the copy if
|
* entries in |iv|. This function returns the pointer to the copy if
|
||||||
|
|
|
@ -69,15 +69,13 @@ static int spdylay_submit_syn_stream_shared
|
||||||
free(data_prd_copy);
|
free(data_prd_copy);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
nv_copy = spdylay_frame_nv_copy(nv);
|
nv_copy = spdylay_frame_nv_norm_copy(nv);
|
||||||
if(nv_copy == NULL) {
|
if(nv_copy == NULL) {
|
||||||
free(frame);
|
free(frame);
|
||||||
free(aux_data);
|
free(aux_data);
|
||||||
free(data_prd_copy);
|
free(data_prd_copy);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
spdylay_frame_nv_downcase(nv_copy);
|
|
||||||
spdylay_frame_nv_sort(nv_copy);
|
|
||||||
flags_copy = 0;
|
flags_copy = 0;
|
||||||
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
||||||
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
||||||
|
@ -118,13 +116,11 @@ int spdylay_submit_syn_reply(spdylay_session *session, uint8_t flags,
|
||||||
if(frame == NULL) {
|
if(frame == NULL) {
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
nv_copy = spdylay_frame_nv_copy(nv);
|
nv_copy = spdylay_frame_nv_norm_copy(nv);
|
||||||
if(nv_copy == NULL) {
|
if(nv_copy == NULL) {
|
||||||
free(frame);
|
free(frame);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
spdylay_frame_nv_downcase(nv_copy);
|
|
||||||
spdylay_frame_nv_sort(nv_copy);
|
|
||||||
flags_copy = 0;
|
flags_copy = 0;
|
||||||
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
||||||
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
||||||
|
@ -150,13 +146,11 @@ int spdylay_submit_headers(spdylay_session *session, uint8_t flags,
|
||||||
if(frame == NULL) {
|
if(frame == NULL) {
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
nv_copy = spdylay_frame_nv_copy(nv);
|
nv_copy = spdylay_frame_nv_norm_copy(nv);
|
||||||
if(nv_copy == NULL) {
|
if(nv_copy == NULL) {
|
||||||
free(frame);
|
free(frame);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
spdylay_frame_nv_downcase(nv_copy);
|
|
||||||
spdylay_frame_nv_sort(nv_copy);
|
|
||||||
flags_copy = 0;
|
flags_copy = 0;
|
||||||
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
if(flags & SPDYLAY_CTRL_FLAG_FIN) {
|
||||||
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
flags_copy |= SPDYLAY_CTRL_FLAG_FIN;
|
||||||
|
@ -224,14 +218,12 @@ int spdylay_submit_response(spdylay_session *session,
|
||||||
free(data_prd_copy);
|
free(data_prd_copy);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
nv_copy = spdylay_frame_nv_copy(nv);
|
nv_copy = spdylay_frame_nv_norm_copy(nv);
|
||||||
if(nv_copy == NULL) {
|
if(nv_copy == NULL) {
|
||||||
free(frame);
|
free(frame);
|
||||||
free(data_prd_copy);
|
free(data_prd_copy);
|
||||||
return SPDYLAY_ERR_NOMEM;
|
return SPDYLAY_ERR_NOMEM;
|
||||||
}
|
}
|
||||||
spdylay_frame_nv_downcase(nv_copy);
|
|
||||||
spdylay_frame_nv_sort(nv_copy);
|
|
||||||
if(data_prd_copy == NULL) {
|
if(data_prd_copy == NULL) {
|
||||||
flags |= SPDYLAY_CTRL_FLAG_FIN;
|
flags |= SPDYLAY_CTRL_FLAG_FIN;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,9 +83,7 @@ void test_spdylay_frame_pack_nv_duplicate_keys()
|
||||||
"version", "HTTP/1.1",
|
"version", "HTTP/1.1",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
char **nv = spdylay_frame_nv_copy(nv_src);
|
char **nv = spdylay_frame_nv_norm_copy(nv_src);
|
||||||
spdylay_frame_nv_downcase(nv);
|
|
||||||
spdylay_frame_nv_sort(nv);
|
|
||||||
/* size_t inlen = */ spdylay_frame_pack_nv(out, nv, len_size);
|
/* size_t inlen = */ spdylay_frame_pack_nv(out, nv, len_size);
|
||||||
const uint8_t *outptr = out;
|
const uint8_t *outptr = out;
|
||||||
int pairs = spdylay_get_uint16(outptr);
|
int pairs = spdylay_get_uint16(outptr);
|
||||||
|
|
Loading…
Reference in New Issue