Definiciones | |
#define | SNTP_PORT_V 123 |
#define | SNTP_PORT_H_V (SNTP_PORT_V>>8) |
#define | SNTP_PORT_L_V (SNTP_PORT_V&0xff) |
#define | SNTP_DATALENGTH 48 |
Funciones | |
void | SNTP_step (void) |
ejecuta un paso de la maquina de estados de SNTP | |
void | SNTP_init (void) |
inicializa banderas de la maquina de estados de SNTP evita que se ejecute por error (p.e on_process=0) | |
void | SNTP_start (void) |
arranca la maquina de estados de SNTP | |
void | SNTP_send_request (BYTE *rxtx_buffer) |
Genera y envia un paquete de peticion de fecha/hora . | |
void | timestamp_to_date () |
void | SNTP_error (void) |
lleva a SNTP a un estado de error lo utilizan los procesos externos para "notificar" de errores (p.e. timeout) |
El Simple Network Time Protocol es una simplificacion del NTP. Utiliza simplemente un paquete de la respuesta del servidor al envio del request de NTP por lo que hay un error que se debe al retardo en la comunicacion del orden de milisegs. Por esto, solo se utiliza la timestamp de segundos y no la de fracciones de segundos para calcular fecha y hora. El timestamp contiene una cuenta de segundos transcurridos desde 1/1/1900 por lo que debe ser convertido a un formato mas amigable.
#define SNTP_DATALENGTH 48 |
#define SNTP_PORT_H_V (SNTP_PORT_V>>8) |
#define SNTP_PORT_L_V (SNTP_PORT_V&0xff) |
#define SNTP_PORT_V 123 |
void SNTP_error | ( | void | ) |
lleva a SNTP a un estado de error
lo utilizan los procesos externos para "notificar" de errores (p.e. timeout)
void SNTP_init | ( | void | ) |
inicializa banderas de la maquina de estados de SNTP
evita que se ejecute por error (p.e on_process=0)
void SNTP_send_request | ( | BYTE * | rxtx_buffer | ) |
Genera y envia un paquete de peticion de fecha/hora
.
por un tema de seguridad, habria que mandarlo con un timestamp propio y checkear que la respuesta tenga dicho timestamp para de esa forma evitar que alguien me mande un udp simulando ser el server que me confunda. igual esto es de paranoico ya que si chequeo que el sender ip y el sender MAC sean del server, ya estaria cubierto.
La estructura que se utilizara para el almacenado de fechas y horas. Permite guardar la informacion de una manera mas amigable que el timestamp de NTP en un campo de 32 bits.
La peticion se realiza a la MAC e IP que han sido preasignadas.
rxtx_buffer | es un puntero al buffer temporal |
void SNTP_start | ( | void | ) |
arranca la maquina de estados de SNTP
void SNTP_step | ( | void | ) |
ejecuta un paso de la maquina de estados de SNTP
void timestamp_to_date | ( | ) |
Para la conversion, se divide (de forma entera) entre 60 (o 24) sucesivamente, almacenando los restos para obtener segundos, minutos, horas y dias. La cuenta de dias desde 1900 se convierte al formato dia/mes/año utilizando un algoritmo derivado del algoritmo de conversion entre calendarios Juliano y Gregoriano. Solo se almacenan 2 digitos del año ya que dada la longitud del timestamp, el protocolo solo puede contar 136 años desde 1900 y no trabajaremos con fechas "negativas".