LCOV - code coverage report
Current view: top level - src/domain/write - delete.c (source / functions) Coverage Total Hit
Test: coverage-functional.info Lines: 83.9 % 31 26
Test Date: 2026-04-20 19:54:24 Functions: 100.0 % 1 1

            Line data    Source code
       1              : /* SPDX-License-Identifier: GPL-3.0-or-later */
       2              : /* Copyright 2026 Peter Csaszar */
       3              : 
       4              : /**
       5              :  * @file domain/write/delete.c
       6              :  * @brief messages.deleteMessages + channels.deleteMessages (US-P5-06).
       7              :  */
       8              : 
       9              : #include "domain/write/delete.h"
      10              : 
      11              : #include "tl_serial.h"
      12              : #include "tl_registry.h"
      13              : #include "mtproto_rpc.h"
      14              : #include "logger.h"
      15              : 
      16              : #include <string.h>
      17              : 
      18              : #define CRC_messages_deleteMessages 0xe58e95d2u
      19              : #define CRC_channels_deleteMessages 0x84c1fd4eu
      20              : #define CRC_inputChannel            0xf35aec28u
      21              : 
      22            5 : int domain_delete_messages(const ApiConfig *cfg,
      23              :                             MtProtoSession *s, Transport *t,
      24              :                             const HistoryPeer *peer,
      25              :                             const int32_t *ids, int n_ids,
      26              :                             int revoke,
      27              :                             RpcError *err) {
      28            5 :     if (!cfg || !s || !t || !peer || !ids || n_ids <= 0 || n_ids > 100)
      29            0 :         return -1;
      30              : 
      31            5 :     TlWriter w; tl_writer_init(&w);
      32            5 :     int is_channel = (peer->kind == HISTORY_PEER_CHANNEL);
      33              : 
      34            5 :     if (is_channel) {
      35            1 :         tl_write_uint32(&w, CRC_channels_deleteMessages);
      36            1 :         tl_write_uint32(&w, CRC_inputChannel);
      37            1 :         tl_write_int64 (&w, peer->peer_id);
      38            1 :         tl_write_int64 (&w, peer->access_hash);
      39              :     } else {
      40            4 :         tl_write_uint32(&w, CRC_messages_deleteMessages);
      41            4 :         tl_write_uint32(&w, revoke ? 1u : 0u);    /* flags */
      42              :     }
      43            5 :     tl_write_uint32(&w, TL_vector);
      44            5 :     tl_write_uint32(&w, (uint32_t)n_ids);
      45           12 :     for (int i = 0; i < n_ids; i++) tl_write_int32(&w, ids[i]);
      46              : 
      47              :     uint8_t query[1024];
      48            5 :     if (w.len > sizeof(query)) { tl_writer_free(&w); return -1; }
      49            5 :     memcpy(query, w.data, w.len);
      50            5 :     size_t qlen = w.len;
      51            5 :     tl_writer_free(&w);
      52              : 
      53            5 :     uint8_t resp[1024]; size_t resp_len = 0;
      54            5 :     if (api_call(cfg, s, t, query, qlen, resp, sizeof(resp), &resp_len) != 0) {
      55            0 :         logger_log(LOG_ERROR, "delete: api_call failed");
      56            0 :         return -1;
      57              :     }
      58            5 :     if (resp_len < 4) return -1;
      59              : 
      60              :     uint32_t top;
      61            5 :     memcpy(&top, resp, 4);
      62            5 :     if (top == TL_rpc_error) {
      63            1 :         if (err) rpc_parse_error(resp, resp_len, err);
      64            1 :         return -1;
      65              :     }
      66            4 :     if (top == TL_messages_affectedMessages) return 0;
      67            0 :     logger_log(LOG_WARN, "delete: unexpected top 0x%08x", top);
      68            0 :     return 0;
      69              : }
        

Generated by: LCOV version 2.0-1