LCOV - code coverage report
Current view: top level - zephyr/net - tftp.h Hit Total Coverage
Test: new.info Lines: 30 30 100.0 %
Date: 2024-12-21 18:13:37

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2020 InnBlue
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /** @file tftp.h
       8             :  *
       9             :  * @brief TFTP Client Implementation
      10             :  *
      11             :  * @defgroup tftp_client TFTP Client library
      12             :  * @since 2.3
      13             :  * @version 0.1.0
      14             :  * @ingroup networking
      15             :  * @{
      16             :  */
      17             : 
      18             : #ifndef ZEPHYR_INCLUDE_NET_TFTP_H_
      19             : #define ZEPHYR_INCLUDE_NET_TFTP_H_
      20             : 
      21             : #include <zephyr/kernel.h>
      22             : #include <zephyr/net/socket.h>
      23             : 
      24             : #ifdef __cplusplus
      25             : extern "C" {
      26             : #endif
      27             : 
      28             : /**
      29             :  * RFC1350: the file is sent in fixed length blocks of 512 bytes.
      30             :  * Each data packet contains one block of data, and must be acknowledged
      31             :  * by an acknowledgment packet before the next packet can be sent.
      32             :  * A data packet of less than 512 bytes signals termination of a transfer.
      33             :  */
      34           1 : #define TFTP_BLOCK_SIZE          512
      35             : 
      36             : /**
      37             :  * RFC1350: For non-request TFTP message, the header contains 2-byte operation
      38             :  * code plus 2-byte block number or error code.
      39             :  */
      40           1 : #define TFTP_HEADER_SIZE         4
      41             : 
      42             : /** Maximum amount of data that can be sent or received */
      43           1 : #define TFTPC_MAX_BUF_SIZE       (TFTP_BLOCK_SIZE + TFTP_HEADER_SIZE)
      44             : 
      45             : /**
      46             :  * @name TFTP client error codes.
      47             :  * @{
      48             :  */
      49           1 : #define TFTPC_SUCCESS             0 /**< Success. */
      50           1 : #define TFTPC_DUPLICATE_DATA     -1 /**< Duplicate data received. */
      51           1 : #define TFTPC_BUFFER_OVERFLOW    -2 /**< User buffer is too small. */
      52           1 : #define TFTPC_UNKNOWN_FAILURE    -3 /**< Unknown failure. */
      53           1 : #define TFTPC_REMOTE_ERROR       -4 /**< Remote server error. */
      54           1 : #define TFTPC_RETRIES_EXHAUSTED  -5 /**< Retries exhausted. */
      55             : /**
      56             :  * @}
      57             :  */
      58             : 
      59             : /**
      60             :  * @brief TFTP Asynchronous Events notified to the application from the module
      61             :  *        through the callback registered by the application.
      62             :  */
      63           1 : enum tftp_evt_type {
      64             :         /**
      65             :          * DATA event when data is received from remote server.
      66             :          *
      67             :          * @note DATA event structure contains payload data and size.
      68             :          */
      69             :         TFTP_EVT_DATA,
      70             : 
      71             :         /**
      72             :          * ERROR event when error is received from remote server.
      73             :          *
      74             :          * @note ERROR event structure contains error code and message.
      75             :          */
      76             :         TFTP_EVT_ERROR
      77             : };
      78             : 
      79             : /** @brief Parameters for data event. */
      80           1 : struct tftp_data_param {
      81           1 :         uint8_t *data_ptr;         /**< Pointer to binary data. */
      82           1 :         uint32_t len;              /**< Length of binary data. */
      83             : };
      84             : 
      85             : /** @brief Parameters for error event. */
      86           1 : struct tftp_error_param {
      87           1 :         char *msg;                 /**< Error message. */
      88           1 :         int code;                  /**< Error code. */
      89             : };
      90             : 
      91             : /**
      92             :  * @brief Defines event parameters notified along with asynchronous events
      93             :  *        to the application.
      94             :  */
      95           1 : union tftp_evt_param {
      96             :         /** Parameters accompanying TFTP_EVT_DATA event. */
      97           1 :         struct tftp_data_param data;
      98             : 
      99             :         /** Parameters accompanying TFTP_EVT_ERROR event. */
     100           1 :         struct tftp_error_param error;
     101             : };
     102             : 
     103             : /** @brief Defines TFTP asynchronous event notified to the application. */
     104           1 : struct tftp_evt {
     105             :         /** Identifies the event. */
     106           1 :         enum tftp_evt_type type;
     107             : 
     108             :         /** Contains parameters (if any) accompanying the event. */
     109           1 :         union tftp_evt_param param;
     110             : };
     111             : 
     112             : /**
     113             :  * @typedef tftp_callback_t
     114             :  *
     115             :  * @brief TFTP event notification callback registered by the application.
     116             :  *
     117             :  * @param[in] evt Event description along with result and associated
     118             :  *                parameters (if any).
     119             :  */
     120           1 : typedef void (*tftp_callback_t)(const struct tftp_evt *evt);
     121             : 
     122             : /**
     123             :  * @brief TFTP client definition to maintain information relevant to the
     124             :  *        client.
     125             :  *
     126             :  * @note Application must initialize `server` and `callback` before calling
     127             :  *       GET or PUT API with the `tftpc` structure.
     128             :  */
     129           1 : struct tftpc {
     130             :         /** Socket address pointing to the remote TFTP server */
     131           1 :         struct sockaddr server;
     132             : 
     133             :         /** Event notification callback. No notification if NULL */
     134           1 :         tftp_callback_t callback;
     135             : 
     136             :         /** Buffer for internal usage */
     137           1 :         uint8_t tftp_buf[TFTPC_MAX_BUF_SIZE];
     138             : };
     139             : 
     140             : /**
     141             :  * @brief This function gets data from a "file" on the remote server.
     142             :  *
     143             :  * @param client      Client information of type @ref tftpc.
     144             :  * @param remote_file Name of the remote file to get.
     145             :  * @param mode        TFTP Client "mode" setting.
     146             :  *
     147             :  * @retval The size of data being received if the operation completed successfully.
     148             :  * @retval TFTPC_BUFFER_OVERFLOW if the file is larger than the user buffer.
     149             :  * @retval TFTPC_REMOTE_ERROR if the server failed to process our request.
     150             :  * @retval TFTPC_RETRIES_EXHAUSTED if the client timed out waiting for server.
     151             :  * @retval -EINVAL if `client` is NULL.
     152             :  *
     153             :  * @note This function blocks until the transfer is completed or network error happens. The
     154             :  *       integrity of the `client` structure must be ensured until the function returns.
     155             :  */
     156           1 : int tftp_get(struct tftpc *client,
     157             :              const char *remote_file, const char *mode);
     158             : 
     159             : /**
     160             :  * @brief This function puts data to a "file" on the remote server.
     161             :  *
     162             :  * @param client      Client information of type @ref tftpc.
     163             :  * @param remote_file Name of the remote file to put.
     164             :  * @param mode        TFTP Client "mode" setting.
     165             :  * @param user_buf    Data buffer containing the data to put.
     166             :  * @param user_buf_size Length of the data to put.
     167             :  *
     168             :  * @retval The size of data being sent if the operation completed successfully.
     169             :  * @retval TFTPC_REMOTE_ERROR if the server failed to process our request.
     170             :  * @retval TFTPC_RETRIES_EXHAUSTED if the client timed out waiting for server.
     171             :  * @retval -EINVAL if `client` or `user_buf` is NULL or if `user_buf_size` is zero.
     172             :  *
     173             :  * @note This function blocks until the transfer is completed or network error happens. The
     174             :  *       integrity of the `client` structure must be ensured until the function returns.
     175             :  */
     176           1 : int tftp_put(struct tftpc *client,
     177             :              const char *remote_file, const char *mode,
     178             :              const uint8_t *user_buf, uint32_t user_buf_size);
     179             : 
     180             : #ifdef __cplusplus
     181             : }
     182             : #endif
     183             : 
     184             : #endif /* ZEPHYR_INCLUDE_NET_TFTP_H_ */
     185             : 
     186             : /** @} */

Generated by: LCOV version 1.14