HTTP2: Add final RFC(7838) of HTTP Alternative Services (ALTSVC)

Change-Id: I66e24f5a28ed44dc466614b09e33b85c6a957df5
Reviewed-on: https://code.wireshark.org/review/14987
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
Alexis La Goutte 2016-04-15 18:35:39 +02:00 committed by Michael Mann
parent 20e7accf8c
commit 838500b89b
1 changed files with 21 additions and 62 deletions

View File

@ -28,7 +28,7 @@
* The information used comes from:
* RFC7540: Hypertext Transfer Protocol version 2 (HTTP/2)
* RFC7541: HTTP Header Compression for HTTP/2
* HTTP Alternative Services draft-ietf-httpbis-alt-svc-04
* RFC7838: HTTP Alternative Services
*
* TODO
* Enhance display of Data
@ -239,13 +239,9 @@ static int hf_http2_window_update_window_size_increment = -1;
static int hf_http2_continuation_header = -1;
static int hf_http2_continuation_padding = -1;
/* Altsvc */
static int hf_http2_altsvc_maxage = -1;
static int hf_http2_altsvc_port = -1;
static int hf_http2_altsvc_proto_len = -1;
static int hf_http2_altsvc_protocol = -1;
static int hf_http2_altsvc_host_len = -1;
static int hf_http2_altsvc_host = -1;
static int hf_http2_altsvc_origin_len = -1;
static int hf_http2_altsvc_origin = -1;
static int hf_http2_altsvc_field_value = -1;
/* Blocked */
/*
@ -1296,35 +1292,19 @@ static int
dissect_http2_altsvc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *http2_tree,
guint offset, guint8 flags _U_, guint16 length)
{
guint8 pidlen;
guint8 hostlen;
int remain;
guint32 origin_len;
int remain = length;
proto_tree_add_item(http2_tree, hf_http2_altsvc_maxage, tvb, offset, 4, ENC_BIG_ENDIAN);
offset+=4;
proto_tree_add_item(http2_tree, hf_http2_altsvc_port, tvb, offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item_ret_uint(http2_tree, hf_http2_altsvc_origin_len, tvb, offset, 2, ENC_BIG_ENDIAN, &origin_len);
offset += 2;
remain -= 2;
proto_tree_add_item(http2_tree, hf_http2_altsvc_proto_len, tvb, offset, 1, ENC_BIG_ENDIAN);
pidlen = tvb_get_guint8(tvb, offset);
offset ++;
proto_tree_add_item(http2_tree, hf_http2_altsvc_origin, tvb, offset, origin_len, ENC_ASCII|ENC_NA);
offset += origin_len;
remain -= origin_len;
proto_tree_add_item(http2_tree, hf_http2_altsvc_protocol, tvb, offset, pidlen, ENC_ASCII|ENC_NA);
offset += pidlen;
proto_tree_add_item(http2_tree, hf_http2_altsvc_host_len, tvb, offset, 1, ENC_BIG_ENDIAN);
hostlen = tvb_get_guint8(tvb, offset);
offset ++;
proto_tree_add_item(http2_tree, hf_http2_altsvc_host, tvb, offset, hostlen, ENC_ASCII|ENC_NA);
offset += hostlen;
remain = length - offset;
if(remain > -8) {
/* 8 is the fixed size of the http2 frame header */
proto_tree_add_item(http2_tree, hf_http2_altsvc_origin, tvb,
offset, remain + 8, ENC_ASCII|ENC_NA);
if(remain) {
proto_tree_add_item(http2_tree, hf_http2_altsvc_field_value, tvb, offset, remain, ENC_ASCII|ENC_NA);
offset += remain;
}
@ -1906,36 +1886,11 @@ proto_register_http2(void)
"Padding octets", HFILL }
},
/* Altsvc */
{ &hf_http2_altsvc_maxage,
{ "Max-Age", "http2.altsvc.max-age",
FT_UINT32, BASE_DEC, NULL, 0x0,
"An unsigned, 32-bit integer indicating the freshness lifetime of the alternative service association", HFILL }
},
{ &hf_http2_altsvc_port,
{ "Port", "http2.altsvc.port",
/* ALTSVC */
{ &hf_http2_altsvc_origin_len,
{ "Origin Length", "http2.altsvc.origin.len",
FT_UINT16, BASE_DEC, NULL, 0x0,
"An unsigned, 16-bit integer indicating the port that the alternative service is available upon", HFILL }
},
{ &hf_http2_altsvc_proto_len,
{ "Proto-Len", "http2.altsvc.proto_len",
FT_UINT8, BASE_DEC, NULL, 0x0,
"An unsigned, 8-bit integer indicating the length, in octets, of the PROTOCOL-ID field", HFILL }
},
{ &hf_http2_altsvc_protocol,
{ "Protocol-ID", "http2.altsvc.protocol",
FT_STRING, BASE_NONE, NULL, 0x0,
"A sequence of bytes containing the ALPN protocol identifier", HFILL }
},
{ &hf_http2_altsvc_host_len,
{ "Host-Len", "http2.altsvc.host_len",
FT_UINT8, BASE_DEC, NULL, 0x0,
"An unsigned, 8-bit integer indicating the length, in octets, of the Host field", HFILL }
},
{ &hf_http2_altsvc_host,
{ "Host", "http2.altsvc.host",
FT_STRING, BASE_NONE, NULL, 0x0,
"ASCII string indicating the host that the alternative service is available upon", HFILL }
"indicating the length, in octets, of the Origin field.", HFILL }
},
{ &hf_http2_altsvc_origin,
{ "Origin", "http2.altsvc.origin",
@ -1943,7 +1898,11 @@ proto_register_http2(void)
"A sequence of characters containing ASCII serialisation of an "
"origin that the alternate service is applicable to.", HFILL }
},
{ &hf_http2_altsvc_field_value,
{ "Field/Value", "http2.altsvc.field_value",
FT_STRING, BASE_NONE, NULL, 0x0,
"A sequence of octets containing a value identical to the Alt-Svc field value", HFILL }
},
};