Changeset 11473 for trunk/module-gbox-remm.c
- Timestamp:
- 01/18/19 20:17:57 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-gbox-remm.c
r11441 r11473 18 18 static void gbox_send_remm_ack_msg(struct s_client *cli, uint16_t caid, uint32_t provider, uint8_t dvbapi_stat, uint8_t ack) 19 19 { 20 uchar outbuf[32]; 21 struct gbox_peer *peer = cli->gbox; 22 uint16_t local_gbox_id = gbox_get_local_gbox_id(); 23 uint32_t local_gbox_pw = gbox_get_local_gbox_password(); 24 25 gbox_message_header(outbuf, MSG_REM_EMM, peer->gbox.password, local_gbox_pw); 26 outbuf[10] = MSGID_REMM_ACK; 27 i2b_buf(2, peer->gbox.id, outbuf +11); 28 i2b_buf(2, local_gbox_id, outbuf + 13); 29 outbuf[15] = ack; 30 outbuf[16] = dvbapi_stat; 31 i2b_buf(2, caid, outbuf +17); 32 i2b_buf(4, provider, outbuf +19); 33 outbuf[23] = 0; 34 outbuf[24] = 0; 35 outbuf[25] = 0; 36 outbuf[26] = 0; 37 38 gbox_send(cli, outbuf, 27); 39 40 if (ack == PEER_AU_BLOCKED) 41 { cs_log("<- send REJECT REMM msg to peer %04X for caid: %04X", peer->gbox.id, caid); } 42 if (ack == PEER_AU_READY) 43 { cs_log("<- send ACCEPT REMM msg to peer %04X for caid: %04X", peer->gbox.id, caid); } 44 if (ack == PEER_AU_UNREADY) 45 { cs_log("<- send WARNING to peer %04X: my dvbapi unready for AU caid: %04X", peer->gbox.id, caid); } 20 uint8_t outbuf[32]; 21 struct gbox_peer *peer = cli->gbox; 22 uint16_t local_gbox_id = gbox_get_local_gbox_id(); 23 uint32_t local_gbox_pw = gbox_get_local_gbox_password(); 24 25 gbox_message_header(outbuf, MSG_REM_EMM, peer->gbox.password, local_gbox_pw); 26 outbuf[10] = MSGID_REMM_ACK; 27 i2b_buf(2, peer->gbox.id, outbuf +11); 28 i2b_buf(2, local_gbox_id, outbuf + 13); 29 outbuf[15] = ack; 30 outbuf[16] = dvbapi_stat; 31 i2b_buf(2, caid, outbuf +17); 32 i2b_buf(4, provider, outbuf +19); 33 outbuf[23] = 0; 34 outbuf[24] = 0; 35 outbuf[25] = 0; 36 outbuf[26] = 0; 37 38 gbox_send(cli, outbuf, 27); 39 40 if (ack == PEER_AU_BLOCKED) 41 { cs_log("<- send REJECT REMM msg to peer %04X for caid: %04X", peer->gbox.id, caid); } 42 43 if (ack == PEER_AU_READY) 44 { cs_log("<- send ACCEPT REMM msg to peer %04X for caid: %04X", peer->gbox.id, caid); } 45 46 if (ack == PEER_AU_UNREADY) 47 { cs_log("<- send WARNING to peer %04X: my dvbapi unready for AU caid: %04X", peer->gbox.id, caid); } 48 46 49 return; 47 50 } 48 51 49 static void gbox_recvd_remm_ack_msg(struct s_client *cli, u char*buf, int32_t n)52 static void gbox_recvd_remm_ack_msg(struct s_client *cli, uint8_t *buf, int32_t n) 50 53 { 51 54 if (!cli || !cli->gbox || !buf || n != 27) { return; } 52 55 struct gbox_peer *peer; 53 56 peer = cli->gbox; 54 57 55 58 uint8_t ack = buf[15]; 56 59 uint8_t dvbapi_stat = buf[16]; 57 uint16_t rpeer = b2i(2, buf +11); 60 uint16_t rpeer = b2i(2, buf +11); 58 61 uint16_t rcaid = b2i(2, buf +17); 59 62 //uint32_t rprovid = b2i(4, buf +19); 60 63 61 62 64 if (ack == PEER_AU_BLOCKED) 63 65 { cs_log("-> Peer %04X %s rejected REMM for caid %04X - requesting peer %04X blocked", peer->gbox.id, cli->reader->label, rcaid, rpeer ); } 66 64 67 if (ack == PEER_AU_READY) 65 68 { cs_log("-> MSG from peer %04X %s: Accept REMM REQ for caid %04X", peer->gbox.id, cli->reader->label, rcaid); } 69 66 70 if (ack == PEER_AU_UNREADY) 67 {68 69 cs_log_dbg(D_EMM,"Peer %04X dvbapi AU status: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d",70 peer->gbox.id, (dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 );71 71 { 72 cs_log("-> WARNING: Peer %04X %s dvbapi AU unready for caid %04X", peer->gbox.id, cli->reader->label, rcaid); 73 cs_log_dbg(D_EMM,"Peer %04X dvbapi AU status: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d", 74 peer->gbox.id, (dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 ); 75 } 72 76 } 73 77 74 78 static uint8_t check_dvbapi_au_ready( void) 75 79 { 76 #ifdef HAVE_DVBAPI 77 78 uint8_t dvbapi_stat = 0; 79 if (module_dvbapi_enabled()) 80 { 81 if(cfg.dvbapi_au) 82 { dvbapi_stat |= 1; } 83 84 struct s_client *cl; 85 cs_readlock(__func__, &clientlist_lock); 86 for(cl = first_client; cl; cl = cl->next) 80 #ifdef HAVE_DVBAPI 81 uint8_t dvbapi_stat = 0; 82 if (module_dvbapi_enabled()) 83 { 84 if(cfg.dvbapi_au) 85 { dvbapi_stat |= 1; } 86 87 struct s_client *cl; 88 cs_readlock(__func__, &clientlist_lock); 89 90 for(cl = first_client; cl; cl = cl->next) 91 { 92 if(cl->typ == 'c' && cl->account && is_dvbapi_usr(cl->account->usr)) 93 { 94 if(cl->account->autoau) 87 95 { 88 if(cl->typ == 'c' && cl->account && is_dvbapi_usr(cl->account->usr)) 89 { 90 if(cl->account->autoau) 91 { 92 dvbapi_stat |= 2; 93 break; 94 } 95 if(ll_count(cl->account->aureader_list)) 96 { 97 dvbapi_stat |= 4; 98 break; 99 } 100 } 96 dvbapi_stat |= 2; 97 break; 101 98 } 102 cs_readunlock(__func__, &clientlist_lock); 99 100 if(ll_count(cl->account->aureader_list)) 101 { 102 dvbapi_stat |= 4; 103 break; 104 } 103 105 } 104 return dvbapi_stat; 105 #else 106 return 0; 107 #endif 106 } 107 cs_readunlock(__func__, &clientlist_lock); 108 } 109 return dvbapi_stat; 110 #else 111 return 0; 112 #endif 108 113 } 109 114 … … 122 127 } 123 128 124 static void gbox_recvd_remm_req(struct s_client *cli, u char*buf, int32_t n)129 static void gbox_recvd_remm_req(struct s_client *cli, uint8_t *buf, int32_t n) 125 130 { 126 131 if (!cli || !cli->gbox || !buf || !cli->reader || n != 122) { return; } … … 133 138 //uint16_t tcli_peer = b2i(2, buf +11); 134 139 //uint16_t tsrv_peer = b2i(2, buf +13); 135 140 136 141 uint8_t dvbapi_stat = check_dvbapi_au_ready(); 137 142 138 143 if (!check_valid_remm_peer( peer->gbox.id)) 139 { 140 gbox_send_remm_ack_msg(cli, rcaid, rprovid, dvbapi_stat, PEER_AU_BLOCKED); 141 handle_attack(cli, GBOX_ATTACK_REMM_REQ_BLOCKED, peer->gbox.id); 142 cs_log("Reject REMM REQ for caid %04X) - peer %04X blocked for AU", rcaid, peer->gbox.id); 143 return; 144 } 145 /* 146 147 if (tcli_peer != local_gbox.id) 148 { forward remm req to target client peer} 149 */ 144 { 145 gbox_send_remm_ack_msg(cli, rcaid, rprovid, dvbapi_stat, PEER_AU_BLOCKED); 146 handle_attack(cli, GBOX_ATTACK_REMM_REQ_BLOCKED, peer->gbox.id); 147 cs_log("Reject REMM REQ for caid %04X) - peer %04X blocked for AU", rcaid, peer->gbox.id); 148 return; 149 } 150 151 //if (tcli_peer != local_gbox.id) 152 // { forward remm req to target client peer} 153 150 154 struct s_reader *rdr = cli->reader; 151 155 rdr->gbox_remm_peer = peer->gbox.id; 152 rdr->last_g = time(NULL); // last receive is now 153 154 rdr->auprovid = rprovid; 155 rdr->caid = rcaid; 156 157 memcpy(rdr->hexserial, buf +29, 6); 158 rdr->hexserial[6] = 0; 159 rdr->hexserial[7] = 0; 160 rdr->nprov = buf[37]; 161 162 int32_t i; 163 for(i = 0; i < rdr->nprov; i++) 164 { 165 if(caid_is_betacrypt(rdr->caid) || caid_is_irdeto(rdr->caid)) 166 { 167 rdr->prid[i][0] = buf[38 + (i * 5)]; 168 memcpy(&rdr->prid[i][1], &buf[40 + (i * 5)], 3); 169 } 170 else 171 { 172 rdr->prid[i][2] = buf[38 + (i * 5)]; 173 rdr->prid[i][3] = buf[39 + (i * 5)]; 174 memcpy(&rdr->sa[i][0], &buf[40 + (i * 5)], 4); 175 } 176 } 177 178 rdr->blockemm = 0; 179 rdr->blockemm |= (buf[117] == 1) ? 0 : 0x80; //remm marker bit 180 rdr->blockemm |= (buf[118] == 1) ? 0 : EMM_GLOBAL; 181 rdr->blockemm |= (buf[119] == 1) ? 0 : EMM_SHARED; 182 rdr->blockemm |= (buf[120] == 1) ? 0 : EMM_UNIQUE; 183 rdr->blockemm |= (buf[121] == 1) ? 0 : EMM_UNKNOWN; 184 185 cs_log("-> received REMM REQ for type %s%s%s%s caid %04X from peer %04X:%s", 186 buf[120]==1 ? "UQ ":"", buf[119]==1 ? "SH ":"", buf[118]==1 ? "GL ":"", buf[121]==1 ? "UK":"", 187 rdr->caid, peer->gbox.id, rdr->label); 188 189 if (dvbapi_stat == 3 || dvbapi_stat == 5) 190 { 191 gbox_send_remm_ack_msg(cli, rdr->caid, rdr->auprovid, dvbapi_stat, PEER_AU_READY); 192 cs_log_dbg(D_EMM,"my dvbapi ready for AU: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d",(dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 ); 193 } 156 rdr->last_g = time(NULL); // last receive is now 157 158 rdr->auprovid = rprovid; 159 rdr->caid = rcaid; 160 161 memcpy(rdr->hexserial, buf + 29, 6); 162 rdr->hexserial[6] = 0; 163 rdr->hexserial[7] = 0; 164 rdr->nprov = buf[37]; 165 166 int32_t i; 167 for(i = 0; i < rdr->nprov; i++) 168 { 169 if(caid_is_betacrypt(rdr->caid) || caid_is_irdeto(rdr->caid)) 170 { 171 rdr->prid[i][0] = buf[38 + (i * 5)]; 172 memcpy(&rdr->prid[i][1], &buf[40 + (i * 5)], 3); 173 } 194 174 else 195 { 196 gbox_send_remm_ack_msg(cli, rdr->caid, rdr->auprovid, dvbapi_stat, PEER_AU_UNREADY); 197 cs_log_dbg(D_EMM,"dvbapi status: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d",(dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 ); 198 } 199 write_msg_info(cli, MSGID_REMM, 0, 1); 200 } 201 202 static void gbox_recvd_remm_data(struct s_client *cli, uchar *buf, int32_t buflen, int32_t emmlen) 175 { 176 rdr->prid[i][2] = buf[38 + (i * 5)]; 177 rdr->prid[i][3] = buf[39 + (i * 5)]; 178 memcpy(&rdr->sa[i][0], &buf[40 + (i * 5)], 4); 179 } 180 } 181 182 rdr->blockemm = 0; 183 rdr->blockemm |= (buf[117] == 1) ? 0 : 0x80; // remm marker bit 184 rdr->blockemm |= (buf[118] == 1) ? 0 : EMM_GLOBAL; 185 rdr->blockemm |= (buf[119] == 1) ? 0 : EMM_SHARED; 186 rdr->blockemm |= (buf[120] == 1) ? 0 : EMM_UNIQUE; 187 rdr->blockemm |= (buf[121] == 1) ? 0 : EMM_UNKNOWN; 188 189 cs_log("-> received REMM REQ for type %s%s%s%s caid %04X from peer %04X:%s", 190 buf[120]==1 ? "UQ ":"", buf[119]==1 ? "SH ":"", buf[118]==1 ? "GL ":"", buf[121]==1 ? "UK":"", 191 rdr->caid, peer->gbox.id, rdr->label); 192 193 if (dvbapi_stat == 3 || dvbapi_stat == 5) 194 { 195 gbox_send_remm_ack_msg(cli, rdr->caid, rdr->auprovid, dvbapi_stat, PEER_AU_READY); 196 cs_log_dbg(D_EMM,"my dvbapi ready for AU: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d", 197 (dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 ); 198 } 199 else 200 { 201 gbox_send_remm_ack_msg(cli, rdr->caid, rdr->auprovid, dvbapi_stat, PEER_AU_UNREADY); 202 cs_log_dbg(D_EMM,"dvbapi status: dvbapi_au: %1d - dvbapi_usr_autoau: %1d - dvbapi_usr_aulist: %1d", 203 (dvbapi_stat & 1) ? 1 : 0, (dvbapi_stat & 2) ? 1 : 0, (dvbapi_stat & 4) ? 1 : 0 ); 204 } 205 write_msg_info(cli, MSGID_REMM, 0, 1); 206 } 207 208 static void gbox_recvd_remm_data(struct s_client *cli, uint8_t *buf, int32_t buflen, int32_t emmlen) 203 209 { 204 210 if(!cli || !cli->gbox || !buf || buflen < 30 || emmlen +27 > buflen || emmlen < 3 || emmlen + 27 > MAX_EMM_SIZE) 205 211 { return; } 206 207 struct gbox_peer *peer; 208 peer = cli->gbox; 209 210 uint16_t rcaid = b2i(2, buf + 15); 211 uint32_t recvd_remm_crc = b2i(4, buf + 23); 212 uint32_t calc_remm_crc = gbox_get_checksum(&buf[0] +27, emmlen); 213 cs_log_dbg(D_EMM,"received remm from peer: %04X caid: %04X (remm_crc = %08X - calc_remm_crc = %08X)", 214 peer->gbox.id, rcaid, recvd_remm_crc, calc_remm_crc); 215 if(recvd_remm_crc == calc_remm_crc) 216 { 217 EMM_PACKET remm; 218 memset(&remm, 0, sizeof(remm)); 219 remm.emmlen = emmlen; 220 memcpy(remm.caid, buf +15, 2); 221 memcpy(remm.provid, buf +17 , 4); 222 memcpy(remm.emm, buf +27, remm.emmlen); 223 do_emm(cur_client(), &remm); 224 } 225 else 226 { cs_log_dbg(D_EMM,"reject received REMM from peer %04X caid: %04X - crc failed - %08X != %08X", peer->gbox.id, rcaid, recvd_remm_crc, calc_remm_crc); } 227 228 return; 229 } 230 231 void gbox_recvd_remm_cmd_switch(struct s_client *cli, uchar *buf, int32_t n) 232 { 233 if (!cli || !cli->gbox || !buf || n < 26) { return; } 212 234 213 struct gbox_peer *peer; 235 214 peer = cli->gbox; 236 215 216 uint16_t rcaid = b2i(2, buf + 15); 217 uint32_t recvd_remm_crc = b2i(4, buf + 23); 218 uint32_t calc_remm_crc = gbox_get_checksum(&buf[0] +27, emmlen); 219 cs_log_dbg(D_EMM,"received remm from peer: %04X caid: %04X (remm_crc = %08X - calc_remm_crc = %08X)", 220 peer->gbox.id, rcaid, recvd_remm_crc, calc_remm_crc); 221 222 if(recvd_remm_crc == calc_remm_crc) 223 { 224 EMM_PACKET remm; 225 memset(&remm, 0, sizeof(remm)); 226 remm.emmlen = emmlen; 227 memcpy(remm.caid, buf +15, 2); 228 memcpy(remm.provid, buf +17 , 4); 229 memcpy(remm.emm, buf +27, remm.emmlen); 230 do_emm(cur_client(), &remm); 231 } 232 else 233 { 234 cs_log_dbg(D_EMM,"reject received REMM from peer %04X caid: %04X - crc failed - %08X != %08X", 235 peer->gbox.id, rcaid, recvd_remm_crc, calc_remm_crc); 236 } 237 238 return; 239 } 240 241 void gbox_recvd_remm_cmd_switch(struct s_client *cli, uint8_t *buf, int32_t n) 242 { 243 if (!cli || !cli->gbox || !buf || n < 26) { return; } 244 245 struct gbox_peer *peer; 246 peer = cli->gbox; 237 247 uint8_t cmd_id = buf[10]; 238 239 248 249 switch(cmd_id) 240 250 { 241 251 case MSGID_REMM_REQ: 242 cs_log_dbg(D_EMM,"-> Incoming REMM request (%d bytes) from %04X %s - %s", n, peer->gbox.id, username(cli), cli->reader->device); 243 gbox_recvd_remm_req(cli, buf, n); 252 cs_log_dbg(D_EMM,"-> Incoming REMM request (%d bytes) from %04X %s - %s", 253 n, peer->gbox.id, username(cli), cli->reader->device); 254 gbox_recvd_remm_req(cli, buf, n); 244 255 break; 256 245 257 case MSGID_REMM_DATA: 246 cs_log_dbg(D_EMM,"-> Incoming gbox remote EMM data (%d bytes total - %d bytes emm-len) from %04X %s - %s", n,247 248 gbox_recvd_remm_data(cli, buf, n, buf[21]); //buf[21]) = emm lenght258 cs_log_dbg(D_EMM,"-> Incoming gbox remote EMM data (%d bytes total - %d bytes emm-len) from %04X %s - %s", 259 n, buf[21], peer->gbox.id, username(cli), cli->reader->device); 260 gbox_recvd_remm_data(cli, buf, n, buf[21]); // buf[21]) = emm lenght 249 261 break; 262 250 263 case MSGID_REMM_ACK: 251 cs_log_dbg(D_EMM,"-> Incoming REMM ACK (%d bytes) from %04X %s - %s", n, peer->gbox.id, username(cli), cli->reader->device); 252 gbox_recvd_remm_ack_msg(cli, buf, n); 264 cs_log_dbg(D_EMM,"-> Incoming REMM ACK (%d bytes) from %04X %s - %s", 265 n, peer->gbox.id, username(cli), cli->reader->device); 266 gbox_recvd_remm_ack_msg(cli, buf, n); 253 267 break; 268 254 269 default: 255 cs_log("received unknown remm cmd_id: %d %d bytes from %04X %s - %s", cmd_id, n, peer->gbox.id, username(cli), cli->reader->device); 256 return; 270 cs_log("received unknown remm cmd_id: %d %d bytes from %04X %s - %s", 271 cmd_id, n, peer->gbox.id, username(cli), cli->reader->device); 272 return; 257 273 } 258 274 } … … 262 278 if (!cli || !cli->gbox || !er) { return; } 263 279 int32_t i; 264 u charmbuf[1024];280 uint8_t mbuf[1024]; 265 281 struct s_client *cl = cur_client(); 266 282 struct gbox_peer *peer = cli->gbox; … … 292 308 293 309 if(cl->lastcaid != er->caid) 294 { 295 310 { cl->disable_counter = 0; } 311 296 312 cl->lastcaid = er->caid; 297 313 cl->disable_counter++; 298 314 299 if (cl->disable_counter < 6) // delay 5 ecm315 if (cl->disable_counter < 6) // delay 5 ecm 300 316 { return; } 301 317 302 318 if(!memcmp(cl->lastserial, aureader->hexserial, 8)) 303 304 305 306 319 { 320 cl->disable_counter = 0; 321 return; 322 } 307 323 308 324 memcpy(cl->lastserial, aureader->hexserial, 8); … … 324 340 i2b_buf(2, er->srvid, mbuf + 15); 325 341 326 // override emm provid with auprovid if set in server reader config342 // override emm provid with auprovid if set in server reader config 327 343 if(aureader->auprovid) 328 344 { … … 333 349 } 334 350 else 335 { i2b_buf(4, er->prid, mbuf +17); } 336 337 i2b_buf(2, er->pid, mbuf +21); 338 i2b_buf(2, au_caid, mbuf +23); 339 memcpy(mbuf +29, aureader->hexserial, 6); // serial 6 bytes 340 mbuf[37] = aureader->nprov; 341 342 for(i = 0; i < aureader->nprov; i++) 343 { 344 if(caid_is_betacrypt(au_caid) || caid_is_irdeto(au_caid)) 345 { 346 mbuf[38 + (i * 5)] = aureader->prid[i][0]; 347 memcpy(&mbuf[40 + (i * 5)], &aureader->prid[i][1], 3); 348 } 349 else 350 { 351 mbuf[38 + (i * 5)] = aureader->prid[i][2]; 352 mbuf[39 + (i * 5)] = aureader->prid[i][3]; 353 memcpy(&mbuf[40 + (i * 5)], &aureader->sa[i][0], 4); // for conax we need at least 4 Bytes 354 } 355 if(i >= 15) { break; } 356 } 357 358 mbuf[117] = aureader->blockemm | 0x80; //set remm marker bit 359 if(au_caid == 0x0D96 || au_caid == 0x0D98 ) // these caids needs globals 360 { mbuf[118] = (aureader->blockemm & EMM_GLOBAL && !(aureader->saveemm & EMM_GLOBAL)) ? 0 : 1; } 351 { 352 i2b_buf(4, er->prid, mbuf +17); 353 } 354 355 i2b_buf(2, er->pid, mbuf +21); 356 i2b_buf(2, au_caid, mbuf +23); 357 memcpy(mbuf +29, aureader->hexserial, 6); // serial 6 bytes 358 mbuf[37] = aureader->nprov; 359 360 for(i = 0; i < aureader->nprov; i++) 361 { 362 if(caid_is_betacrypt(au_caid) || caid_is_irdeto(au_caid)) 363 { 364 mbuf[38 + (i * 5)] = aureader->prid[i][0]; 365 memcpy(&mbuf[40 + (i * 5)], &aureader->prid[i][1], 3); 366 } 361 367 else 362 { mbuf[118] = 0; } 363 mbuf[119] = (aureader->blockemm & EMM_SHARED && !(aureader->saveemm & EMM_SHARED)) ? 0 : 1; 364 mbuf[120] = (aureader->blockemm & EMM_UNIQUE && !(aureader->saveemm & EMM_UNIQUE)) ? 0 : 1; 365 mbuf[121] = 0; //(aureader->blockemm & EMM_UNKNOWN && !(aureader->saveemm & EMM_UNKNOWN)) ? 0 : 1; 366 367 cs_log("<- %04X sends REMM REQ for type = %s%s%s%s to %s peer-id=%04X for reader=%s, caid=%04X", local_gbox_id, 368 mbuf[120]==1 ? "UQ ":"", mbuf[119]==1 ? "SH ":"", mbuf[118]==1 ? "GL ":"", mbuf[121]==1 ? "UK":"", 369 username(cur_client()), peer->gbox.id, aureader->label, au_caid ); 370 371 cs_log_dump_dbg(D_EMM, mbuf, 122, "<- send remm request, (data_len=%d):", 122); 372 gbox_send(cli, mbuf, 122); 373 return; 368 { 369 mbuf[38 + (i * 5)] = aureader->prid[i][2]; 370 mbuf[39 + (i * 5)] = aureader->prid[i][3]; 371 memcpy(&mbuf[40 + (i * 5)], &aureader->sa[i][0], 4); // for conax we need at least 4 Bytes 372 } 373 if(i >= 15) { break; } 374 } 375 376 mbuf[117] = aureader->blockemm | 0x80; // set remm marker bit 377 378 if(au_caid == 0x0D96 || au_caid == 0x0D98 ) // these caids needs globals 379 { mbuf[118] = (aureader->blockemm & EMM_GLOBAL && !(aureader->saveemm & EMM_GLOBAL)) ? 0 : 1; } 380 else 381 { mbuf[118] = 0; } 382 383 mbuf[119] = (aureader->blockemm & EMM_SHARED && !(aureader->saveemm & EMM_SHARED)) ? 0 : 1; 384 mbuf[120] = (aureader->blockemm & EMM_UNIQUE && !(aureader->saveemm & EMM_UNIQUE)) ? 0 : 1; 385 mbuf[121] = 0; // (aureader->blockemm & EMM_UNKNOWN && !(aureader->saveemm & EMM_UNKNOWN)) ? 0 : 1; 386 387 cs_log("<- %04X sends REMM REQ for type = %s%s%s%s to %s peer-id=%04X for reader=%s, caid=%04X", local_gbox_id, 388 mbuf[120] == 1 ? "UQ " : "", mbuf[119] == 1 ? "SH " : "", mbuf[118] == 1 ? "GL " : "", mbuf[121] == 1 ? "UK" : "", 389 username(cur_client()), peer->gbox.id, aureader->label, au_caid ); 390 391 cs_log_dump_dbg(D_EMM, mbuf, 122, "<- send remm request, (data_len=%d):", 122); 392 gbox_send(cli, mbuf, 122); 393 return; 374 394 } 375 395 … … 381 401 382 402 if(!cli->gbox || !cli->reader->tcp_connected || !ep) 383 { return 0;}403 { return 0; } 384 404 385 405 if(!cs_malloc(&buf, ep->emmlen +27 +15)) … … 402 422 i2b_buf(4, remm_crc, buf +23); 403 423 memcpy(buf +27, ep->emm, ep->emmlen); 404 cs_log("<- send remm to: %s peer: %04X emmlength: %d crc: %08X",username(cur_client()), peer->gbox.id, ep->emmlen, remm_crc); 424 cs_log("<- send remm to: %s peer: %04X emmlength: %d crc: %08X", 425 username(cur_client()), peer->gbox.id, ep->emmlen, remm_crc); 405 426 cs_log_dump_dbg(D_EMM, buf, 27 + ep->emmlen, "<- gbox send emm, (data-len=%d):", 27 + ep->emmlen); 406 427 gbox_send(cli, buf, 27 + ep->emmlen);
Note:
See TracChangeset
for help on using the changeset viewer.