| 1940 | |
| 1941 | |
| 1942 | class NDRPacketField(NDRConstructedType, NDRAlign): |
| 1943 | def __init__(self, name, default, pkt_cls, **kwargs): |
| 1944 | self.DEPORTED_CONFORMANTS = pkt_cls.DEPORTED_CONFORMANTS |
| 1945 | self.fld = _NDRPacketField(name, default, pkt_cls=pkt_cls, **kwargs) |
| 1946 | NDRAlign.__init__( |
| 1947 | self, |
| 1948 | _NDRPacketPadField(self.fld, align=pkt_cls.ALIGNMENT), |
| 1949 | align=pkt_cls.ALIGNMENT, |
| 1950 | ) |
| 1951 | NDRConstructedType.__init__(self, pkt_cls.fields_desc) |
| 1952 | |
| 1953 | def getfield(self, pkt, x): |
| 1954 | # Handle deformed conformants max_count here |
| 1955 | if self.DEPORTED_CONFORMANTS: |
| 1956 | # C706 14.3.2: "In other words, the size information precedes the |
| 1957 | # structure and is aligned independently of the structure alignment." |
| 1958 | fld = NDRInt3264Field("", 0) |
| 1959 | max_counts = [] |
| 1960 | for _ in self.DEPORTED_CONFORMANTS: |
| 1961 | x, max_count = fld.getfield(pkt, x) |
| 1962 | max_counts.append(max_count) |
| 1963 | res, val = super(NDRPacketField, self).getfield(pkt, x) |
| 1964 | if len(max_counts) == 1: |
| 1965 | val.max_count = max_counts[0] |
| 1966 | else: |
| 1967 | val.max_counts = max_counts |
| 1968 | return res, val |
| 1969 | return super(NDRPacketField, self).getfield(pkt, x) |
| 1970 | |
| 1971 | def addfield(self, pkt, s, x): |
| 1972 | # Handle deformed conformants max_count here |
| 1973 | if self.DEPORTED_CONFORMANTS: |
| 1974 | mcfld = NDRInt3264Field("", 0) |
| 1975 | if len(self.DEPORTED_CONFORMANTS) == 1: |
| 1976 | max_counts = [x.max_count] |
| 1977 | else: |
| 1978 | max_counts = x.max_counts |
| 1979 | for fldname, max_count in zip(self.DEPORTED_CONFORMANTS, max_counts): |
| 1980 | if max_count is None: |
| 1981 | fld, val = x.getfield_and_val(fldname) |
| 1982 | max_count = fld.i2len(x, val) |
| 1983 | s = mcfld.addfield(pkt, s, max_count) |
| 1984 | return super(NDRPacketField, self).addfield(pkt, s, x) |
| 1985 | return super(NDRPacketField, self).addfield(pkt, s, x) |
| 1986 | |
| 1987 | |
| 1988 | # Array types |
no outgoing calls
no test coverage detected
searching dependent graphs…