This file is indexed.

/usr/include/libdvbv5/nit.h is in libdvbv5-dev 1.12.3-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
/*
 * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
 * Copyright (c) 2012 - Andre Roth <neolynx@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation version 2.1 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 *
 */

#ifndef _NIT_H
#define _NIT_H

#include <stdint.h>
#include <unistd.h> /* ssize_t */

#include <libdvbv5/header.h>
#include <libdvbv5/descriptors.h>

/**
 * @file nit.h
 * @ingroup dvb_table
 * @brief Provides the descriptors for NIT MPEG-TS table
 * @copyright GNU Lesser General Public License version 2.1 (LGPLv2.1)
 * @author Mauro Carvalho Chehab
 * @author Andre Roth
 *
 * @par Bug Report
 * Please submit bug report and patches to linux-media@vger.kernel.org
 *
 * @par Relevant specs
 * The table described herein is defined at:
 * - ISO/IEC 13818-1
 * - ETSI EN 300 468
 *
 * @par Bug Report
 * Please submit bug reports and patches to linux-media@vger.kernel.org
 */

/**
 * @def DVB_TABLE_NIT
 *	@brief NIT table ID
 *	@ingroup dvb_table
 * @def DVB_TABLE_NIT2
 *	@brief NIT table ID (alternative table ID)
 *	@ingroup dvb_table
 * @def DVB_TABLE_NIT_PID
 *	@brief NIT Program ID
 *	@ingroup dvb_table
 */
#define DVB_TABLE_NIT      0x40
#define DVB_TABLE_NIT2     0x41
#define DVB_TABLE_NIT_PID  0x10

/**
 * @union dvb_table_nit_transport_header
 * @brief MPEG-TS NIT transport header
 * @ingroup dvb_table
 *
 * @param transport_length	transport length
 *
 * This structure is used to store the original NIT transport header,
 * converting the integer fields to the CPU endianness.
 *
 * The undocumented parameters are used only internally by the API and/or
 * are fields that are reserved. They shouldn't be used, as they may change
 * on future API releases.
 */
union dvb_table_nit_transport_header {
	uint16_t bitfield;
	struct {
		uint16_t transport_length:12;
		uint16_t reserved:4;
	} __attribute__((packed));
} __attribute__((packed));

/**
 * @struct dvb_table_nit_transport
 * @brief MPEG-TS NIT transport table
 * @ingroup dvb_table
 *
 * @param transport_id	transport id
 * @param network_id	network id
 * @param desc_length	desc length
 * @param descriptor	pointer to struct dvb_desc
 * @param next		pointer to struct dvb_table_nit_transport
 *
 * This structure is used to store the original NIT transport table,
 * converting the integer fields to the CPU endianness.
 *
 * The undocumented parameters are used only internally by the API and/or
 * are fields that are reserved. They shouldn't be used, as they may change
 * on future API releases.
 *
 * Everything after dvb_table_nit_transport::descriptor (including it) won't
 * be bit-mapped to the data parsed from the MPEG TS. So, metadata are added
 * there.
 */
struct dvb_table_nit_transport {
	uint16_t transport_id;
	uint16_t network_id;
	union {
		uint16_t bitfield;
		struct {
			uint16_t desc_length:12;
			uint16_t reserved:4;
		} __attribute__((packed));
	} __attribute__((packed));
	struct dvb_desc *descriptor;
	struct dvb_table_nit_transport *next;
} __attribute__((packed));

/**
 * @struct dvb_table_nit
 * @brief MPEG-TS NIT table
 * @ingroup dvb_table
 *
 * @param header	struct dvb_table_header content
 * @param desc_length	descriptor length
 * @param descriptor	pointer to struct dvb_desc
 * @param transport	pointer to struct dvb_table_nit_transport
 *
 * This structure is used to store the original NIT table,
 * converting the integer fields to the CPU endianness.
 *
 * The undocumented parameters are used only internally by the API and/or
 * are fields that are reserved. They shouldn't be used, as they may change
 * on future API releases.
 *
 * Everything after dvb_table_nit::descriptor (including it) won't be bit-mapped
 * to the data parsed from the MPEG TS. So, metadata are added there.
 */
struct dvb_table_nit {
	struct dvb_table_header header;
	union {
		uint16_t bitfield;
		struct {
			uint16_t desc_length:12;
			uint16_t reserved:4;
		} __attribute__((packed));
	} __attribute__((packed));
	struct dvb_desc *descriptor;
	struct dvb_table_nit_transport *transport;
} __attribute__((packed));

/**
 * @brief typedef for a callback used when a NIT table entry is found
 * @ingroup dvb_table
 *
 * @param nit	a struct dvb_table_nit pointer
 * @param desc	a struct dvb_desc pointer
 * @param priv	an opaque optional pointer
 */
typedef void nit_handler_callback_t(struct dvb_table_nit *nit,
				    struct dvb_desc *desc,
				    void *priv);

/**
 * @brief typedef for a callback used when a NIT transport table entry is found
 * @ingroup dvb_table
 *
 * @param nit	a struct dvb_table_nit pointer
 * @param tran	a struct dvb_table_nit_transport pointer
 * @param desc	a struct dvb_desc pointer
 * @param priv	an opaque optional pointer
 */
typedef void nit_tran_handler_callback_t(struct dvb_table_nit *nit,
					 struct dvb_table_nit_transport *tran,
					 struct dvb_desc *desc,
					 void *priv);

/**
 * @brief Macro used to find a transport inside a NIT table
 * @ingroup dvb_table
 *
 * @param _tran		transport to seek
 * @param _nit		pointer to struct dvb_table_nit_transport
 */
#define dvb_nit_transport_foreach( _tran, _nit ) \
	if (_nit && _nit->transport) \
		for (struct dvb_table_nit_transport *_tran = _nit->transport; _tran; _tran = _tran->next) \

struct dvb_v5_fe_parms;

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Initializes and parses NIT table
 * @ingroup dvb_table
 *
 * @param parms	struct dvb_v5_fe_parms pointer to the opened device
 * @param buf buffer containing the NIT raw data
 * @param buflen length of the buffer
 * @param table pointer to struct dvb_table_nit to be allocated and filled
 *
 * This function allocates a NIT table and fills the fields inside
 * the struct. It also makes sure that all fields will follow the CPU
 * endianness. Due to that, the content of the buffer may change.
 *
 * @return On success, it returns the size of the allocated struct.
 *	   A negative value indicates an error.
 */
ssize_t dvb_table_nit_init (struct dvb_v5_fe_parms *parms, const uint8_t *buf,
			    ssize_t buflen, struct dvb_table_nit **table);

/**
 * @brief Frees all data allocated by the NIT table parser
 * @ingroup dvb_table
 *
 * @param table pointer to struct dvb_table_nit to be freed
 */
void dvb_table_nit_free(struct dvb_table_nit *table);

/**
 * @brief Prints the content of the NIT table
 * @ingroup dvb_table
 *
 * @param parms	struct dvb_v5_fe_parms pointer to the opened device
 * @param table	pointer to struct dvb_table_nit
 */
void dvb_table_nit_print(struct dvb_v5_fe_parms *parms, struct dvb_table_nit *table);

/**
 * @brief For each entry at NIT and NIT transport tables, call a callback
 * @ingroup dvb_table
 *
 * @param parms		struct dvb_v5_fe_parms pointer to the opened device
 * @param table		pointer to struct dvb_table_nit
 * @param descriptor	indicates the NIT table descriptor to seek
 * @param call_nit	a nit_handler_callback_t function to be called when a
 *			new entry at the NIT table is found (or NULL).
 * @param call_tran	a nit_tran_handler_callback_t function to be called
 *			when a new entry at the NIT transport table is found
 *			(or NULL).
 * @param priv		an opaque pointer to be optionally used by the
 *			callbacks. The function won't touch on it, just use
 *			as an argument for the callback functions.
 *
 * When parsing a NIT entry, we need to call some code to properly handle
 * when a given descriptor in the table is found. This is used, for example,
 * to create newer transponders to seek during scan.
 *
 * For example, to seek for the CATV delivery system descriptor and call a
 * function that would add a new transponder to a scan procedure:
 * @code
 * 	dvb_table_nit_descriptor_handler(
 *				&parms->p, dvb_scan_handler->nit,
 *				cable_delivery_system_descriptor,
 *				NULL, add_update_nit_dvbc, &tr);
 * @endcode
 */
void dvb_table_nit_descriptor_handler(
			    struct dvb_v5_fe_parms *parms,
			    struct dvb_table_nit *table,
			    enum descriptors descriptor,
			    nit_handler_callback_t *call_nit,
			    nit_tran_handler_callback_t *call_tran,
			    void *priv);

#ifdef __cplusplus
}
#endif

#endif