Changeset 10970
- Timestamp:
- 08/31/15 22:05:08 (9 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r10967 r10970 1339 1339 }; 1340 1340 #define MAXECMRATELIMIT 20 1341 1342 #ifdef MODULE_SERIAL 1343 struct ecmtw 1344 { 1345 uint16_t caid; 1346 uint32_t provid; 1347 uint16_t srvid; 1348 uint16_t deg; 1349 uint16_t freq; 1350 }; 1351 #endif 1341 1352 1342 1353 typedef struct ce_csp_tab … … 1766 1777 }; 1767 1778 1779 #ifdef MODULE_SERIAL 1780 struct s_twin 1781 { 1782 struct ecmtw tw; 1783 struct s_twin *next; 1784 }; 1785 #endif 1786 1768 1787 struct s_tierid 1769 1788 { … … 2124 2143 // fake cws 2125 2144 struct s_fakecws fakecws[0x100]; 2145 2146 #ifdef MODULE_SERIAL 2147 struct s_twin *twin_list; 2148 #endif 2126 2149 }; 2127 2150 -
trunk/module-serial.c
r10883 r10970 3 3 #include "globals.h" 4 4 #ifdef MODULE_SERIAL 5 #include "oscam-config.h" 5 6 #include "oscam-client.h" 6 7 #include "oscam-ecm.h" … … 23 24 #define P_DSR95_OLD 7 // DSR9500 without SID 24 25 #define P_GBOX 8 // Arion with gbox 25 #define P_MAX P_GBOX 26 #define P_TWIN 9 // Twin Protocol 27 #define P_MAX P_TWIN 26 28 #define P_AUTO 0xFF 27 29 … … 42 44 43 45 static const char *const proto_txt[] = {"unknown", "hsic", "sssp", "bomba", "dsr9500", "gs", 44 "alpha", "dsr9500old", "gbox" 46 "alpha", "dsr9500old", "gbox", "twin" 45 47 }; 46 48 static const char *const dsrproto_txt[] = {"unknown", "samsung", "openbox", "pioneer", … … 502 504 case P_ALPHA: 503 505 if(buf[0] == 0x88) { p = P_ALPHA; } 506 break; 507 case P_TWIN: 508 if((buf[0] == 0xF7) && (buf[1] == 0x00) && (buf[2] == 0x16)) { p = P_TWIN; } 504 509 break; 505 510 } … … 579 584 r = (buf[1] << 8) | buf[2]; 580 585 break; // should be 16 always 586 case P_TWIN : 587 r = 16; 588 break; 581 589 } 582 590 break; … … 1259 1267 } 1260 1268 1269 static int32_t oscam_ser_twin_send(struct s_client *client, ECM_REQUEST *er) 1270 { 1271 struct ecmtw tw; 1272 tw = get_twin(er); 1273 cs_debug_mask(D_CLIENT, "found channel: %04X:%06X:%04X:%04X:%04X", tw.caid, tw.provid, tw.deg, tw.freq, tw.srvid); 1274 uint8_t wbuf[32]; 1275 wbuf[0] = 7; 1276 wbuf[1] = 6; 1277 wbuf[2] = tw.deg>>8; 1278 wbuf[3] = tw.deg&0xff; 1279 wbuf[4] = tw.freq>>8; 1280 wbuf[5] = tw.freq&0xff; 1281 wbuf[6] = tw.srvid>>8; 1282 wbuf[7] = tw.srvid&0xff; 1283 wbuf[8] = wbuf[0]^wbuf[1]^wbuf[2]^wbuf[3]^wbuf[4]^wbuf[5]^wbuf[6]^wbuf[7]; 1284 oscam_ser_send(client, wbuf, 9); 1285 return(0); 1286 } 1287 1261 1288 static int32_t oscam_ser_send_ecm(struct s_client *client, ECM_REQUEST *er) 1262 1289 { … … 1308 1335 oscam_ser_send(client, buf, oscam_ser_alpha_convert(buf, 5 + er->ecmlen)); 1309 1336 break; 1337 case P_TWIN: 1338 oscam_ser_twin_send(client, er); 1339 break; 1310 1340 } 1311 1341 NULLFREE(buf); … … 1352 1382 } 1353 1383 break; 1384 case P_TWIN: 1385 if ((l >= 19) && (buf[0] == 0xF7)) 1386 { 1387 memcpy(dcw, buf + 3, 16); 1388 *rc = 1; 1389 } 1354 1390 } 1355 1391 } -
trunk/module-webif.c
r10961 r10970 123 123 #define MNU_CFG_FFAKECWS 15 124 124 #define MNU_CFG_FCSS 16 125 126 #define MNU_CFG_TOTAL_ITEMS 17 // sum of config or files submenuactivating above. Use it for "All inactive" in function calls too. 125 #define MNU_CFG_FTWIN 17 126 127 #define MNU_CFG_TOTAL_ITEMS 18 // sum of config or files submenuactivating above. Use it for "All inactive" in function calls too. 127 128 128 129 static void set_status_info_var(struct templatevars *vars, char *varname, int no_data, char *fmt, double value) { … … 5954 5955 { "oscam.whitelist", MNU_CFG_FWHITELIST,FTYPE_CONFIG }, // id 13 5955 5956 #ifdef HAVE_DVBAPI 5956 { "oscam.dvbapi", MNU_CFG_FDVBAPI, FTYPE_CONFIG }, 5957 { "oscam.dvbapi", MNU_CFG_FDVBAPI, FTYPE_CONFIG }, // id 14 5957 5958 #endif 5958 5959 #ifdef CS_CACHEEX 5959 { "oscam.fakecws", MNU_CFG_FFAKECWS, FTYPE_CONFIG }, 5960 { "oscam.fakecws", MNU_CFG_FFAKECWS, FTYPE_CONFIG }, // id 15 5960 5961 #endif 5961 5962 #ifdef CS_ANTICASC 5962 { "anticasc", MNU_CFG_FACLOG, FTYPE_ANTICASC }, 5963 { "anticasc", MNU_CFG_FACLOG, FTYPE_ANTICASC }, // id 16 5964 #endif 5965 #ifdef MODULE_SERIAL 5966 { "oscam.twin", MNU_CFG_FTWIN, FTYPE_CONFIG }, // id 17 5963 5967 #endif 5964 5968 { NULL, 0, 0 }, -
trunk/oscam-config.c
r10936 r10970 24 24 #define cs_provid "oscam.provid" 25 25 #define cs_fakecws "oscam.fakecws" 26 #define cs_twin "oscam.twin" 26 27 27 28 uint32_t cfg_sidtab_generation = 1; … … 1331 1332 return; 1332 1333 } 1334 1335 #ifdef MODULE_SERIAL 1336 static struct s_twin *twin_read_int(void) 1337 { 1338 FILE *fp = open_config_file(cs_twin); 1339 if(!fp) 1340 { return NULL; } 1341 char token[1024], str1[1024]; 1342 int32_t i, ret, count = 0; 1343 struct s_twin *new_twin = NULL, *entry, *last = NULL; 1344 uint32_t line = 0; 1345 1346 while(fgets(token, sizeof(token), fp)) 1347 { 1348 line++; 1349 if(strlen(token) <= 1) { continue; } 1350 if(token[0] == '#' || token[0] == '/') { continue; } 1351 if(strlen(token) > 1024) { continue; } 1352 1353 for(i = 0; i < (int)strlen(token); i++) 1354 { 1355 if((token[i] == ':' || token[i] == ' ') && token[i + 1] == ':') 1356 { 1357 memmove(token + i + 2, token + i + 1, strlen(token) - i + 1); 1358 token[i + 1] = '0'; 1359 } 1360 if(token[i] == '#' || token[i] == '/' || token[i] == '"') 1361 { 1362 token[i] = '\0'; 1363 break; 1364 } 1365 } 1366 1367 uint32_t caid = 0, provid = 0, srvid = 0, deg = 0, freq = 0; 1368 // char hdeg[4], hfreq[4], hsrvid[4]; 1369 memset(str1, 0, sizeof(str1)); 1370 1371 ret = sscanf(token, "%4x:%6x:%d:%d:%d", &caid, &provid, °, &freq, &srvid); 1372 if(ret < 1) { continue; } 1373 // snprintf(hdeg, 4, "%x", deg); 1374 // sscanf(hdeg, "%4x", °); 1375 // snprintf(hfreq, 4, "%x", freq); 1376 // sscanf(hfreq, "%4x", &freq); 1377 // snprintf(hsrvid, 4, "%x", srvid); 1378 // sscanf(hsrvid, "%4x", &srvid); 1379 strncat(str1, ",", sizeof(str1) - strlen(str1) - 1); 1380 if(!cs_malloc(&entry, sizeof(struct s_twin))) 1381 { 1382 fclose(fp); 1383 return new_twin; 1384 } 1385 1386 count++; 1387 entry->tw.caid = caid; 1388 entry->tw.provid = provid; 1389 entry->tw.srvid = srvid; 1390 entry->tw.deg = deg; 1391 entry->tw.freq = freq; 1392 1393 cs_debug_mask(D_TRACE, "channel: %04X:%06X:%d:%d:%d", entry->tw.caid, entry->tw.provid, entry->tw.deg, 1394 entry->tw.freq, entry->tw.srvid); 1395 1396 if(!new_twin) 1397 { 1398 new_twin = entry; 1399 last = new_twin; 1400 } 1401 else 1402 { 1403 last->next = entry; 1404 last = entry; 1405 } 1406 } 1407 1408 if(count) 1409 { cs_log("%d entries read from %s", count, cs_twin); } 1410 1411 fclose(fp); 1412 1413 return new_twin; 1414 } 1415 1416 void twin_read(void) 1417 { 1418 1419 struct s_twin *entry, *old_list; 1420 1421 old_list = cfg.twin_list; 1422 cfg.twin_list = twin_read_int(); 1423 1424 while(old_list) 1425 { 1426 entry = old_list->next; 1427 free(old_list); 1428 old_list = entry; 1429 } 1430 } 1431 1432 struct ecmtw get_twin(ECM_REQUEST *er) 1433 { 1434 struct ecmtw tmp; 1435 memset(&tmp, 0, sizeof(tmp)); 1436 if(!cfg.twin_list) 1437 { 1438 cs_log("twin_list not found!"); 1439 return tmp; 1440 } 1441 struct s_twin *entry = cfg.twin_list; 1442 while(entry) 1443 { 1444 if(entry->tw.caid == er->caid && entry->tw.provid == er->prid && entry->tw.srvid == er->srvid) 1445 { 1446 break; 1447 } 1448 entry = entry->next; 1449 } 1450 1451 if(entry) { tmp = entry->tw; } 1452 1453 return (tmp); 1454 } 1455 #endif -
trunk/oscam-config.h
r10919 r10970 40 40 void init_len4caid(void); 41 41 42 #ifdef MODULE_SERIAL 43 struct ecmtw get_twin(ECM_REQUEST *er); // get twin channel 44 void twin_read(void); 45 #endif 46 42 47 /* Shared parser functions */ 43 48 void check_caidtab_fn(const char *token, char *value, void *setting, FILE *f); -
trunk/oscam.c
r10919 r10970 1776 1776 global_whitelist_read(); 1777 1777 ratelimit_read(); 1778 1779 #ifdef MODULE_SERIAL 1780 twin_read(); 1781 #endif 1778 1782 1779 1783 for(i = 0; i < CS_MAX_MOD; i++) -
trunk/webif/files/menu.html
r10942 r10970 20 20 ##TPLFILEMENUFAKECWS## <!-- CMENUACTIVE15 --> 21 21 ##VIEW_FILEMENUCSS## <!-- CMENUACTIVE16 --> 22 ##TPLFILEMENUTWIN## <!-- CMENUACTIVE17 --> 22 23 </UL> 23 24 </LI> -
trunk/webif/pages_index.txt
r10961 r10970 116 116 FILEMENUDVBAPI files/menu_dvbapi.html HAVE_DVBAPI 117 117 FILEMENUFAKECWS files/menu_fakecws.html CS_CACHEEX 118 FILEMENUTWIN files/menu_twin.html MODULE_SERIAL 118 119 119 120 AUTOCONF ghttp/autoconf.html MODULE_GHTTP
Note:
See TracChangeset
for help on using the changeset viewer.