Browse Source

Move msg_id processing to be internal to cs378x protocol.

Georgi Chorbadzhiyski 12 years ago
parent
commit
6404757eac
5 changed files with 17 additions and 20 deletions
  1. 2
    1
      camd-cs378x.c
  2. 5
    6
      camd.c
  3. 1
    1
      camd.h
  4. 2
    3
      data.h
  5. 7
    9
      tables.c

+ 2
- 1
camd-cs378x.c View File

@@ -98,8 +98,9 @@ static void cs378x_buf_init(struct camd *c, uint8_t *data, int data_len) {
98 98
 	memcpy(c->cs378x.buf + CAMD35_HDR_LEN, data, data_len); // Copy data to buf
99 99
 }
100 100
 
101
-static int cs378x_do_ecm(struct camd *c, uint16_t ca_id, uint16_t service_id, uint16_t idx, uint8_t *data, uint8_t data_len) {
101
+static int cs378x_do_ecm(struct camd *c, uint16_t ca_id, uint16_t service_id, uint8_t *data, uint8_t data_len) {
102 102
 	uint32_t provider_id = 0;
103
+	uint16_t idx = c->cs378x.msg_id++;
103 104
 	int to_send = boundary(4, CAMD35_HDR_LEN + data_len);
104 105
 
105 106
 	cs378x_buf_init(c, data, (int)data_len);

+ 5
- 6
camd.c View File

@@ -104,7 +104,7 @@ static int camd_recv_cw(struct ts *ts) {
104 104
 	}
105 105
 
106 106
 	if (ts->ecm_cw_log) {
107
-		ts_LOGf("CW  | CAID: 0x%04x [ %5llu ms ] ( %6llu ms ) ------- IDX: 0x%04x Data: %s\n",
107
+		ts_LOGf("CW  | CAID: 0x%04x [ %5llu ms ] ( %6llu ms ) ------ IDX: 0x%04x Data: %s\n",
108 108
 			ca_id, timeval_diff_msec(&tv1, &tv2),
109 109
 			timeval_diff_msec(&last_ts_keyset, &tv2),
110 110
 			idx, cw_dump );
@@ -115,9 +115,9 @@ static int camd_recv_cw(struct ts *ts) {
115 115
 
116 116
 #undef ERR
117 117
 
118
-static int camd_send_ecm(struct ts *ts, uint16_t ca_id, uint16_t service_id, uint16_t idx, uint8_t *data, uint8_t data_len) {
118
+static int camd_send_ecm(struct ts *ts, uint16_t ca_id, uint16_t service_id, uint8_t *data, uint8_t data_len) {
119 119
 	struct camd *c = &ts->camd;
120
-	int ret = c->ops.do_ecm(c, ca_id, service_id, idx, data, data_len);
120
+	int ret = c->ops.do_ecm(c, ca_id, service_id, data, data_len);
121 121
 	if (ret <= 0) {
122 122
 		ts_LOGf("ERR | Error sending ecm packet, reconnecting to camd.\n");
123 123
 		ts->is_cw_error = 1;
@@ -164,7 +164,7 @@ static void camd_do_msg(struct camd_msg *msg) {
164 164
 	}
165 165
 	if (msg->type == ECM_MSG) {
166 166
 		msg->ts->ecm_seen_count++;
167
-		if (camd_send_ecm(msg->ts, msg->ca_id, msg->service_id, msg->idx, msg->data, msg->data_len) > 0)
167
+		if (camd_send_ecm(msg->ts, msg->ca_id, msg->service_id, msg->data, msg->data_len) > 0)
168 168
 			msg->ts->ecm_processed_count++;
169 169
 	}
170 170
 
@@ -180,10 +180,9 @@ struct camd_msg *camd_msg_alloc_emm(uint16_t ca_id, uint8_t *data, uint8_t data_
180 180
 	return c;
181 181
 }
182 182
 
183
-struct camd_msg *camd_msg_alloc_ecm(uint16_t ca_id, uint16_t service_id, uint16_t idx, uint8_t *data, uint8_t data_len) {
183
+struct camd_msg *camd_msg_alloc_ecm(uint16_t ca_id, uint16_t service_id, uint8_t *data, uint8_t data_len) {
184 184
 	struct camd_msg *c = calloc(1, sizeof(struct camd_msg));
185 185
 	c->type       = ECM_MSG;
186
-	c->idx        = idx;
187 186
 	c->ca_id      = ca_id;
188 187
 	c->service_id = service_id;
189 188
 	c->data_len   = data_len;

+ 1
- 1
camd.h View File

@@ -23,7 +23,7 @@
23 23
 int						camd_tcp_connect	(struct in_addr ip, int port);
24 24
 
25 25
 struct camd_msg *		camd_msg_alloc_emm	(uint16_t ca_id, uint8_t *emm_data, uint8_t emm_data_len);
26
-struct camd_msg *		camd_msg_alloc_ecm	(uint16_t ca_id, uint16_t service_id, uint16_t idx, uint8_t *ecm_data, uint8_t ecm_data_len);
26
+struct camd_msg *		camd_msg_alloc_ecm	(uint16_t ca_id, uint16_t service_id, uint8_t *ecm_data, uint8_t ecm_data_len);
27 27
 void					camd_msg_free   	(struct camd_msg **pmsg);
28 28
 
29 29
 void					camd_start			(struct ts *ts);

+ 2
- 3
data.h View File

@@ -68,7 +68,7 @@ struct camd_ops {
68 68
 	void (*disconnect)(struct camd *c);
69 69
 	int (*reconnect)(struct camd *c);
70 70
 	int (*do_emm)(struct camd *c, uint16_t ca_id, uint8_t *data, uint8_t data_len);
71
-	int (*do_ecm)(struct camd *c, uint16_t ca_id, uint16_t service_id, uint16_t idx, uint8_t *data, uint8_t data_len);
71
+	int (*do_ecm)(struct camd *c, uint16_t ca_id, uint16_t service_id, uint8_t *data, uint8_t data_len);
72 72
 	int (*get_cw)(struct camd *c, uint16_t *ca_id, uint16_t *idx, uint8_t *cw);
73 73
 };
74 74
 
@@ -78,6 +78,7 @@ struct cs378x {
78 78
 	AES_KEY			aes_encrypt_key;
79 79
 	AES_KEY			aes_decrypt_key;
80 80
 	uint32_t		auth_token;
81
+	uint16_t		msg_id;
81 82
 };
82 83
 
83 84
 struct camd {
@@ -138,7 +139,6 @@ struct ts {
138 139
 	uint16_t			forced_caid;
139 140
 	uint16_t			forced_emm_pid;
140 141
 	uint16_t			forced_ecm_pid;
141
-	uint16_t			ecm_counter;
142 142
 	pidmap_t			pidmap;
143 143
 	pidmap_t			cc; // Continuity counters
144 144
 	pidmap_t			pid_seen;
@@ -213,7 +213,6 @@ enum msg_type { EMM_MSG, ECM_MSG };
213 213
 
214 214
 struct camd_msg {
215 215
 	enum msg_type	type;
216
-	uint16_t		idx;
217 216
 	uint16_t		ca_id;
218 217
 	uint16_t		service_id;
219 218
 	uint8_t			data_len;

+ 7
- 9
tables.c View File

@@ -258,9 +258,10 @@ static void __process_emm(struct ts *ts, uint16_t pid, uint8_t *ts_packet) {
258 258
 	struct ts_section_header *sec = ts->emm->section_header;
259 259
 	if (ts->debug_level >= 2) {
260 260
 		ts_hex_dump_buf(dump, dump_buf_sz, sec->section_data, min(dump_sz, sec->section_data_len), 0);
261
-		ts_LOGf("EMM | CAID: 0x%04x PID 0x%04x Table: 0x%02x Length: %3d ----------- Data: %s..\n",
261
+		ts_LOGf("EMM | CAID: 0x%04x PID 0x%04x SID 0x%04x Table: 0x%02x Length: %3d Data: %s..\n",
262 262
 			ts->emm_caid,
263 263
 			th->pid,
264
+			ts->service_id,
264 265
 			sec->table_id,
265 266
 			sec->section_data_len,
266 267
 			dump);
@@ -300,25 +301,22 @@ static void __process_ecm(struct ts *ts, uint16_t pid, uint8_t *ts_packet) {
300 301
 	if (!duplicate || ts->is_cw_error) {
301 302
 		if (ts->ecm_cw_log) {
302 303
 			ts_hex_dump_buf(dump, dump_buf_sz, sec->section_data, min(dump_sz, sec->section_data_len), 0);
303
-			ts_LOGf("ECM | CAID: 0x%04x PID 0x%04x Table: 0x%02x Length: %3d IDX: 0x%04x Data: %s..\n",
304
+			ts_LOGf("ECM | CAID: 0x%04x PID 0x%04x SID 0x%04x Table: 0x%02x Length: %3d Data: %s..\n",
304 305
 				ts->ecm_caid,
305 306
 				th->pid,
307
+				ts->service_id,
306 308
 				sec->table_id,
307 309
 				sec->section_data_len,
308
-				ts->ecm_counter,
309 310
 				dump);
310 311
 		}
311
-		if (ts->is_cw_error)
312
-			ts->ecm_counter--;
313 312
 		ts->is_cw_error = 0;
314
-		camd_msg_process(ts, camd_msg_alloc_ecm(ts->ecm_caid, ts->service_id, ts->ecm_counter++, sec->section_data, sec->section_data_len));
313
+		camd_msg_process(ts, camd_msg_alloc_ecm(ts->ecm_caid, ts->service_id, sec->section_data, sec->section_data_len));
315 314
 	} else if (ts->debug_level >= 3) {
316
-		ts_LOGf("ECM | CAID: 0x%04x PID 0x%04x Table: 0x%02x Length: %3d IDX: 0x%04x Data: -dup-\n",
315
+		ts_LOGf("ECM | CAID: 0x%04x PID 0x%04x Table: 0x%02x Length: %3d Data: -dup-\n",
317 316
 			ts->ecm_caid,
318 317
 			th->pid,
319 318
 			sec->table_id,
320
-			sec->section_data_len,
321
-			ts->ecm_counter - 1);
319
+			sec->section_data_len);
322 320
 	}
323 321
 	ts_privsec_copy(ts->ecm, ts->last_ecm);
324 322
 	ts_privsec_clear(ts->ecm);

Loading…
Cancel
Save