| 988 | |
| 989 | |
| 990 | class SvcParam(Packet): |
| 991 | name = "SvcParam" |
| 992 | fields_desc = [ShortEnumField("key", 0, svc_param_keys), |
| 993 | FieldLenField("len", None, length_of="value", fmt="H"), |
| 994 | MultipleTypeField( |
| 995 | [ |
| 996 | # mandatory |
| 997 | (FieldListField("value", [], |
| 998 | ShortEnumField("", 0, svc_param_keys), |
| 999 | length_from=lambda pkt: pkt.len), |
| 1000 | lambda pkt: pkt.key == 0), |
| 1001 | # alpn, no-default-alpn |
| 1002 | (DNSTextField("value", [], |
| 1003 | length_from=lambda pkt: pkt.len), |
| 1004 | lambda pkt: pkt.key in (1, 2)), |
| 1005 | # port |
| 1006 | (ShortField("value", 0), |
| 1007 | lambda pkt: pkt.key == 3), |
| 1008 | # ipv4hint |
| 1009 | (FieldListField("value", [], |
| 1010 | IPField("", "0.0.0.0"), |
| 1011 | length_from=lambda pkt: pkt.len), |
| 1012 | lambda pkt: pkt.key == 4), |
| 1013 | # ipv6hint |
| 1014 | (FieldListField("value", [], |
| 1015 | IP6Field("", "::"), |
| 1016 | length_from=lambda pkt: pkt.len), |
| 1017 | lambda pkt: pkt.key == 6), |
| 1018 | ], |
| 1019 | StrLenField("value", "", |
| 1020 | length_from=lambda pkt:pkt.len))] |
| 1021 | |
| 1022 | def extract_padding(self, p): |
| 1023 | return "", p |
| 1024 | |
| 1025 | |
| 1026 | class DNSRRSVCB(_DNSRRdummy): |
nothing calls this directly
no test coverage detected
searching dependent graphs…