# Module Ftp_data_endpoint

    module Ftp_data_endpoint: sig .. end

Senders and receivers for the FTP data connection

# Types and Exceptions

    class type out_record_channel = object .. end

An `out_record_channel` can be used to output files with record structure.

    class type in_record_channel = object .. end

An `in_record_channel` can be used to read files with record structure.

    type local_receiver = [ `File_structure of Netchannels.out_obj_channel
           | `Record_structure of out_record_channel ]

The `local_receiver` is the object that gets the data received over the data connection.

Page structure is not supported.

    type local_sender = [ `File_structure of Netchannels.in_obj_channel
           | `Record_structure of in_record_channel ]

The `local_sender` is the object that provides the data sent over the data connection.

Page structure is not supported.

    type transmission_mode = [ `Block_mode | `Stream_mode ]

The transmission mode as described in RFC 959. Compressed mode is not supported.

    type descr_state = [ `Clean | `Down | `Transfer_in_progress ]

Describes the state of the socket used for data transfers. The state ``Clean` means that a new data transfer may be started, either because the socket is new, or the last block transfer was properly finished. The state ``Transfer_in_progress` means that data is being transferred, but also that the transfer is aborted. The state ``Down` means that the socket is already at least half-closed, i.e. EOF was sent in one direction.

    type text_data_repr = [ `ASCII of Netconversion.encoding
           | `ASCII_unix of Netconversion.encoding
           | `EBCDIC of Netconversion.encoding ]

Possible representation of text data: ``ASCII` means an ASCII-compatible encoding where the newline character is represented by CR/LF. ``ASCII_unix` is the same but newline is only LF. ``EBCDIC` is an EBCDIC variant.

The argument specifies the exact variant to be used, e.g. ``ASCII `Enc_iso88591` or ``EBCDIC `Enc_cp1047`.

It is illegal to use ``ASCII` or ``ASCII_unix` with an ASCII- incompatible encoding, as well as combining ``EBCDIC` with a non-EBCDIC encoding. Wrong conversions would be the result of this.

# Data Stream Converters

    class write_out_record_channel : repr:text_data_repr -> Netchannels.out_obj_channel -> out_record_channel

Provides an `out_record_channel` that represents EOR as newline character.

    class read_in_record_channel : repr:text_data_repr -> Netchannels.in_obj_channel -> in_record_channel

Provides an `in_record_channel` that takes newline characters as EOR representation.

    class data_converter : fromrepr:text_data_repr -> torepr:text_data_repr -> Netchannels.io_obj_channel

Creates a data conversion pipe converting `fromrepr` to `torepr`.

# Engines

    class type ftp_data_engine = object .. end

The common type of FTP data engines

    class ftp_data_receiver : esys:Unixqueue.event_system -> mode:transmission_mode -> local_receiver:local_receiver -> descr:Unix.file_descr -> unit -> object .. end

This engine receives data on a FTP data connection, and forwards them to a local receiver.

    class ftp_data_sender : esys:Unixqueue.event_system -> mode:transmission_mode -> local_sender:local_sender -> descr:Unix.file_descr -> unit -> object .. end

This engine sends data over a FTP data connection coming from a local sender.