tsdecrypt reads and decrypts CSA encrypted incoming mpeg transport stream over UDP/RTP using code words obtained from OSCAM or similar CAM server. tsdecrypt communicates with CAM server using cs378x (camd35 over tcp) protocol or newcamd protocol. https://georgi.unixsol.org/programs/tsdecrypt/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

data.c 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "data.h"
  5. void data_init(struct ts *ts) {
  6. memset(ts, 0, sizeof(struct ts));
  7. // Stream
  8. ts->pat = ts_pat_alloc();
  9. ts->curpat = ts_pat_alloc();
  10. ts->cat = ts_cat_alloc();
  11. ts->curcat = ts_cat_alloc();
  12. ts->pmt = ts_pmt_alloc();
  13. ts->curpmt = ts_pmt_alloc();
  14. ts->emm = ts_privsec_alloc();
  15. ts->last_emm = ts_privsec_alloc();
  16. ts->tmp_emm = ts_privsec_alloc();
  17. ts->ecm = ts_privsec_alloc();
  18. ts->last_ecm = ts_privsec_alloc();
  19. ts->tmp_ecm = ts_privsec_alloc();
  20. pidmap_clear(&ts->pidmap);
  21. pidmap_clear(&ts->cc);
  22. pidmap_clear(&ts->pid_seen);
  23. // Key
  24. memset(&ts->key, 0, sizeof(ts->key));
  25. ts->key.csakey[0] = dvbcsa_key_alloc();
  26. ts->key.csakey[1] = dvbcsa_key_alloc();
  27. ts->key.bs_csakey[0] = dvbcsa_bs_key_alloc();
  28. ts->key.bs_csakey[1] = dvbcsa_bs_key_alloc();
  29. gettimeofday(&ts->key.ts_keyset, NULL);
  30. // CAMD
  31. memset(&ts->camd35, 0, sizeof(ts->camd35));
  32. ts->camd35.server_fd = -1;
  33. ts->camd35.server_port = 2233;
  34. ts->camd35.key = &ts->key;
  35. strcpy(ts->camd35.user, "user");
  36. strcpy(ts->camd35.pass, "pass");
  37. ts->camd35.emm_count_report_interval = 60;
  38. ts->camd35.emm_count_last_report = time(NULL);
  39. // Config
  40. ts->syslog_port = 514;
  41. ts->ts_discont = 1;
  42. ts->debug_level = 0;
  43. ts->req_CA_sys = CA_CONAX;
  44. ts->emm_send = 0;
  45. ts->pid_filter = 1;
  46. ts->packet_delay = 0;
  47. ts->input.fd = 0; // STDIN
  48. ts->input.type = FILE_IO;
  49. ts->output.fd = 1; // STDOUT
  50. ts->output.type = FILE_IO;
  51. ts->output.ttl = 1;
  52. ts->decode_buf = cbuf_init((7 * dvbcsa_bs_batch_size() * 188) * 2, "decode");
  53. ts->write_buf = cbuf_init((7 * dvbcsa_bs_batch_size() * 188) * 2, "write");
  54. }
  55. void data_free(struct ts *ts) {
  56. ts_pat_free(&ts->pat);
  57. ts_pat_free(&ts->curpat);
  58. ts_cat_free(&ts->cat);
  59. ts_cat_free(&ts->curcat);
  60. ts_pmt_free(&ts->pmt);
  61. ts_pmt_free(&ts->curpmt);
  62. ts_privsec_free(&ts->emm);
  63. ts_privsec_free(&ts->last_emm);
  64. ts_privsec_free(&ts->tmp_emm);
  65. ts_privsec_free(&ts->ecm);
  66. ts_privsec_free(&ts->last_ecm);
  67. ts_privsec_free(&ts->tmp_ecm);
  68. dvbcsa_key_free(ts->key.csakey[0]);
  69. dvbcsa_key_free(ts->key.csakey[1]);
  70. dvbcsa_bs_key_free(ts->key.bs_csakey[0]);
  71. dvbcsa_bs_key_free(ts->key.bs_csakey[1]);
  72. cbuf_free(&ts->decode_buf);
  73. cbuf_free(&ts->write_buf);
  74. FREE(ts->input.fname);
  75. FREE(ts->output.fname);
  76. }