亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rvntptime.h

?? 基于h323協議的軟phone
?? H
字號:
/***********************************************************************
Filename   : rvntptime.h
Description: NTP time module header
************************************************************************
      Copyright (c) 2001,2002 RADVISION Inc. and RADVISION Ltd.
************************************************************************
NOTICE:
This document contains information that is confidential and proprietary
to RADVISION Inc. and RADVISION Ltd.. No part of this document may be
reproduced in any form whatsoever without written prior approval by
RADVISION Inc. or RADVISION Ltd..

RADVISION Inc. and RADVISION Ltd. reserve the right to revise this
publication and make changes without obligation to notify any person of
such revisions or changes.
***********************************************************************/
/*$
{package:
	{name: NtpTime}
	{superpackage: CUtils}
	{include: rvntptime.h}
	{description:	
		{p: This module provides functions for creating and manipulating
			NTP time values. Each time value is stored in two parts, seconds
			and fraction of a second. Refer to the NTP time specification
			for details on this format.}
	}
	{notes:
		{note:  This module does no locking at all. Any locking of
				an NTP time object is the responsibility of the user.}
	}
}
$*/
#ifndef RV_NTPTIME_H
#define RV_NTPTIME_H

#include "rvtypes.h"
#include "rvtime.h"

/*$
{type:
	{name: RvNtpTime}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:	
		{p: A time value in seconds and fraction of a second.}
	}
}
$*/
typedef struct {
	RvUint32  secs; 
	RvUint32  fraction;
} RvNtpTime;

/* constants for telling conversion functions how to work */
#define RV_NTPTIME_ABSOLUTE RV_TRUE
#define RV_NTPTIME_RELATIVE RV_FALSE

#if defined(__cplusplus)
extern "C" {
#endif 

/* Prototypes and macros: See documentation blocks below for details. */
RvNtpTime *RvNtpTimeConstruct(RvNtpTime *ntime, RvUint32 secs, RvUint32 fraction);
RVCOREAPI RvNtpTime * RVCALLCONV RvNtpTimeConstructFromTime(RvNtpTime *ntime, const RvTime *t, RvBool timetype);
RvNtpTime *RvNtpTimeConstructFrom64(RvNtpTime *result, RvUint64 ntime, RvUint8 decimal);
RvNtpTime *RvNtpTimeChop(RvNtpTime *result, const RvNtpTime *ntime, RvUint8 secbits, RvUint8 fracbits);
RvNtpTime *RvNtpTimeSubtract(RvNtpTime *result, const RvNtpTime *newtime, const RvNtpTime *oldtime);
RvNtpTime *RvNtpTimeAdd(RvNtpTime *result, const RvNtpTime *newtime, const RvNtpTime *oldtime);
RvTime *RvNtpTimeToTime(const RvNtpTime *ntime, RvTime *t, RvBool timetype);
RVCOREAPI RvUint64 RVCALLCONV RvNtpTimeTo64(const RvNtpTime *ntime, RvUint8 secbits, RvUint8 fracbits);
RvUint32 RvNtpTimeNsecsToFraction(RvInt32 nsecs);
RvInt32 RvNtpTimeFractionToNsecs(RvUint32 fraction);
#define RvNtpTimeGetSecs(_n) ((_n)->secs)
#define RvNtpTimeSetSecs(_n, _s) ((_n)->secs = (_s))
#define RvNtpTimeGetFraction(_n) ((_n)->fraction)
#define RvNtpTimeSetFraction(_n, _s) ((_n)->fraction = (_s))
#define RvNtpTimeDestruct(_n)
#define RvNtpTimeCopy(_n, _s) ((_n)->secs = (_s)->secs,(_n)->fraction = (_s)->fraction)

#if defined(RV_TEST_CODE)
void RvNtpTimeTest(void);
#endif

#if defined(__cplusplus)
}
#endif 

/*$
{function:
	{name: RvNtpTimeConstruct}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Constructs an NTP time.}
	}
	{proto: RvNtpTime *RvNtpTimeConstruct(RvTime *ntime, RvUint32 secs, RvIint32 fraction);}
	{params:
		{param: {n: ntime} {d: Pointer to NTP time structure to construct.}}
		{param: {n: secs} {d: Initial value for seconds.}}
		{param: {n: fraction} {d: Initial fraaction value.}}
	}
	{returns: A pointer to the NTP time structure or, if there is an error, NULL.}
}
$*/
/*$
{function:
	{name: RvNtpTimeConstructFromTime}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Constructs an NTP time from a standard time value. It handles both
			relative time and absolute (actual clock) times. If timetype is set
			to RV_NTPTIME_RELATIVE then the time will simply be converted from
			seconds and nanoseconds to seconds and fraction of a second. If the
			timetype is set to RV_NTPTIME_ABSOLUTE, then the time will be
			considered to be seconds and nanoseconds since January 1, 1970 and
			will be convert to an NTP time of seconds and fraction of a second
			since January 1, 1900.}
	}
	{proto: RvNtpTime *RvNtpTimeConstructFromTime(RvNtpTime *ntime, const RvTime *t, RvBool timetype);}
	{params:
		{param: {n: ntime} {d: Pointer to NTP time structure to construct.}}
		{param: {n: t} {d: Time to convert from.}}
		{param: {n: timetype} {d: Type of time to convert: RV_NTPTIME_RELATIVE or RV_NTPTIME_ABSOLUTE.}}
	}
	{returns: A pointer to the NTP time structure or, if there is an error, NULL.}
	{notes:
		{note:  For ABSOLUTE times, not all valid values of time can be represented
				in the the NTP time format. Dates in 2036 and later can not be
				converted.}
		{note:  The conversion between nanoseconds and fraction of a second may
				incur a small amount of round off error.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeConstructFrom64}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Constructs an NTP time from a 64 bit NTP time representation.}
	}
	{proto: RvNtpTime *RvNtpTimeConstructFrom64(RvNtpTime *result, RvUint64 ntime, RvUint8 decimal);}
	{params:
		{param: {n: result} {d: Pointer to NTP time structure to construct.}}
		{param: {n: ntime} {d: 64 bit representation of an NTP time.}}
		{param: {n: decimal} {d: Number of bits in ntime which is the fraction part of the number (0 = no fraction, 64 = no seconds).}}
	}
	{returns: A pointer to the NTP time structure or, if there is an error, NULL.}
}
$*/
/*$
{function:
	{name: RvNtpTimeChop}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Chops bits off of Ntp times. Some application require smaller NTP numbers
			that 32 bits of seconds and a 32 bit fraction. This fucntion will chop
			off unneeded bits by zeroing them out.}
	}
	{proto: RvNtpTime *RvNtpTimeChop(RvNtpTime *result, const RvNtpTime *ntime, RvUint8 secbits, RvUint8 fracbits);}
	{params:
		{param: {n: result} {d: Pointer to NTP time structure where result will be stored.}}
		{param: {n: ntime} {d: Pointer to NTP time structure to chop.}}
		{param: {n: secbits} {d: Number of bits of the seconds value to keep (0 - 32).}}
		{param: {n: fracbits} {d: Number of bits of the fraction to keep (0 - 32).}}
	}
	{returns: A pointer to the resulting NTP time structure or, if there is an error, NULL.}
}
$*/
/*$
{function:
	{name: RvNtpTimeSubtract}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Subracts two NTP time values (result = newtime - oldtime).}
	}
	{proto: RvNtpTime *RvntpTimeSubract(RvNtpTime *result, const RvNtpTime *newtime, const RvNtpTime *oldtime);}
	{params:
		{param: {n: result} {d: Pointer to time structure where result will be stored.}}
		{param: {n: newtime} {d: Pointer to NTP time structure to subract from. }}
		{param: {n: oldtime} {d: Pointer to NTP time structure with value to subract.}}
	}
	{returns: A pointer to result or, if there is an error, NULL.}
	{notes:
		{note:  Since NTP time values are unsigned, newtime must be larger than oldtime and
				the earliest real time that can be represented is January 1, 1900.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeAdd}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Adds two NTP time values (result = time1 + time2).}
	}
	{proto: RvNtpTime *RvNtpTimeAdd(RvNtpTime *result, const RvNtpTime *time1, const RvNtpTime *time2);}
	{params:
		{param: {n: result} {d: Pointer to time structure where result will be stored.}}
		{param: {n: time1} {d: Pointer to first NTP time.}}
		{param: {n: time2} {d: Pointer to second NTP time structure.}}
	}
	{returns: A pointer to result or, if there is an error, NULL.}
	{notes:
		{note:  Absolute NTP time values wrap in the year 2036.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeToTime}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Converts NTP time to a standard time value. It handles both
			relative time and absolute (actual clock) times. If timetype is set
			to RV_NTPTIME_RELATIVE then the NTP time will simply be converted
			from seconds and fraction of a second to seconds and nanoseconds. If
			the timetype is set to RV_NTPTIME_ABSOLUTE, then the NTP time will be
			considered to be seconds fraction of a second since January 1, 1900
			and will be coverted to seconds and nanoseconds since January 1, 1970.}
	}
	{proto: RvTime *RvNtpTimeToTime(const RvNtpTime *ntime, RvTime *t, RvBool timetype);}
	{params:
		{param: {n: ntime} {d: Pointer to NTP time structure to convert from.}}
		{param: {n: t} {d: Pointer to time to store the result.}}
		{param: {n: timetype} {d: Type of time to convert: RV_NTPTIME_RELATIVE or RV_NTPTIME_ABSOLUTE.}}
	}
	{returns: A pointer to the time structure (t) or, if there is an error, NULL.}
	{notes:
		{note:  For ABSOLUTE times, not all valid values of NTP can be represented
				in the standard time format. Dates in 1902 and earlier can not be
				converted.}
		{note:  The conversion between fraction of a seconds and nanoseconds may
				incur a small amount of round off error.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeTo64}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Converts an NTP time to a 64 bit representation. The number of bits to use for
			seconds and the fraction may be set. For example, setting secbits to 32 and
			fracbits to 32 will return a full 64 bit representation of the NTP time. Or,
			setting secbits to 4 and fracbits to 12 will return a 64 bit number where
			the low order 12 bits are the fraction, followed by 4 bits of the seconds,
			and the high order 32 bits simply set to 0.}
	}
	{proto: RvUint64 RvNtpTimeTo64(const RvNtpTime *ntime, RvUint8 secbits, RvUint8 fracbits);}
	{params:
		{param: {n: ntime} {d: Pointer to NTP time structure to convert.}}
		{param: {n: secbits} {d: Number of bits of the seconds value to include (0 to 64).}}
		{param: {n: frac} {d: Number of bits of the fraction to include (0 to 64).}}
	}
	{returns: The 64 bit represention of the NTP value.}
}
$*/
/*$
{function:
	{name: RvNtpTimeNsecsToFraction}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Converts a value in nanoseconds to an NTP fraction. The nanoseconds value
			must be less than one second.}
	}
	{proto: Rvuint32 RvNtpTimeNsecsToFraction(RvInt32 nsecs);}
	{params:
		{param: {n: nsecs} {d: Nanoseconds (0 to 999999999.}}
	}
	{returns: 32 bit NTP fraction.}
	{notes:
		{note:  The conversion between nanoseconds and fraction of a second may
				incur a small amount of round off error.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeFractionToNsecs}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Converts an NTP fraction to nanoseconds.}
	}
	{proto: Rvuint32 RvNtpTimeFractionToNsecs(RvUint32 fraction);}
	{params:
		{param: {n: fraction} {d: NTP fraction.}}
	}
	{returns: Nanoseconds (0 to 999999999).}
	{notes:
		{note:  The conversion between the NTP fraction of a second and
				nanoseconds may incur a small amount of round off error.}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeGetSecs}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Get the seconds value from a NTP time structure.}
	}
	{proto: RvUint32 RvNtpTimeGetSecs(RvNtpTime *_n);}
	{params:
		{param: {n: _n} {d: Pointer to NTP time structure to get information from.}}
	}
	{returns: Seconds.}
}
$*/
/*$
{function:
	{name: RvNtpTimeSetSecs}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Sets the seconds value of an NTP time structure.}
	}
	{proto: RvUint32 RvNtpTimeSetSecs(RvNtpTime *_n, RvUint32 _s);}
	{params:
		{param: {n: _n} {d: Pointer to NTP time structure to set information in.}}
		{param: {n: _s} {d: Seconds.}}
	}
	{returns: Seconds value that was set.}
}
$*/
/*$
{function:
	{name: RvNtpTimeGetFraction}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Get the fraction of a second value from an NTP time structure.}
	}
	{proto: RvUint32 RvTimeGetFraction(RvNtpTime *_n);}
	{params:
		{param: {n: _n} {d: Pointer to NTP time structure to get information from.}}
	}
	{returns: NTP fraction of a second.}
}
$*/
/*$
{function:
	{name: RvTimeSetFraction}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Sets the fraction of a second value of an NTP time structure.}
	}
	{proto: RvUint32 RvNtpTimeSetFraction(RvNtpTime *_n, RvUint32 _s);}
	{params:
		{param: {n: _n} {d: Pointer to NTP time structure to set information in.}}
		{param: {n: _s} {d: NTP fraction of a second.}}
	}
	{returns: NTP fraction of a second value that was set.}
}
$*/
/*$
{function:
	{name: RvNtpTimeDestruct}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Destructs an NTP time object.}
	}
	{proto: void RvNtpTimeDestruct(RvNtpTime *_n);}
	{params:
		{param: {n: _t} {d: Pointer to NTP time object to be destructed.}}
	}
}
$*/
/*$
{function:
	{name: RvNtpTimeCopy}
	{superpackage: NtpTime}
	{include: rvntptime.h}
	{description:
		{p: Copies the value of one NTP time structure to another.}
	}
	{proto: RvUint32 RvNtpTimeCopy(RvNtpTime *_n, RvTime *_s);}
	{params:
		{param: {n: _n} {d: Pointer to NTP time structure to copy information to.}}
		{param: {n: _s} {d: Pointer to NTP time structure to copy information from.}}
	}
	{returns: Fraction of a second value that was copied.}
}
$*/

#endif /* RV_NTPTIME_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
69堂国产成人免费视频| 99国产精品久久久久久久久久久| 亚洲天天做日日做天天谢日日欢| 国产亚洲欧美一级| 久久综合色鬼综合色| 日韩午夜小视频| 欧美一级专区免费大片| 欧美一级专区免费大片| 日韩欧美一级片| 欧美电影精品一区二区| 精品国产乱码久久久久久夜甘婷婷| 日韩视频免费直播| 国产欧美一区二区精品性色超碰| 日本一区二区三区免费乱视频| 国产欧美精品一区二区色综合 | 亚洲激情网站免费观看| 亚洲精品视频观看| 亚洲国产成人av| 美腿丝袜亚洲三区| 懂色av一区二区三区免费观看| www.日韩精品| 欧美日韩国产成人在线免费| 日韩欧美的一区| 国产精品卡一卡二| 五月综合激情日本mⅴ| 韩国视频一区二区| 91一区二区三区在线播放| 欧美三级乱人伦电影| 日韩美女一区二区三区四区| 国产精品美日韩| 亚洲福利视频三区| 国产精品一卡二卡在线观看| 97久久人人超碰| 欧美精品777| 国产精品国产三级国产普通话三级 | 国产大片一区二区| 91成人在线观看喷潮| 日韩视频免费观看高清在线视频| 欧美激情在线看| 亚洲国产日产av| 激情久久久久久久久久久久久久久久| www.66久久| 日韩欧美资源站| 亚洲精品一二三| 国产a区久久久| 欧美日本在线播放| 日韩美女啊v在线免费观看| 久久精品久久99精品久久| 99视频有精品| 国产夜色精品一区二区av| 日韩精品一二三四| 色综合咪咪久久| 国产欧美综合在线观看第十页| 日本在线不卡一区| 欧美三区免费完整视频在线观看| 国产精品蜜臀在线观看| 国产一区视频导航| 日韩一级免费一区| 五月天久久比比资源色| 一本高清dvd不卡在线观看| 国产亚洲女人久久久久毛片| 青青青爽久久午夜综合久久午夜| 91成人免费在线| 亚洲乱码日产精品bd| 成人美女在线视频| 国产日产精品1区| 国产精品一区专区| 精品区一区二区| 麻豆精品一二三| 日韩欧美高清一区| 久久精品国产精品亚洲综合| 欧美一三区三区四区免费在线看 | 一区二区三区 在线观看视频| 波多野结衣视频一区| 国产日韩欧美a| 国产成人自拍网| 国产丝袜欧美中文另类| 狠狠网亚洲精品| 国产肉丝袜一区二区| 国产福利一区在线| 国产女同互慰高潮91漫画| 成人午夜免费av| 1024精品合集| 欧美亚洲禁片免费| 天天做天天摸天天爽国产一区| 欧美精品777| 美女高潮久久久| 国产视频亚洲色图| 91在线视频播放地址| 一区二区欧美国产| 欧美一级二级三级乱码| 国内久久婷婷综合| 国产精品福利影院| 在线观看成人小视频| 五月婷婷综合在线| 久久影院午夜片一区| 99久久精品99国产精品| 亚洲国产一区二区a毛片| 日韩一区二区三区四区五区六区| 国产最新精品精品你懂的| 国产精品久久毛片| 欧美午夜精品理论片a级按摩| 天使萌一区二区三区免费观看| 精品久久国产字幕高潮| 91网站在线播放| 日韩av一区二区三区| 日本一区二区免费在线观看视频 | 天堂资源在线中文精品| 精品奇米国产一区二区三区| 成人精品免费视频| 亚洲成人一区二区在线观看| 久久精品日韩一区二区三区| 91理论电影在线观看| 九色|91porny| 一区二区三区在线播放| 精品国产三级电影在线观看| 色香色香欲天天天影视综合网| 免费精品视频在线| 亚洲精品视频在线观看网站| 精品国产露脸精彩对白| 欧美性高清videossexo| 成人福利电影精品一区二区在线观看| 亚洲成av人影院| 中文字幕一区二区三区四区不卡| 91精品午夜视频| 91国产丝袜在线播放| 国产福利一区二区| 麻豆精品精品国产自在97香蕉 | 欧美日韩一区二区在线观看| 成人国产亚洲欧美成人综合网| 日韩av电影天堂| 亚洲激情网站免费观看| 中文字幕av资源一区| 日韩欧美国产综合一区| 欧美特级限制片免费在线观看| 国产成人超碰人人澡人人澡| 老司机午夜精品99久久| 亚洲一区二区三区在线播放| 国产精品三级在线观看| 久久综合国产精品| 日韩一级视频免费观看在线| 欧美性生活久久| 一本到三区不卡视频| 99r国产精品| 99久久亚洲一区二区三区青草| 国产激情视频一区二区在线观看| 蜜桃久久av一区| 秋霞午夜av一区二区三区| 午夜精品久久久久久久99水蜜桃| 一区二区三区不卡视频| 亚洲自拍欧美精品| 一区二区三区在线播| 亚洲综合区在线| 亚洲综合清纯丝袜自拍| 亚洲国产精品自拍| 三级精品在线观看| 日本大胆欧美人术艺术动态| 日韩av二区在线播放| 日本sm残虐另类| 国产一区在线观看麻豆| 国产麻豆视频一区二区| 国产69精品久久久久毛片| 高清成人在线观看| 91在线国产福利| 欧美在线免费观看亚洲| 欧美二区三区91| 亚洲精品一线二线三线无人区| 国产亚洲短视频| 1区2区3区国产精品| 亚洲自拍与偷拍| 日本不卡视频一二三区| 国产麻豆视频一区二区| 成人做爰69片免费看网站| 色呦呦国产精品| 欧美一区二区精美| 中文字幕免费一区| 一区二区三区四区视频精品免费| 亚洲自拍偷拍麻豆| 久久国产精品99精品国产| 成人综合婷婷国产精品久久蜜臀| 色婷婷亚洲婷婷| 日韩欧美的一区| 亚洲欧美日韩国产另类专区| 午夜在线成人av| 国产一区啦啦啦在线观看| 91麻豆产精品久久久久久| 欧美一区二区免费观在线| 中文字幕二三区不卡| 午夜精品久久久久久久蜜桃app| 国内久久精品视频| 欧美性一级生活| 国产日韩欧美a| 日本不卡免费在线视频| 99久久精品免费看国产| 日韩西西人体444www| 亚洲欧美综合网| 极品美女销魂一区二区三区| 91年精品国产| 国产欧美一区二区精品忘忧草 | 国产黄色成人av|