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.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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->ecm = ts_privsec_alloc();
  17. ts->last_ecm = ts_privsec_alloc();
  18. pidmap_clear(&ts->pidmap);
  19. pidmap_clear(&ts->cc);
  20. pidmap_clear(&ts->pid_seen);
  21. // Key
  22. memset(&ts->key, 0, sizeof(ts->key));
  23. ts->key.csakey[0] = dvbcsa_key_alloc();
  24. ts->key.csakey[1] = dvbcsa_key_alloc();
  25. ts->key.bs_csakey[0] = dvbcsa_bs_key_alloc();
  26. ts->key.bs_csakey[1] = dvbcsa_bs_key_alloc();
  27. // CAMD
  28. memset(&ts->camd35, 0, sizeof(ts->camd35));
  29. ts->camd35.server_fd = -1;
  30. ts->camd35.server_port = 2233;
  31. ts->camd35.key = &ts->key;
  32. strcpy(ts->camd35.user, "user");
  33. strcpy(ts->camd35.pass, "pass");
  34. ts->camd35.emm_count_report_interval = 60;
  35. ts->camd35.emm_count_last_report = time(NULL);
  36. // Config
  37. ts->syslog_port = 514;
  38. ts->ts_discont = 1;
  39. ts->debug_level = 0;
  40. ts->req_CA_sys = CA_CONNAX;
  41. ts->emm_send = 0;
  42. ts->pid_filter = 1;
  43. ts->input.fd = 0; // STDIN
  44. ts->input.type = FILE_IO;
  45. ts->output.fd = 1; // STDOUT
  46. ts->output.type = FILE_IO;
  47. ts->output.ttl = 1;
  48. ts->decode_buf = cbuf_init((7 * dvbcsa_bs_batch_size() * 188) * 2, "decode");
  49. ts->write_buf = cbuf_init((7 * dvbcsa_bs_batch_size() * 188) * 2, "write");
  50. }
  51. void data_free(struct ts *ts) {
  52. ts_pat_free(&ts->pat);
  53. ts_pat_free(&ts->curpat);
  54. ts_cat_free(&ts->cat);
  55. ts_cat_free(&ts->curcat);
  56. ts_pmt_free(&ts->pmt);
  57. ts_pmt_free(&ts->curpmt);
  58. ts_privsec_free(&ts->emm);
  59. ts_privsec_free(&ts->last_emm);
  60. ts_privsec_free(&ts->ecm);
  61. ts_privsec_free(&ts->last_ecm);
  62. dvbcsa_key_free(ts->key.csakey[0]);
  63. dvbcsa_key_free(ts->key.csakey[1]);
  64. dvbcsa_bs_key_free(ts->key.bs_csakey[0]);
  65. dvbcsa_bs_key_free(ts->key.bs_csakey[1]);
  66. cbuf_free(&ts->decode_buf);
  67. cbuf_free(&ts->write_buf);
  68. FREE(ts->input.fname);
  69. FREE(ts->output.fname);
  70. }