1
+ module LibUVExtensions
2
+
3
+
4
+ # #
5
+ #
6
+ # These functions are generated from Julia's LibUV
7
+ # (https://github.com/libuv/libuv) using Clang.jl -- taking only those functions
8
+ # needed by this module
9
+ #
10
+ # Note: _Some_ of Julia's LibUV prefixes uv_* symbols with jl_*. Eg.:
11
+ # uv_interface_addresses becomes: jl_uv_interface_addresses
12
+ # (but not all!)
13
+ #
14
+ # #
15
+
16
+
17
+ using CEnum
18
+
19
+ const sa_family_t = Cushort
20
+
21
+ const in_port_t = UInt16
22
+
23
+ const in_addr_t = UInt32
24
+
25
+ struct in_addr
26
+ s_addr:: in_addr_t
27
+ end
28
+
29
+ struct sockaddr_in
30
+ sin_family:: sa_family_t
31
+ sin_port:: in_port_t
32
+ sin_addr:: in_addr
33
+ sin_zero:: NTuple{8, Cuchar}
34
+ end
35
+
36
+ struct sockaddr_in6
37
+ data:: NTuple{28, UInt8}
38
+ end
39
+
40
+ function Base. getproperty (x:: Ptr{sockaddr_in6} , f:: Symbol )
41
+ f === :sin6_family && return Ptr {sa_family_t} (x + 0 )
42
+ f === :sin6_port && return Ptr {in_port_t} (x + 2 )
43
+ f === :sin6_flowinfo && return Ptr {UInt32} (x + 4 )
44
+ f === :sin6_addr && return Ptr {in6_addr} (x + 8 )
45
+ f === :sin6_scope_id && return Ptr {UInt32} (x + 24 )
46
+ return getfield (x, f)
47
+ end
48
+
49
+ function Base. getproperty (x:: sockaddr_in6 , f:: Symbol )
50
+ r = Ref {sockaddr_in6} (x)
51
+ ptr = Base. unsafe_convert (Ptr{sockaddr_in6}, r)
52
+ fptr = getproperty (ptr, f)
53
+ GC. @preserve r unsafe_load (fptr)
54
+ end
55
+
56
+ function Base. setproperty! (x:: Ptr{sockaddr_in6} , f:: Symbol , v)
57
+ unsafe_store! (getproperty (x, f), v)
58
+ end
59
+
60
+ struct var"##Ctag#362"
61
+ data:: NTuple{28, UInt8}
62
+ end
63
+
64
+ function Base. getproperty (x:: Ptr{var"##Ctag#362"} , f:: Symbol )
65
+ f === :address4 && return Ptr {sockaddr_in} (x + 0 )
66
+ f === :address6 && return Ptr {sockaddr_in6} (x + 0 )
67
+ return getfield (x, f)
68
+ end
69
+
70
+ function Base. getproperty (x:: var"##Ctag#362" , f:: Symbol )
71
+ r = Ref {var"##Ctag#362"} (x)
72
+ ptr = Base. unsafe_convert (Ptr{var"##Ctag#362" }, r)
73
+ fptr = getproperty (ptr, f)
74
+ GC. @preserve r unsafe_load (fptr)
75
+ end
76
+
77
+ function Base. setproperty! (x:: Ptr{var"##Ctag#362"} , f:: Symbol , v)
78
+ unsafe_store! (getproperty (x, f), v)
79
+ end
80
+
81
+ struct var"##Ctag#363"
82
+ data:: NTuple{28, UInt8}
83
+ end
84
+
85
+ function Base. getproperty (x:: Ptr{var"##Ctag#363"} , f:: Symbol )
86
+ f === :netmask4 && return Ptr {sockaddr_in} (x + 0 )
87
+ f === :netmask6 && return Ptr {sockaddr_in6} (x + 0 )
88
+ return getfield (x, f)
89
+ end
90
+
91
+ function Base. getproperty (x:: var"##Ctag#363" , f:: Symbol )
92
+ r = Ref {var"##Ctag#363"} (x)
93
+ ptr = Base. unsafe_convert (Ptr{var"##Ctag#363" }, r)
94
+ fptr = getproperty (ptr, f)
95
+ GC. @preserve r unsafe_load (fptr)
96
+ end
97
+
98
+ function Base. setproperty! (x:: Ptr{var"##Ctag#363"} , f:: Symbol , v)
99
+ unsafe_store! (getproperty (x, f), v)
100
+ end
101
+
102
+ struct uv_interface_address_s
103
+ data:: NTuple{80, UInt8}
104
+ end
105
+
106
+ function Base. getproperty (x:: Ptr{uv_interface_address_s} , f:: Symbol )
107
+ f === :name && return Ptr {Ptr{Cchar}} (x + 0 )
108
+ f === :phys_addr && return Ptr {NTuple{6, Cchar}} (x + 8 )
109
+ f === :is_internal && return Ptr {Cint} (x + 16 )
110
+ f === :address && return Ptr {var"##Ctag#362"} (x + 20 )
111
+ f === :netmask && return Ptr {var"##Ctag#363"} (x + 48 )
112
+ return getfield (x, f)
113
+ end
114
+
115
+ function Base. getproperty (x:: uv_interface_address_s , f:: Symbol )
116
+ r = Ref {uv_interface_address_s} (x)
117
+ ptr = Base. unsafe_convert (Ptr{uv_interface_address_s}, r)
118
+ fptr = getproperty (ptr, f)
119
+ GC. @preserve r unsafe_load (fptr)
120
+ end
121
+
122
+ function Base. setproperty! (x:: Ptr{uv_interface_address_s} , f:: Symbol , v)
123
+ unsafe_store! (getproperty (x, f), v)
124
+ end
125
+
126
+ const uv_interface_address_t = uv_interface_address_s
127
+
128
+ function uv_interface_addresses (addresses, count)
129
+ ccall (:jl_uv_interface_addresses , Cint, (Ptr{Ptr{uv_interface_address_t}}, Ptr{Cint}), addresses, count)
130
+ end
131
+
132
+ function uv_free_interface_addresses (addresses, count)
133
+ ccall (:uv_free_interface_addresses , Cvoid, (Ptr{uv_interface_address_t}, Cint), addresses, count)
134
+ end
135
+
136
+ end
0 commit comments