ntptime.h
上传用户:hnnddl
上传日期:2007-01-06
资源大小:3580k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

WINDOWS

  1. /*
  2.  * $Revision: 1.4 $
  3.  * $Date: 1999/03/09 17:07:50 $
  4.  */
  5. ////////////////////////////////////////////////////////////////
  6. //               Copyright (c) 1996,97 Lucent Technologies    //
  7. //                       All Rights Reserved                  //
  8. //                                                            //
  9. //                       THIS IS UNPUBLISHED                  //
  10. //                       PROPRIETARY SOURCE                   //
  11. //                   CODE OF Lucent Technologies              //
  12. //      AND elemedia    //
  13. //                                                            //
  14. //           The copyright notice above does not evidence any //
  15. //          actual or intended publication of such source code//
  16. ////////////////////////////////////////////////////////////////
  17. //
  18. /////////////////////////////////////////////////////////////////
  19. // File : ntptime.h        //
  20. //                                                             //
  21. // This file declares  time related functions.    //
  22. //    //
  23. //                                                            //
  24. // History:    //
  25. //  15_Jan_1997 Created    //
  26. //  03_Mar_1997 added a cast to t.millitm before assignment    //
  27. //              in the function gettimeofday.                  //
  28. // 26_Aug_1997 Added gettimeofday for VXWORKS.    //
  29. /////////////////////////////////////////////////////////////////
  30. #ifndef __NTPTIME_H__
  31. #define __NTPTIME_H__
  32. #if defined(WIN32)
  33. #include <windows.h>
  34. #include <sys/timeb.h>
  35. // gettimeofday implementation for Win32 platforms
  36. inline
  37. int gettimeofday(struct timeval *p, struct timezone *z)
  38. {
  39.     if (p)
  40.  {
  41.      struct timeb t;
  42.      ftime(&t);
  43.      p->tv_sec = t.time;
  44.      p->tv_usec = (int)t.millitm * 1000;
  45.     }
  46.     return 0;
  47. }
  48. #endif
  49. #if defined(VXWORKS)
  50. inline
  51. int gettimeofday(struct timeval *p, void *tz)
  52. {
  53. if (p)
  54. {
  55. struct timespec ts;
  56. clock_gettime(CLOCK_REALTIME,&ts);
  57.      p->tv_sec = ts.tv_sec;
  58. p->tv_usec = ts.tv_nsec / 1000;
  59. }
  60. return 0;
  61. }
  62. #endif
  63. // Function to convert usecs to fraction of sec * 2^32
  64. inline unsigned int usec2ntp(unsigned int usec)
  65. {
  66. unsigned int t = (usec * 1825) >> 5;
  67. return ((usec << 12) + (usec << 8) - t);
  68. }
  69.  // Number of seconds between 1-Jan-1900 and 1-Jan-1970
  70. #define JAN1900_JAN1970_INTERVAL 2208988800U
  71. // Function returns a 64-bit ntp timestamp
  72. inline 
  73. void ntp64time(timeval tv, unsigned int& sec, unsigned int& frac)
  74. {
  75. sec = (unsigned int)tv.tv_sec + JAN1900_JAN1970_INTERVAL;
  76. frac = usec2ntp((unsigned int)tv.tv_usec);
  77. }
  78. inline unsigned int ntptime(timeval t)
  79. {
  80. unsigned int s = (unsigned int)t.tv_sec + JAN1900_JAN1970_INTERVAL;
  81. return (s << 16 | usec2ntp((unsigned int)t.tv_usec) >> 16);
  82. }
  83. inline
  84. unsigned int ntptime()
  85. {
  86. timeval tv;
  87. ::gettimeofday(&tv, 0);
  88. return (ntptime(tv));
  89. }
  90. inline
  91. void ntp64time(unsigned int& sec, unsigned int& frac)
  92. {
  93. timeval tv;
  94. ::gettimeofday(&tv,NULL);
  95. ntp64time(tv,sec,frac);
  96. }
  97. #endif