def make_name(cls, fin, fout, fmt, extension, *, files=False, nofile=False): if fin is None: ifnm = 'in.pcap' else: if extension: # pylint: disable=else-if-used ifnm = fin if os.path.splitext(fin)[1] == '.pcap' else f'{fin}.pcap' else: ifnm = fin if not os.path.isfile(ifnm): raise FileNotFound(2, 'No such file or directory', ifnm) if nofile: ofnm = None ext = None else: fmt_none = (fmt is None) if fmt == 'html': ext = 'js' elif fmt == 'tree': ext = 'txt' else: ext = fmt if fout is None: if fmt_none: # pylint: disable=no-else-raise raise FormatError('Output format unspecified.') elif files: ofnm = 'out' pathlib.Path(ofnm).mkdir(parents=True, exist_ok=True) else: ofnm = f'out.{ext}' else: fext = os.path.splitext(fout)[1] pathlib.Path(os.path.split(fout)[0]).mkdir(parents=True, exist_ok=True) if fext: files = False ofnm = fout fmt = fmt or fext[1:] or None if fmt is None: raise FormatError('Output format unspecified.') elif fmt_none: raise FormatError('Output format unspecified.') elif files: ofnm = fout pathlib.Path(ofnm).mkdir(parents=True, exist_ok=True) elif extension: ofnm = f'{fout}.{ext}' else: ofnm = fout return ifnm, ofnm, fmt, ext, files
def reassemble(protocol, strict=False): """Reassemble fragmented datagrams. Keyword arguments: * protocol -- str, protocol to be reassembled * strict -- bool, if return all datagrams (including those not implemented) when submit (default is False) <keyword> True / False Returns: * [if protocol is IPv4] IPv4_Reassembly -- a Reassembly object from `pcapkit.reassembly` * [if protocol is IPv6] IPv6_Reassembly -- a Reassembly object from `pcapkit.reassembly` * [if protocol is TCP] TCP_Reassembly -- a Reassembly object from `pcapkit.reassembly` """ if isinstance(protocol, type) and issubclass(protocol, Protocol): protocol = protocol.__index__() str_check(protocol) bool_check(strict) if protocol == 'IPv4': return IPv4_Reassembly(strict=strict) elif protocol == 'IPv6': return IPv6_Reassembly(strict=strict) elif protocol == 'TCP': return TCP_Reassembly(strict=strict) else: raise FormatError(f'Unsupported reassembly protocol: {protocol}')
def reassemble(protocol, strict=False): """Reassemble fragmented datagrams. Arguments: protocol (Union[str, Type[Protocol]]) protocol to be reassembled strict (bool): if return all datagrams (including those not implemented) when submit Returns: Union[IPv4_Reassembly, IPv6_Reassembly, TCP_Reassembly]: a :class:`~pcapkit.reassembly.reassembly.Reassembly` object of corresponding protocol Raises: FormatError: If ``protocol`` is **NOT** any of IPv4, IPv6 or TCP. """ if isinstance(protocol, type) and issubclass(protocol, Protocol): protocol = protocol.id() str_check(protocol) bool_check(strict) if protocol == 'IPv4': return IPv4_Reassembly(strict=strict) if protocol == 'IPv6': return IPv6_Reassembly(strict=strict) if protocol == 'TCP': return TCP_Reassembly(strict=strict) raise FormatError(f'Unsupported reassembly protocol: {protocol}')
def make_name(cls, fin, fout, fmt, extension, *, files=False, nofile=False): if fin is None: ifnm = 'in.pcap' else: if extension: ifnm = fin if os.path.splitext( fin)[1] == '.pcap' else f'{fin}.pcap' else: ifnm = fin if not os.path.isfile(ifnm): raise FileNotFound(2, 'No such file or directory', ifnm) if nofile: ofnm = None ext = None else: fmt_none = (fmt is None) if fmt == 'html': ext = 'js' elif fmt == 'tree': ext = 'txt' else: ext = fmt if fout is None: if fmt_none: raise FormatError('Output format unspecified.') elif files: ofnm = 'out' mkdir(ofnm) else: ofnm = f'out.{ext}' else: fext = os.path.splitext(fout)[1] mkdir(os.path.split(fout)[1]) if fext: files = False ofnm = fout fmt = fmt or fext[1:] or None if fmt is None: raise FormatError('Output format unspecified.') elif fmt_none: raise FormatError('Output format unspecified.') elif files: ofnm = fout mkdir(ofnm) elif extension: ofnm = f'{fout}.{ext}' else: ofnm = fout return ifnm, ofnm, fmt, ext, files