LCOV - code coverage report
Current view: top level - zephyr/net - tftp.h Coverage Total Hit
Test: new.info Lines: 100.0 % 30 30
Test Date: 2025-09-05 22:20:39

            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 2.0-1