WPILibC++  2019.1.1-beta-2-28-g9903348
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
util.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2018 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #ifndef WPIUTIL_WPI_UV_UTIL_H_
9 #define WPIUTIL_WPI_UV_UTIL_H_
10 
11 #include <uv.h>
12 
13 #include <cstring>
14 
15 #include "wpi/Twine.h"
16 
17 namespace wpi {
18 namespace uv {
19 
27 template <typename T>
28 int AddrToName(const sockaddr_in& addr, T* ip, unsigned int* port) {
29  char name[128];
30  int err = uv_ip4_name(&addr, name, 128);
31  if (err == 0) {
32  ip->assign(name, name + std::strlen(name));
33  *port = ntohs(addr.sin_port);
34  } else {
35  ip->assign(name, name);
36  }
37  return err;
38 }
39 
47 template <typename T>
48 int AddrToName(const sockaddr_in6& addr, T* ip, unsigned int* port) {
49  char name[128];
50  int err = uv_ip6_name(&addr, name, 128);
51  if (err == 0) {
52  ip->assign(name, name + std::strlen(name));
53  *port = ntohs(addr.sin6_port);
54  } else {
55  ip->assign(name, name);
56  }
57  return err;
58 }
59 
66 template <typename T>
67 int AddrToName(const in_addr& addr, T* ip) {
68  char name[128];
69  int err = uv_inet_ntop(AF_INET, &addr, name, 128);
70  if (err == 0)
71  ip->assign(name, name + std::strlen(name));
72  else
73  ip->assign(name, name);
74  return err;
75 }
76 
83 template <typename T>
84 int AddrToName(const in6_addr& addr, T* ip) {
85  char name[128];
86  int err = uv_inet_ntop(AF_INET6, &addr, name, 128);
87  if (err == 0)
88  ip->assign(name, name + std::strlen(name));
89  else
90  ip->assign(name, name);
91  return err;
92 }
93 
101 int NameToAddr(const Twine& ip, unsigned int port, sockaddr_in* addr);
102 
110 int NameToAddr(const Twine& ip, unsigned int port, sockaddr_in6* addr);
111 
118 int NameToAddr(const Twine& ip, in_addr* addr);
119 
126 int NameToAddr(const Twine& ip, in6_addr* addr);
127 
128 } // namespace uv
129 } // namespace wpi
130 
131 #endif // WPIUTIL_WPI_UV_UTIL_H_
WPILib C++ utilities (wpiutil) namespace.
Definition: SmallString.h:21