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 1.9KB

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