96 #define MAX_STRING 256 97 #define MAX_STRING1 MAX_STRING + 1 99 #define SYNCTIME_UA "synctime/1.0" 110 "http://pool.ntp.org/",
111 "http://nist.time.gov/",
112 "http://www.google.com/" 115 const char *
DayStr[] = {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"};
116 const char *
MthStr[] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
117 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
124 #define HTTP_COMMAND_HEAD 0 125 #define HTTP_COMMAND_GET 1 131 fwrite(ptr, size, nmemb, stream);
139 char TmpStr1[26], TmpStr2[26];
142 fprintf(stderr,
"%s", (
char *)(ptr));
144 if(strncmp((
char *)(ptr),
"Date:", 5) == 0) {
146 fprintf(stderr,
"HTTP Server. %s", (
char *)(ptr));
151 if(strlen((
char *)(ptr)) > 50)
155 RetVal = sscanf((
char *)(ptr),
"Date: %s %hu %s %hu %hu:%hu:%hu",
161 for(i = 0; i<12; i++) {
162 if(strcmp(
MthStr[i], TmpStr2) == 0) {
176 if(strncmp((
char *)(ptr),
"X-Cache: HIT", 12) == 0) {
177 fprintf(stderr,
"ERROR: HTTP Server data is cached." 178 " Server Date is no longer valid.\n");
185 char *proxy_user_password)
187 if(strlen(proxy_port) > 0)
190 if(strlen(proxy_user_password) > 0)
210 outfile = fopen(OutFileName,
"wb");
223 fprintf(stderr,
"SYNCTIME: Synchronising computer clock with time server" 224 " using HTTP protocol.\n");
225 fprintf(stderr,
"Usage : SYNCTIME [Option]\n");
226 fprintf(stderr,
"Options :\n");
227 fprintf(stderr,
" --server=WEBSERVER Use this time server instead" 229 fprintf(stderr,
" --showall Show all HTTP header.\n");
230 fprintf(stderr,
" --synctime Synchronising computer clock" 231 " with time server.\n");
232 fprintf(stderr,
" --proxy-user=USER[:PASS] Set proxy username and" 234 fprintf(stderr,
" --proxy=HOST[:PORT] Use HTTP proxy on given" 236 fprintf(stderr,
" --help Print this help.\n");
252 int main(
int argc,
char *argv[])
262 double tzonediffFloat;
275 while(OptionIndex < argc) {
276 if(strncmp(argv[OptionIndex],
"--server=", 9) == 0)
279 if(strcmp(argv[OptionIndex],
"--showall") == 0)
282 if(strcmp(argv[OptionIndex],
"--synctime") == 0)
285 if(strncmp(argv[OptionIndex],
"--proxy-user=", 13) == 0)
288 if(strncmp(argv[OptionIndex],
"--proxy=", 8) == 0)
291 if((strcmp(argv[OptionIndex],
"--help") == 0) ||
292 (strcmp(argv[OptionIndex],
"/?") == 0)) {
312 tt_local = mktime(lt);
314 tt_gmt = mktime(gmt);
315 tzonediffFloat = difftime(tt_local, tt_gmt);
316 tzonediffWord = (int)(tzonediffFloat/3600.0);
318 if((
double)(tzonediffWord * 3600) == tzonediffFloat)
319 snprintf(tzoneBuf, 15,
"%+03d'00'", tzonediffWord);
321 snprintf(tzoneBuf, 15,
"%+03d'30'", tzonediffWord);
326 snprintf(timeBuf, 60,
"%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
333 fprintf(stderr,
"Before HTTP. Date: %s%s\n\n", timeBuf, tzoneBuf);
340 snprintf(timeBuf, 60,
"%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
345 fprintf(stderr,
"\nAfter HTTP. Date: %s%s\n", timeBuf, tzoneBuf);
350 fprintf(stderr,
"ERROR: Unable to set system time.\n");
356 snprintf(timeBuf, 60,
"%s, %02d %s %04d %02d:%02d:%02d.%03d, ",
361 fprintf(stderr,
"\nNew System's Date: %s%s\n", timeBuf, tzoneBuf);
char timeserver[MAX_STRING1]
char http_proxy[MAX_STRING1]
#define HTTP_COMMAND_HEAD
int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName, int HttpGetBody)
UNITTEST_START char * ptr
#define curl_easy_setopt(handle, option, value)
int main(int argc, char *argv[])
void SyncTime_CURL_Init(CURL *curl, char *proxy_port, char *proxy_user_password)
size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb, void *stream)
CURL_EXTERN CURL * curl_easy_init(void)
const char DefaultTimeServer[3][MAX_STRING1]
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
int conf_init(conf_t *conf)
char proxy_user[MAX_STRING1]
CURL_EXTERN CURLcode curl_global_init(long flags)
curl_global_init() globally initializes curl given a bitwise set of the different features of what to...
size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb, void *stream)
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)