Source code for pcapkit.protocols.application.ftp_data
# -*- coding: utf-8 -*-
"""FTP_DATA - FTP Data Channel
=================================
.. module:: pcapkit.protocols.application.ftp_data
:mod:`pcapkit.protocols.application.ftp_data` contains
:class:`~pcapkit.protocols.application.ftp_data.FTP_DATA` only,
which implements an extractor for the data channel of File
Transfer Protocol (FTP) [*]_, whose octets it keeps undissected.
.. [*] https://en.wikipedia.org/wiki/File_Transfer_Protocol
.. versionadded:: 1.5.0
Moved here from :mod:`pcapkit.protocols.application.ftp`, which keeps
:class:`~pcapkit.protocols.application.ftp.FTP` alone. The control and data
channels are dispatched separately -- FTP at TCP port 21, the data channel
at port 20 -- so each is a protocol of its own and gets its own module,
unlike :class:`~pcapkit.protocols.application.rarp.RARP` and
:class:`~pcapkit.protocols.application.rarp.DRARP`, which one dispatch
entry reaches (:issue:`2285`).
"""
from typing import TYPE_CHECKING
from pcapkit.protocols.application.application import Application
from pcapkit.protocols.misc.raw import Raw
if TYPE_CHECKING:
from typing_extensions import Literal
__all__ = ['FTP_DATA']
[docs]
class FTP_DATA(Application, Raw): # pylint: disable=abstract-method
"""This class implements FTP data channel transmission.
The layer base :class:`~pcapkit.protocols.application.application.Application`
comes first, for ``layer == 'Application'``, then the parsing base
:class:`~pcapkit.protocols.misc.raw.Raw`, which keeps the channel's octets
undissected. See :doc:`/contributing/conventions/protocol-layer-placement`.
.. versionchanged:: 1.5.0
Derives from :class:`~pcapkit.protocols.application.application.Application`
as well as :class:`~pcapkit.protocols.misc.raw.Raw`, so its layer is
``'Application'``, where it was :obj:`None`, and its ``__index__`` is
:meth:`Application.__index__
<pcapkit.protocols.application.application.Application.__index__>`,
raising :exc:`~pcapkit.utilities.exceptions.IntError` where it raised
:exc:`~pcapkit.utilities.exceptions.UnsupportedCall` (:issue:`2285`).
"""
##########################################################################
# Properties.
##########################################################################
# name of current protocol
@property
def name(self) -> 'Literal["FTP_DATA"]': # type: ignore[override]
"""Name of current protocol."""
return 'FTP_DATA'