[B]Explicación del protocolo RADEGAST:[/B]
¡Vámos al lío a ver si os animáis y que yo deje de hacer programitas! :
El protocolo radegast que usamos es el mas simplote.
Es el que usa la dreambox.
No tiene usr / password aunque las versiones mas modernas de radegast si que lo tienen.
Radegast, básicamente son 2 tramas muy simples:
1.- La que emite el cliente (seacli, mospheo-cliente, yankse..) al server (Cardserver, Dreambox-radegast, Mospheo-servidor)
2.- La que responde el servidor al cliente.
El cliente manda un paquete TCP al puerto radegast que esté configurado en el server con la siguiente estructura (expreso en HEX todo):
01 (radegast)
XX (Longitud de lo que sigue)
02 01 XX (CAID,normalmente 01=seca, 05=viaccess, etc)
0A 02 XX XX (CAID completo; 01 00=seca, 18 00=nagra,etc) (este campo es opcional, puede o no venir)
06 08 XX XX XX XX XX XX XX XX (PROVEEDOR EN TEXTO. ejemplo 30 30 30 30 34 31 30 31 = "00004101")
07 01 XX (CLAVE DEL MES. ejemplo: 0E)
03 XX (ECM de XX de longitud)
XX..XX (la ecm en cuestión).
Algunas versiones de YANKSE mandan el campo 0A y otras no. SEACLI no lo manda por que para nosotros, en seca, no es necesario.
Como se observa, y resumiendo se ve que todo tiene un campo (01, 02, 0A, 06, 07 y 03) y cada campo de esos le sige una longitud.
El primer campo (01) sigue la longitud total del paquete recibido -2 caracteres.
Con lo cual la primera comprobacion a hacer es si el primer caracter es 01 y el segundo es igual a la longitud del paquete TCP recibido menos 2 caracteres.
En cuanto a lo emitido desde el servidor al cliente es muy parecido:
02 (respuesta radegast)
XX (longitud de lo que sigue)
05 10 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (16 CARACTERES DE LA DCW)
como se observea, miraremos que llegue ese caracter 02 en el cliente. el dato útil será las XX de las dcw y la longitud para seca será siempre de 0x10 (16) caracteres en el campo 05.
Si por cualquier motivo en el server, la respuesta de la tarjeta fuera errónea, éste devolverá un paquete TCP así:
02 (02=radegast de...)
06 (bytes longitud total)
04 02 XX XX (04=campo error,
ó bien (no recomendada):
02 (02=devolucion radegast de...)
04 (longitud total)
04 00
Usad la primera parte y devolved en las XX el 9302 o el error que convenga.
En mospheo esto es así pero en cardserver siempre devuelve una DCW correcta y si no es posible, devuelve toda la dw's FF's.
Ejemplo de como retornar un 9302 desde el server al cliente:
[Code]
/*retornar 9303 al cliente por no poder visualizar ese canal*/
void Retorna9302(void)
{
BYTE Salida[6];
Salida[0]=0x2;
Salida[1]=0x6;
Salida[2]=0x4;
Salida[3]=0x2;
Salida[4]=0x93;
Salida[5]=0x02;
TX_TCP(ToCliente,Salida,6);
}
[/Code]
Por supuesto la funcion TX_TCP será para transmitir por el tcp
ya que mas o menos, la respuesta del server hacia el cliente es fácil, detallaré la pregunta desde el cliente al server:
Ejemplo de trafico CLIENTE->SERVER radegast (DATOS FICTICIOS!):
01 78 02 01 01 0A 02 01 00 06 08 30 30 30 30 34
31 30 31 07 04 30 30 30 45 03 5F 80 70 5C 41 01
00 00 0E 07 55 41 01 86 00 E8 F0 41 E7 74 9E 8B
DD 82 6B 33 7A 17 AE ED 77 BA CB 51 80 F5 05 5D
ED F4 27 80 8E 57 8E 1B D6 DE 4D 33 87 DD DE 7D
D7 A1 38 39 A7 40 FE C2 74 FA 7F 4B E8 48 B0 37 70
12 05 4B 5D 1B 5A 7D 63 92 11 E8 5B 01 4A 24 19 4B DD 67 84
97 FE 39 F5 1F
Vamos a desglosarlo:
[COLOR=Red]01[/COLOR] [COLOR=Blue]78[/COLOR] (radegast de 0x78 caracteres de largo sigue);
[COLOR=Red]02[/COLOR] [COLOR=Blue]01[/COLOR] 01 (campo 02=CAID, de 1 de longitud con valor 01=SECA)
[COLOR=Red]0A[/COLOR] [COLOR=Blue]02[/COLOR] 01 00 (campo 0A=CAID, de 2 de longitud con valor 01 00=SECA)
[COLOR=Red]06[/COLOR] [COLOR=Blue]08[/COLOR] 30 30 30 30 34 31 30 31 (campo 06=PROVIDERID de 8 de longitud con valor "00004101"
[COLOR=Red]07[/COLOR] [COLOR=Blue]04[/COLOR] 30 30 30 45 (campo 07=KEY de 4 de longitud con valor "000E")
[COLOR=Red]03[/COLOR] [COLOR=Blue]5F[/COLOR] (campo 03=ECM DATA de 95 de longitud)
[COLOR=Green]80 70 5C 41 01 00 00 0E [/COLOR] 07 55 (datos ECM de 95 caracteres, DATOS FICTICIOS)
41 01 86 00 E8 F0 41 E7 74 9E
8B DD 82 6B 33 7A 17 AE ED 77
BA CB 51 80 F5 05 5D ED F4 27
80 8E 57 8E 1B D6 DE 4D 33 87
DD DE 7D D7 A1 38 39 A7 40 FE
C2 74 FA 7F 4B E8 48 B0 37 70
12 05 4B 5D 1B 5A 7D 63 92 11
E8 5B 01 4A 24 19 4B DD 67 84
97 FE 39 F5 1F
En rojo están los campos RADEGAST
En Azul las longitudes de estos campos . Recuerda que el campo 01 tiene una logutud de la totalidad menos 2 caracteres.
Como se observa, la parte de la ecm de 0x5F (95 en decimal) caracteres es visible. he puesto una parte en verde por que realmente esos 8 caracteres NO SON PARTE DE LA ECM sino los pone el cliente. Poned fijo el 80 (aunque deberia de ir cambiando de una a otra 80,81 alternativamente (par/impar), el 70 y el 5c los podéis dejar fijos y el 41 01, lógicmanet también. lo único con cuidado es con la "0E" que es la clave del mes a usar.
Muy importate: estos son estudios que he sacado de varios sitios, soy una persona humana y seguramente no estén del todo exactos, pero funcionar, funciona
salu2 y a disfrutar.