Ejemplo n.º 1
0
unsigned long DNS_ResolveName_P( const char * HOSTNAME_P )
{
	char dnsbuffer[64];

	strcpy_P( dnsbuffer, HOSTNAME_P );
		
	return( DNS_ResolveName( dnsbuffer ) );
}
Ejemplo n.º 2
0
int cmd_ntp( int argc, char ** argv )
{ 
	unsigned long ip;
	char ipstr[ 20 ];

	struct TIME time;
	
	if ( argc == 2 )
	{
		ip = strtoip( argv[1] );

		if ( ip == 0 )
		{
			ip = DNS_ResolveName( argv[ 1 ] );
			if ( ip == DNS_NO_ANSWER )
			{
				printf_P( PSTR("Fehler\r\n"));
				return( 0 );
			}
		}
		
		printf_P( PSTR("Hole Zeit von %s\r\n"), argv[ 1 ] );
		
		if( checkConfigName_P( UTCZONE_P ) != -1 )
			readConfig_P ( UTCZONE_P, ipstr );
		else
			ipstr[0] = '\0';

		if ( NTP_GetTime( ip , 0 , atol( ipstr ) ) != NTP_ERROR )
		{
			CLOCK_GetTime( &time );
			printf_P( PSTR("Neue Zeit: %02d:%02d:%02d\r\n") , time.hh , time.mm , time.ss );
		}
		else
			printf_P( PSTR("Fehler\r\n"));			
	}
	else
		printf_P( PSTR("ntp <ntpserver>\r\n"));

	return( 0 );
}
Ejemplo n.º 3
0
/*------------------------------------------------------------------------------------------------------------*/
unsigned int NTP_GetTime( unsigned long IP, char * dnsbuffer, char timedif )
	{
		char buffer[ NTP_SIZE ];
		int i=0, socket, timer, retval = NTP_ERROR;

#if defined(NTP_DEBUG)
		char String[30];
#endif
		
		union DATE ZeitInSek;
		
		struct TIME time;

#if defined(NTP_DEBUG)
		printf_P( PSTR("Oeffne neues Socket.\r\n") );
#endif		
		if ( IP == 0 )
		{
#ifdef UDP
	#ifdef DNS
			if ( dnsbuffer != 0 )
			{
				// Host nach IP auflösen
				IP = DNS_ResolveName( dnsbuffer );
				// könnte er aufgelöst werden ?
				if ( IP == DNS_NO_ANSWER ) return( NTP_ERROR );
			}
			else
	#endif
#endif
			return( NTP_ERROR );
		}
		// UDP-socket aufmachen für Bootp
		socket = UDP_RegisterSocket( IP , 37 , NTP_SIZE , buffer);
		// Wenn Fehler aufgetretten, return
		if ( socket == UDP_SOCKET_ERROR ) 
		{
			return ( NTP_ERROR );
		}

#if defined(NTP_DEBUG)
			printf_P( PSTR("UDP-Socket aufgemacht zur %s.\r\n"), iptostr( IP, String ) );
#endif
		// leeres UDP-Packet an Time-server senden
		UDP_SendPacket( socket, 0 , buffer);

#if defined(NTP_DEBUG)
		printf_P( PSTR("UDP-Packet gesendet.\r\n"));
#endif
		// Timeout-counter reservieren und starten
		timer = CLOCK_RegisterCountdowntimer();
		if ( timer == CLOCK_FAILED ) return ( NTP_ERROR );

		CLOCK_SetCountdownTimer( timer , 500, MSECOUND );

#if defined(NTP_DEBUG)
		printf_P( PSTR("Warte auf Antwort."));
#endif
		// Auf Antwort des Timer-Servers warten
		while( 1 )
		{
			// Wenn Time-Server geantwortet hat inerhalb des Timeouts, hier weiter
			if ( UDP_GetSocketState( socket ) == UDP_SOCKET_BUSY && ( CLOCK_GetCountdownTimer( timer ) != 0 ) )
			{
				// Sind 4 Bytes empfangen worden, wenn ja okay, sonst fehler
				if ( UDP_GetByteInBuffer( socket ) >= 4 )
				{				
					// Daten kopieren und Zeit ausrechnen
					for ( i = 0 ; i < 4 ; i++ ) 
						ZeitInSek.DateByte[ i ] = buffer[ 3 - i ];

					CLOCK_GetTime( &time );

					time.time = ZeitInSek.Date;
					time.timezone = timedif;
					
					CLOCK_decode_time( &time );

					CLOCK_SetTime( &time );
					
					retval = NTP_OK;
#if defined(NTP_DEBUG)
					printf_P( PSTR("Antwort erhalten.\r\n"));
#endif
					// fertisch
					break;
				}
				else
				{
#if defined(NTP_DEBUG)
					printf_P( PSTR("Falsches Format der Antwort.\r\n"));
#endif
					retval = NTP_ERROR;
					break;
				}
			}
			// Timeout erreicht ? Wenn ja Fehler.
			if ( CLOCK_GetCountdownTimer( timer ) == 0 )
			{
#if defined(NTP_DEBUG)
				printf_P( PSTR("Timeout beun warten auf Antwort.\r\n"));
#endif
				retval = NTP_ERROR;
				break;
			}
		}
		// timer freigeben und UDP-Socket schliessen
		CLOCK_ReleaseCountdownTimer( timer );
		UDP_CloseSocket( socket );
#if defined(NTP_DEBUG)
		printf_P( PSTR("UDP-Socket geschlossen.\r\n"));
#endif
		return( retval );
	}