pvAccessCPP 7.1.8
Loading...
Searching...
No Matches
inetAddressUtil.h
1
7#ifndef INETADDRESSUTIL_H_
8#define INETADDRESSUTIL_H_
9
10#include <vector>
11
12#include <osiSock.h>
13#include <shareLib.h>
14
15#include <pv/pvType.h>
16#include <pv/byteBuffer.h>
17
18namespace epics {
19namespace pvAccess {
20
21typedef std::vector<osiSockAddr> InetAddrVector;
22
23struct ifaceNode {
24 osiSockAddr addr,
25 peer,
26 bcast,
27 mask;
28 bool loopback,
29 validP2P,
30 validBcast;
31 ifaceNode();
32};
33typedef std::vector<ifaceNode> IfaceNodeVector;
34epicsShareFunc int discoverInterfaces(IfaceNodeVector &list, SOCKET socket, const osiSockAddr *pMatchAddr = 0);
35
41epicsShareFunc void encodeAsIPv6Address(epics::pvData::ByteBuffer* buffer, const osiSockAddr* address);
42
49epicsShareFunc bool decodeAsIPv6Address(epics::pvData::ByteBuffer* buffer, osiSockAddr* address);
50
56epicsShareFunc bool isMulticastAddress(const osiSockAddr* address);
57
66epicsShareFunc void getSocketAddressList(InetAddrVector& ret, const std::string & list, int defaultPort,
67 const InetAddrVector* appendList = NULL);
68
69epicsShareFunc std::string inetAddressToString(const osiSockAddr &addr,
70 bool displayPort = true, bool displayHex = false);
71
72/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
73
74// comparators for osiSockAddr
75
76struct comp_osiSock_lt {
77 bool operator()(const osiSockAddr& a, const osiSockAddr& b) const {
78 if(a.sa.sa_family<b.sa.sa_family) return true;
79 if((a.sa.sa_family==b.sa.sa_family)&&(a.ia.sin_addr.s_addr
80 <b.ia.sin_addr.s_addr)) return true;
81 if((a.sa.sa_family==b.sa.sa_family)&&(a.ia.sin_addr.s_addr
82 ==b.ia.sin_addr.s_addr)&&(a.ia.sin_port
83 <b.ia.sin_port)) return true;
84 return false;
85 }
86};
87
88}} // namespace epics::pvAccess
89
90#endif /* INETADDRESSUTIL_H_ */
bool decodeAsIPv6Address(epics::pvData::ByteBuffer *buffer, osiSockAddr *address)
Decode IPv6 address (as IPv4 address).
void encodeAsIPv6Address(epics::pvData::ByteBuffer *buffer, const osiSockAddr *address)
Encode IPv4 address as IPv6 address.
bool isMulticastAddress(const osiSockAddr *address)
Check if an IPv4 address is a multicast address.
void getSocketAddressList(InetAddrVector &ret, const std::string &list, int defaultPort, const InetAddrVector *appendList=NULL)
Parse space delimited addresss[:port] string and populate array of InetSocketAddress.
Copyright - See the COPYRIGHT that is included with this distribution.