mirror of
https://github.com/moparisthebest/spdylay
synced 2024-12-21 23:28:52 -05:00
Add spdylay_npn_get_proto_list() public API function.
spdylay_npn_get_proto_list() returns a pointer to the supported SPDY version list. The element of the list is spdylay_npn_proto struct. It contains all SPDY version information this library supports. The application can use this information to configure NPN protocol offerings/selection.
This commit is contained in:
parent
cc15f4bd89
commit
4e5e741907
@ -1993,6 +1993,41 @@ int spdylay_submit_window_update(spdylay_session *session, int32_t stream_id,
|
||||
int spdylay_select_next_protocol(unsigned char **out, unsigned char *outlen,
|
||||
const unsigned char *in, unsigned int inlen);
|
||||
|
||||
/**
|
||||
* @struct
|
||||
*
|
||||
* This struct contains SPDY version information this library
|
||||
* supports.
|
||||
*/
|
||||
typedef struct {
|
||||
/**
|
||||
* SPDY protocol version name which can be used as TLS NPN protocol
|
||||
* string.
|
||||
*/
|
||||
const unsigned char *proto;
|
||||
/**
|
||||
* The length of proto member.
|
||||
*/
|
||||
uint8_t len;
|
||||
/**
|
||||
* The corresponding SPDY version constant which can be passed to
|
||||
* `spdylay_session_client_new()` and `spdylay_session_server_new()`
|
||||
* as version argument.
|
||||
*/
|
||||
uint16_t version;
|
||||
} spdylay_npn_proto;
|
||||
|
||||
/**
|
||||
* @function
|
||||
*
|
||||
* Returns a pointer to the supported SPDY version list. The number of
|
||||
* elements in the list will be assigned to the |*len_ptr|. It
|
||||
* contains all SPDY version information this library supports. The
|
||||
* application can use this information to configure NPN protocol
|
||||
* offerings/selection.
|
||||
*/
|
||||
const spdylay_npn_proto* spdylay_npn_get_proto_list(size_t *len_ptr);
|
||||
|
||||
/**
|
||||
* @function
|
||||
*
|
||||
|
@ -26,21 +26,22 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
typedef struct {
|
||||
const unsigned char *proto;
|
||||
uint8_t len;
|
||||
uint16_t version;
|
||||
} spdylay_npn_proto;
|
||||
static const spdylay_npn_proto proto_list[] = {
|
||||
{ (const unsigned char*)"spdy/3", 6, SPDYLAY_PROTO_SPDY3 },
|
||||
{ (const unsigned char*)"spdy/2", 6, SPDYLAY_PROTO_SPDY2 }
|
||||
};
|
||||
|
||||
const spdylay_npn_proto* spdylay_npn_get_proto_list(size_t *len_ptr)
|
||||
{
|
||||
*len_ptr = sizeof(proto_list)/sizeof(spdylay_npn_proto);
|
||||
return proto_list;
|
||||
}
|
||||
|
||||
int spdylay_select_next_protocol(unsigned char **out, unsigned char *outlen,
|
||||
const unsigned char *in, unsigned int inlen)
|
||||
{
|
||||
int http_selected = 0;
|
||||
unsigned int i = 0;
|
||||
static const spdylay_npn_proto proto_list[] = {
|
||||
{ (const unsigned char*)"spdy/3", 6, SPDYLAY_PROTO_SPDY3 },
|
||||
{ (const unsigned char*)"spdy/2", 6, SPDYLAY_PROTO_SPDY2 }
|
||||
};
|
||||
for(; i < inlen; i += in[i]+1) {
|
||||
unsigned int j;
|
||||
for(j = 0; j < sizeof(proto_list)/sizeof(spdylay_npn_proto); ++j) {
|
||||
|
@ -74,6 +74,8 @@ int main(int argc, char* argv[])
|
||||
!CU_add_test(pSuite, "zlib_spdy2", test_spdylay_zlib_spdy2) ||
|
||||
!CU_add_test(pSuite, "zlib_spdy3", test_spdylay_zlib_spdy3) ||
|
||||
!CU_add_test(pSuite, "npn", test_spdylay_npn) ||
|
||||
!CU_add_test(pSuite, "npn_get_proto_list",
|
||||
test_spdylay_npn_get_proto_list) ||
|
||||
!CU_add_test(pSuite, "session_recv", test_spdylay_session_recv) ||
|
||||
!CU_add_test(pSuite, "session_recv_invalid_stream_id",
|
||||
test_spdylay_session_recv_invalid_stream_id) ||
|
||||
|
@ -79,3 +79,17 @@ void test_spdylay_npn(void)
|
||||
http11();
|
||||
no_overlap();
|
||||
}
|
||||
|
||||
void test_spdylay_npn_get_proto_list(void)
|
||||
{
|
||||
size_t len;
|
||||
const spdylay_npn_proto *list = spdylay_npn_get_proto_list(&len);
|
||||
CU_ASSERT_EQUAL(2, len);
|
||||
CU_ASSERT_STRING_EQUAL("spdy/3", list[0].proto);
|
||||
CU_ASSERT_EQUAL(6, list[0].len);
|
||||
CU_ASSERT_EQUAL(SPDYLAY_PROTO_SPDY3, list[0].version);
|
||||
|
||||
CU_ASSERT_STRING_EQUAL("spdy/2", list[1].proto);
|
||||
CU_ASSERT_EQUAL(6, list[1].len);
|
||||
CU_ASSERT_EQUAL(SPDYLAY_PROTO_SPDY2, list[1].version);
|
||||
}
|
||||
|
@ -26,5 +26,6 @@
|
||||
#define SPDYLAY_NPN_TEST_H
|
||||
|
||||
void test_spdylay_npn(void);
|
||||
void test_spdylay_npn_get_proto_list(void);
|
||||
|
||||
#endif /* SPDYLAY_NPN_TEST_H */
|
||||
|
Loading…
Reference in New Issue
Block a user