📄 rvsocketaddr.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 + -