Тег «newcamd»

Продолжение: НТВ+, mpcs и Кинорейс

После модификации исходников mpcs осталась проблема с каналами Кинорейс для протокола newcamd.

Проанализировав исходники и отрассировав в режиме отладки mpcs оказалось, что длины буферов под ecm все равно не хвататает. Вот два изменения:

--- module-newcamd.c.orig       2008-12-12 20:17:14.000000000 +0200
+++ module-newcamd.c    2009-02-03 14:30:31.000000000 +0200
@@ -1,6 +1,6 @@
 #include "globals.h"
 
-#define CWS_NETMSGSIZE 256
+#define CWS_NETMSGSIZE 256+3
 
 typedef unsigned char uint8;
 typedef unsigned short uint16;
 
--- des.c.orig  2008-11-26 21:09:50.000000000 +0200
+++ des.c       2009-02-03 14:29:09.000000000 +0200
@@ -516,7 +516,7 @@
   }
 }
 
-#define CWS_NETMSGSIZE 256
+#define CWS_NETMSGSIZE 256+3
 
 int des_encrypt(byte *buffer, int len, byte *deskey)
 {

На будущее для любителей трассировки в режиме отладки еще один патч (есть вероятность, что длину еще могут изменить):

--- module-newcamd.c.orig       2008-12-12 20:17:14.000000000 +0200
+++ module-newcamd.c    2009-02-03 14:30:31.000000000 +0200
@@ -96,7 +98,9 @@
   if (!buffer || handle < 0)
     return -1;
   len = recv(handle, netbuf, 2, 0);
-  cs_debug("nmr(): len=%d, errno=%d", len, (len==-1)?errno:0);
+  cs_debug("nmr(): len=%d, errno=%d, netbuf=(%X|%X)->(%X), %d > %d",
+    len, (len==-1)?errno:0,netbuf[0],netbuf[1],(netbuf[0] << 8 ),
+    ((netbuf[0] << 8 ) | netbuf[1]),(CWS_NETMSGSIZE - 2));
   if (!len) {
     cs_debug("nmr: 1 return 0");
     network_tcp_connection_close(handle);
@@ -107,8 +111,9 @@
     network_tcp_connection_close(handle);
     return -1;
   }
-  if (((netbuf[0] << 8 ) | netbuf[1]) > CWS_NETMSGSIZE - 2) {
-    cs_debug("nmr: 1 return -1");
+  if (((netbuf[0] << 8 ) | netbuf[1]) > CWS_NETMSGSIZE - 2
+       /*&& (netbuf[0] << 8 )<=256*/ ) {
+    cs_debug("nmr: 1 return -1, (%X | %X)",(netbuf[0] << 8 ) ,netbuf[1]);
     return -1;
   }
 
@@ -117,8 +122,9 @@
     cs_debug("nmr: 2 return 0");
     return 0;
   }
+  cs_debug("nmr(): 2 len=%d", len);
   if (len != ((netbuf[0] << 8 ) | netbuf[1])) {
-    cs_debug("nmr: 2 return -1");
+    cs_debug("nmr: 2 return -1, (%X | %X)",(netbuf[0] << 8 ) ,netbuf[1]);
     return -1;
   }
   len += 2;

Локальная копия mpcs, патчи module-newcamd.c и des.c

Теги: , , , , , ,

НТВ+, mpcs и ECM length

На streamboard берется исходник mpcs0.9d-src.tar.bz2.

Находим строку

#define CWS_NETMSGSIZE 240

в файлах module-newcamd.c и des.c.

Заменяем константу 240 на 256 (это с запасом). Компилим.

Пропавшие каналы появляются. Проверено в связке mgcamd-1.31 -> mpcs -> далекая шара.

P.S. В последних версиях mpcs на streamboard этот патч уже включен.

За что и получил спасибо от немецких камрадов :)

Теги: , , , ,