static void sdt_pid_parse(uint8_t *psi, void *arg) { uint8_t *section; int section_len; struct epgdump_s *epgd = arg; if (!sdt_validate(psi)) return; if (!psi_get_current(psi)) return; if (psi_get_tableid(psi) != SDT_TABLE_ID_ACTUAL) return; section_len = psi_get_length(psi) + PSI_HEADER_SIZE; section = malloc(section_len); if (!section) critical_error("Memory allocation failed\n"); memcpy(section, psi, section_len); if (!psi_table_section(epgd->sdt.sdt_current, section)) return; epgd->sdt.complete = 1; epgd->sdt.original_network_id = sdt_get_onid(epgd->sdt.sdt_current[0]); epgd->sdt.current_ts_id = sdt_get_tsid(epgd->sdt.sdt_current[0]); demux_del_psi_pid(&epgd->demux, SDT_PID); }
static void handle_tsdt_section(uint16_t i_pid, uint8_t *p_section) { if (i_pid != TSDT_PID || !tsdt_validate(p_section)) { printf("<ERROR type=\"invalid_tsdt_section\"/>\n"); free(p_section); return; } if (!psi_table_section(pp_next_tsdt_sections, p_section)) return; handle_tsdt(); }
static void handle_nit_section(uint16_t i_pid, uint8_t *p_section) { if (i_pid != NIT_PID || !nit_validate(p_section)) { printf("<ERROR type=\"invalid_nit_section\" pid=\"%hu\"/>\n", i_pid); free(p_section); return; } if (!psi_table_section(pp_next_nit_sections, p_section)) return; handle_nit(); }