📄 rvaddress.h
字号:
/***********************************************************************
Filename : rvaddress.h
Description: rvaddress header file
************************************************************************
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: Address}
{superpackage: CUtils}
{include: rvaddress.h}
{description:
{p: This module provides functions for creating and manipulating
network addresses.}
{p: Try to use non-protocol specific functions as much as
possible to allow for easier porting to other (and future)
protocols.}
}
}
$*/
#ifndef RV_ADDRESS_H
#define RV_ADDRESS_H
#include "rvtypes.h"
/* Support address types. */
#define RV_ADDRESS_TYPE_NONE RvIntConst(0)
#define RV_ADDRESS_TYPE_IPV4 RvIntConst(1)
#define RV_ADDRESS_TYPE_IPV6 RvIntConst(2)
/* IPV4 definitions */
#define RV_ADDRESS_IPV4_STRINGSIZE 16 /* Max size of IPV4 address string */
#define RV_ADDRESS_IPV4_ADDRSIZE 4 /* Size of IPV4 address */
#define RV_ADDRESS_IPV4_ANYADDRESS RvUint32Const(0)
#define RV_ADDRESS_IPV4_BROADCAST RvUint32Const(0xFFFFFFFF)
#define RV_ADDRESS_IPV4_ANYPORT RvUint16Const(0)
typedef struct {
RvUint32 ip; /* 4 byte IP address, network format */
RvUint16 port; /* 2 byte port number, host format */
} RvAddressIpv4;
/* IPV6 definitions */
#define RV_ADDRESS_IPV6_STRINGSIZE 46 /* Max size of IPV6 address string */
#define RV_ADDRESS_IPV6_ADDRSIZE 16 /* Size of IPV6 address */
#define RV_ADDRESS_IPV6_ANYPORT RvUint16Const(0)
typedef struct {
RvUint8 ip[16]; /* 16 byte IP address, network format */
RvUint16 port; /* 2 byte port number, host format */
} RvAddressIpv6;
typedef struct
{
RvInt addrtype; /* Address type */
union
{
/* One for each address type supported. */
RvAddressIpv4 ipv4;
RvAddressIpv6 ipv6;
} data;
} RvAddress;
/* For comparisons */
#define RV_ADDRESS_FULLADDRESS RvIntConst(0) /* Compare entire address. */
#define RV_ADDRESS_BASEADDRESS RvIntConst(1) /* Compare only the base address */
/* Combined Constants */
#define RV_ADDRESS_MAXSTRINGSIZE RV_ADDRESS_IPV6_STRINGSIZE /* Max size of any address string */
#define RV_ADDRESS_MAXADDRSIZE RV_ADDRESS_IPV6_ADDRSIZE /* Max address size of any address. */
#if defined(__cplusplus)
extern "C" {
#endif
/* Prototypes and macros: See documentation blocks below for details. */
RVCOREAPI RvAddress * RVCALLCONV RvAddressConstruct(RvAddress *addr, RvInt addrtype);
RVCOREAPI RvInt RVCALLCONV RvAddressGetType(const RvAddress *addr);
RvAddress *RvAddressCopy(RvAddress *result, const RvAddress *source);
RvBool RvAddressCompare(const RvAddress *addr1, const RvAddress *addr2, RvInt comparetype);
RVCOREAPI RvChar * RVCALLCONV RvAddressGetString(const RvAddress *addr, RvChar *buf, RvSize_t bufsize);
RVCOREAPI RvAddress * RVCALLCONV RvAddressSetString(RvAddress *addr, const RvChar *buf);
#define RvAddressDestruct(_a)
#define RvAddressChangeType(_a, _t) RvAddressConstruct((_a), (_t))
/* IPV4 and IPV6 Utility functions. */
RVCOREAPI RvUint16 RVCALLCONV RvAddressGetIpPort(const RvAddress *addr);
RVCOREAPI RvAddress * RVCALLCONV RvAddressSetIpPort(RvAddress *addr, RvUint16 port);
RVCOREAPI RvBool RVCALLCONV RvAddressIsMulticastIp(const RvAddress *addr);
RVCOREAPI RvAddress * RVCALLCONV RvAddressConstructIpv4(RvAddress *addr, RvUint32 ip, RvUint16 port);
RvAddress *RvAddressConstructIpv6(RvAddress *addr, const RvUint8 *ip, RvUint16 port);
RvChar *RvAddressIpv4ToString(RvChar *buf, RvSize_t bufsize, RvUint32 ip);
RvChar *RvAddressIpv6ToString(RvChar *buf, RvSize_t bufsize, const RvUint8 *ip);
RvBool RvAddressStringToIpv4(RvUint32 *ip, const RvChar *buf);
RvBool RvAddressStringToIpv6(RvUint8 *ip, const RvChar *buf);
#define RvAddressChangeTypeIpv4(_a, _i, _p) RvAddressConstructIpv4((_a), (_i), (_p))
#define RvAddressChangeTypeIpv6(_a, _i, _p) RvAddressConstructIpv6((_a), (_i), (_p))
/* IPV4 specific functions. Only use if absolutely necessary. */
RVCOREAPI const RvAddressIpv4 * RVCALLCONV RvAddressGetIpv4(const RvAddress *addr);
RvAddressIpv4 *RvAddressIpv4Construct(RvAddressIpv4 *addr, RvUint32 ip, RvUint16 port);
RvBool RvAddressIpv4Compare(const RvAddressIpv4 *addr1, const RvAddressIpv4 *addr2, RvInt comparetype);
RvChar *RvAddressIpv4GetString(const RvAddressIpv4 *addr, RvChar *buf, RvSize_t bufsize);
RvAddressIpv4 *RvAddressIpv4SetString(RvAddressIpv4 *addr, const RvChar *buf);
RVCOREAPI RvUint32 RVCALLCONV RvAddressIpv4GetIp(const RvAddressIpv4 *addr);
RVCOREAPI RvAddressIpv4 * RVCALLCONV RvAddressIpv4SetIp(RvAddressIpv4 *addr, RvUint32 ip);
RvUint16 RvAddressIpv4GetPort(const RvAddressIpv4 *addr);
RvAddressIpv4 *RvAddressIpv4SetPort(RvAddressIpv4 *addr, RvUint16 port);
RvBool RvAddressIpv4IsMulticast(const RvAddressIpv4 *addr);
/* IPV6 specific functions. Only use if absolutely necessary. */
const RvAddressIpv6 *RvAddressGetIpv6(const RvAddress *addr);
RvAddressIpv6 *RvAddressIpv6Construct(RvAddressIpv6 *addr, const RvUint8 *ip, RvUint16 port);
RvBool RvAddressIpv6Compare(const RvAddressIpv6 *addr1, const RvAddressIpv6 *addr2, RvInt comparetype);
RvChar *RvAddressIpv6GetString(const RvAddressIpv6 *addr, RvChar *buf, RvSize_t bufsize);
RvAddressIpv6 *RvAddressIpv6SetString(RvAddressIpv6 *addr, const RvChar *buf);
const RvUint8 *RvAddressIpv6GetIp(const RvAddressIpv6 *addr);
RvAddressIpv6 *RvAddressIpv6SetIp(RvAddressIpv6 *addr, const RvUint8 *ip);
RvUint16 RvAddressIpv6GetPort(const RvAddressIpv6 *addr);
RvAddressIpv6 *RvAddressIpv6SetPort(RvAddressIpv6 *addr, RvUint16 port);
RvBool RvAddressIpv6IsMulticast(const RvAddressIpv6 *addr);
#if defined(RV_TEST_CODE)
void RvAddressTest(void);
#endif /* RV_TEST_CODE */
#ifdef __cplusplus
}
#endif
#endif /* RV_ADDRESS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -