⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvsocketaddr.h

📁 h.248协议源码
💻 H
字号:
/*****************************************************************************
Filename   : rvsocketaddr.h
Description: Socket address interface declaration.
******************************************************************************
                Copyright (c) 1999 RADVision Inc.
************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision Inc.
No part of this publication may be reproduced in any form whatsoever 
without written prior approval by RADVision Inc.

RADVision Inc. reserves the right to revise this publication and make 
changes without obligation to notify any person of such revisions or 
changes.
******************************************************************************
$Revision:$
$Date:$
$Author: S. Cipolli$
******************************************************************************/

#ifndef RV_SOCKETADDR_H
#define RV_SOCKETADDR_H

#include <stddef.h>
#include "rvplatform.h"
#include "rvtypes.h"
#include "rvhost.h"
#include "rvinet.h"
#include "rvalloc.h"

#if defined(RV_SOCKETS_NUCLEUS)
#include <nucleus.h>
#include <inc/nu_net.h>
#define sockaddr addr_struct
/* #define sa_len length */
#define sa_family family
#endif

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

#if defined(RV_INET_IPV6)
#define RV_SOCKADDR_MAXSIZE					24  /*IPv6*/
#else
#define RV_SOCKADDR_MAXSIZE					16  /*IPv4*/
#endif

/*$
{type scope="protected":
	{name: RvSocketAddrProtocol}
	{superpackage: Transport}	
	{include: rvsocketaddr.h}
    {description:	
		{p: This is an enumeration of protocol types. It is used by RvSocketAddr
            to flag what type of address is contained in it's address buffer.}
	}
    {enumeration:
        {value: {n: RV_SOCKETADDR_PROTOCOL_UNDEFINED} {d: The protocol is uninitiallized.}}
        {value: {n: RV_SOCKETADDR_PROTOCOL_IPV4}      {d: The protocol is IPv4 (i.e. AF_INET).}}
        {value: {n: RV_SOCKETADDR_PROTOCOL_IPV6}      {d: The protocol is IPv6 (i.e. AF_INET6).}}
        {value: {n: RV_SOCKETADDR_PROTOCOL_IPANYADDR} {d: The protocol is IP, but represents an 'any address'. The specific
                                                          protocol should be resolved at bind time.}}
        {value: {n: RV_SOCKETADDR_PROTOCOL_UNKNOWN}   {d: The protocol is not of a known type.}}
    }
    {see_also:
        {n:RvSocketAddr}
    }
}
$*/
typedef RvUint8 RvSocketAddrProtocol;
#define RV_SOCKETADDR_PROTOCOL_UNDEFINED	0
#define RV_SOCKETADDR_PROTOCOL_IPV4			1
#define RV_SOCKETADDR_PROTOCOL_IPV6			2
#define RV_SOCKETADDR_PROTOCOL_IPANYADDR    3
#define RV_SOCKETADDR_PROTOCOL_UNKNOWN		255


/*$
{type scope="protected":
	{name: RvSocketAddr}
	{superpackage: Transport}	
	{include: rvsocketaddr.h}
    {description:	
		{p: This class represents a generic socket address.}
	}
    {attributes scope="private":
        {attribute: {t: RvUint8[RV_SOCKADDR_MAXSIZE] } {n: address } 
                    {d: A buffer to hold the address.}}
        {attribute: {t: int } {n: length } 
                    {d: The length of the data in the address buffer.}}
        {attribute: {t: RvSocketAddrProtocol } {n: protocol } 
                    {d: The protocol of the address in the address buffer.}}
    }
	{methods:
		{method: RvSocketAddr* rvSocketAddrConstruct(RvSocketAddr* thisPtr);}
		{method: RvSocketAddr* rvSocketAddrConstructCopy(RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr, RvAlloc *allocatorPtr);}
		{method: void rvSocketAddrDestruct(RvSocketAddr* thisPtr);}
		{method: RvBool rvSocketAddrEqual(const RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr);}
		{method: RvSocketAddr* rvSocketAddrCopy(RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr);}
		{method: RvUint8* rvSocketAddrGetRawAddress(s)   (s)->address}
		{method: RvSocketAddrProtocol rvSocketAddrGetProtocol(RvSocketAddr* thisPtr);}
		{method: int rvSocketAddrGetAddressFamily(const RvSocketAddr* thisPtr);}
		{method: int rvSocketAddrGetLength(RvSocketAddr* thisPtr)       (s)->length}
		{method: void rvSocketAddrSetLength(RvSocketAddr* thisPtr,int length);}
		{method: RvAlloc rvSocketAddrGetAllocator(RvSocketAddr* thisPtr);}
		{method: int rvSocketAddrToFullString(const RvSocketAddr* thisPtr, char* str);}
		{method: void rvSocketAddrSetProtocolFromSockAddr(RvSocketAddr *thisPtr);}
		{method: size_t  rvSocketAddrHash(const RvSocketAddr *addr);}
		{method: RvSocketAddr* rvSocketAddrConstructInet(RvSocketAddr* thisPtr, RvHost* h, size_t n, RvInetPort port);}
		{method: RvSocketAddr* rvSocketAddrConstructInetByName(RvSocketAddr* thisPtr,  const char *dnsOrIp, RvInetPort port);}
		{method: RvSocketAddr* rvSocketAddrConstructInetAnyAddr(RvSocketAddr* thisPtr, RvInetPort port);}
		{method: RvInetPort rvSocketAddrGetInetPort(const RvSocketAddr* thisPtr);}
		{method: void  rvSocketAddrSetInetPort(RvSocketAddr* addr,RvInetPort port);}
		{method: char* rvSocketAddrToString(const RvSocketAddr* thisPtr, char* str);}
		{method: RvBool rvSocketAddrIsMulticast(const RvSocketAddr* thisPtr);}
		{method: RvSocketAddr* rvSocketAddrConstructIpv4(RvSocketAddr* thisPtr, RvIpv4Addr* ipv4, RvInetPort port);}
		{method: RvIpv4Addr* rvSocketAddrGetIpv4Addr(const RvSocketAddr* thisPtr);}
		{method: RvSocketAddr* rvSocketAddrConstructIpv6(RvSocketAddr* addr, RvIpv6Addr* ipv6, RvInetPort port);}
		{method: RvIpv6Addr* rvSocketAddrGetIpv6Addr(const RvSocketAddr* addr);}
		{method: RvBool rvSocketAddrGetIpv6FlowInfo(const RvSocketAddr* addr,RvUint32* flowInfo);}
		{method: RvBool rvSocketAddrSetIpv6FlowInfo(const RvSocketAddr* addr,RvUint32 flowInfo);}
    }
    {see_also:
        {n:RvSocketAddrProtocol}
    }
}
$*/
typedef struct {
    RvUint8  address[RV_SOCKADDR_MAXSIZE];
#if defined(RV_SOCKETS_NUCLEUS)
	INT16    length;
#else
	int      length;
#endif
	RvSocketAddrProtocol protocol;
} RvSocketAddr;

/* Construction/Destruction */
RvSocketAddr* rvSocketAddrConstruct(RvSocketAddr* thisPtr);
RvSocketAddr* rvSocketAddrConstructCopy(RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr, RvAlloc *allocatorPtr);
#define       rvSocketAddrDestruct(a)

/* Operators */
RvBool        rvSocketAddrEqual(const RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr);
RvSocketAddr* rvSocketAddrCopy(RvSocketAddr *thisPtr, const RvSocketAddr *srcPtr);

/* Generic Accessors */
#define       rvSocketAddrGetRawAddress(s)   (s)->address
#define       rvSocketAddrGetProtocol(s)     (s)->protocol
int           rvSocketAddrGetAddressFamily(const RvSocketAddr* thisPtr);
#define       rvSocketAddrGetLength(s)       (s)->length
#define       rvSocketAddrSetLength(s,l)     (s)->length = (l)
#define       rvSocketAddrGetAllocator(s)    NULL
int           rvSocketAddrToFullString(const RvSocketAddr* thisPtr, char* str);

/* Generic Utilities */
void          rvSocketAddrSetProtocolFromSockAddr(RvSocketAddr *thisPtr);
size_t        rvSocketAddrHash(const RvSocketAddr *addr);

/* IP extensions */
RvSocketAddr* rvSocketAddrConstructInet(RvSocketAddr* thisPtr, RvHost* h,  
                                        size_t n, RvInetPort port);
RvSocketAddr* rvSocketAddrConstructInetByName(RvSocketAddr* thisPtr,  const char *dnsOrIp, RvInetPort port);
RvSocketAddr* rvSocketAddrConstructInetAnyAddr(RvSocketAddr* thisPtr, RvInetPort port);
RvInetPort    rvSocketAddrGetInetPort(const RvSocketAddr* thisPtr);
void          rvSocketAddrSetInetPort(RvSocketAddr* addr,RvInetPort port);
char*         rvSocketAddrToString(const RvSocketAddr* thisPtr, char* str);
RvBool        rvSocketAddrIsMulticast(const RvSocketAddr* thisPtr);

/* IPv4 extensions */
RvSocketAddr* rvSocketAddrConstructIpv4(RvSocketAddr* thisPtr, RvIpv4Addr* ipv4, RvInetPort port);
RvIpv4Addr*   rvSocketAddrGetIpv4Addr(const RvSocketAddr* thisPtr);

/* IPv6 extensions */
#if defined(RV_INET_IPV6)
RvSocketAddr* rvSocketAddrConstructIpv6(RvSocketAddr* addr, RvIpv6Addr* ipv6, RvInetPort port);
RvIpv6Addr*   rvSocketAddrGetIpv6Addr(const RvSocketAddr* addr);
RvBool        rvSocketAddrGetIpv6FlowInfo(const RvSocketAddr* addr,RvUint32* flowInfo);
RvBool        rvSocketAddrSetIpv6FlowInfo(const RvSocketAddr* addr,RvUint32 flowInfo);
#endif


#if defined(__cplusplus)
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -