1
- use std:: ffi:: { c_int, c_void} ;
2
- use std:: ptr:: addr_of;
1
+ use std:: ffi:: c_int;
3
2
4
3
use ngx:: core;
5
4
use ngx:: ffi:: {
@@ -20,50 +19,38 @@ struct NgxHttpOrigDstCtx {
20
19
21
20
impl NgxHttpOrigDstCtx {
22
21
pub fn save ( & mut self , addr : & str , port : in_port_t , pool : & core:: Pool ) -> core:: NgxResult {
23
- let addr_data = pool. allocate_unaligned ( addr. len ( ) ) ?;
24
- unsafe { libc:: memcpy ( addr_data, addr. as_ptr ( ) as * const c_void , addr. len ( ) ) } ;
25
- self . orig_dst_addr . len = addr. len ( ) ;
26
- self . orig_dst_addr . data = addr_data as * mut u8 ;
22
+ self . orig_dst_addr = unsafe { ngx_str_t:: from_str ( pool. as_ptr ( ) , addr) } ;
27
23
28
24
let port_str = port. to_string ( ) ;
29
- let port_data = pool. allocate_unaligned ( port_str. len ( ) ) ?;
30
- unsafe {
31
- libc:: memcpy (
32
- port_data,
33
- port_str. as_bytes ( ) . as_ptr ( ) as * const c_void ,
34
- port_str. len ( ) ,
35
- )
36
- } ;
37
- self . orig_dst_port . len = port_str. len ( ) ;
38
- self . orig_dst_port . data = port_data as * mut u8 ;
25
+ self . orig_dst_port = unsafe { ngx_str_t:: from_str ( pool. as_ptr ( ) , & port_str) } ;
39
26
40
27
Ok ( core:: Status :: NGX_OK . into ( ) )
41
28
}
42
29
43
- pub unsafe fn bind_addr ( & self , v : * mut ngx_variable_value_t ) {
30
+ pub unsafe fn bind_addr ( & self , v : & mut ngx_variable_value_t ) {
44
31
if self . orig_dst_addr . len == 0 {
45
- ( * v ) . set_not_found ( 1 ) ;
32
+ v . set_not_found ( 1 ) ;
46
33
return ;
47
34
}
48
35
49
- ( * v ) . set_valid ( 1 ) ;
50
- ( * v ) . set_no_cacheable ( 0 ) ;
51
- ( * v ) . set_not_found ( 0 ) ;
52
- ( * v ) . set_len ( self . orig_dst_addr . len as u32 ) ;
53
- ( * v ) . data = self . orig_dst_addr . data ;
36
+ v . set_valid ( 1 ) ;
37
+ v . set_no_cacheable ( 0 ) ;
38
+ v . set_not_found ( 0 ) ;
39
+ v . set_len ( self . orig_dst_addr . len as u32 ) ;
40
+ v . data = self . orig_dst_addr . data ;
54
41
}
55
42
56
- pub unsafe fn bind_port ( & self , v : * mut ngx_variable_value_t ) {
43
+ pub unsafe fn bind_port ( & self , v : & mut ngx_variable_value_t ) {
57
44
if self . orig_dst_port . len == 0 {
58
- ( * v ) . set_not_found ( 1 ) ;
45
+ v . set_not_found ( 1 ) ;
59
46
return ;
60
47
}
61
48
62
- ( * v ) . set_valid ( 1 ) ;
63
- ( * v ) . set_no_cacheable ( 0 ) ;
64
- ( * v ) . set_not_found ( 0 ) ;
65
- ( * v ) . set_len ( self . orig_dst_port . len as u32 ) ;
66
- ( * v ) . data = self . orig_dst_port . data ;
49
+ v . set_valid ( 1 ) ;
50
+ v . set_no_cacheable ( 0 ) ;
51
+ v . set_not_found ( 0 ) ;
52
+ v . set_len ( self . orig_dst_port . len as u32 ) ;
53
+ v . data = self . orig_dst_port . data ;
67
54
}
68
55
}
69
56
@@ -185,8 +172,8 @@ unsafe fn ngx_get_origdst(
185
172
186
173
http_variable_get ! (
187
174
ngx_http_orig_dst_addr_variable,
188
- |request: & mut http:: Request , v: * mut ngx_variable_value_t, _: usize | {
189
- let ctx = request. get_module_ctx:: <NgxHttpOrigDstCtx >( & * addr_of! ( ngx_http_orig_dst_module ) ) ;
175
+ |request: & mut http:: Request , v: & mut ngx_variable_value_t, _: usize | {
176
+ let ctx = request. get_module_ctx:: <NgxHttpOrigDstCtx >( Module :: module ( ) ) ;
190
177
if let Some ( obj) = ctx {
191
178
ngx_log_debug_http!( request, "httporigdst: found context and binding variable" , ) ;
192
179
obj. bind_addr( v) ;
@@ -206,7 +193,7 @@ http_variable_get!(
206
193
Ok ( ( ip, port) ) => {
207
194
// create context,
208
195
// set context
209
- let new_ctx = request
196
+ let mut new_ctx = request
210
197
. pool( )
211
198
. allocate_with_cleanup:: <NgxHttpOrigDstCtx >( Default :: default ( ) ) ?;
212
199
@@ -216,10 +203,9 @@ http_variable_get!(
216
203
ip,
217
204
port,
218
205
) ;
219
- ( * new_ctx) . save( & ip, port, & request. pool( ) ) ?;
220
- ( * new_ctx) . bind_addr( v) ;
221
- request
222
- . set_module_ctx( new_ctx as * mut c_void, & * addr_of!( ngx_http_orig_dst_module) ) ;
206
+ new_ctx. as_mut( ) . save( & ip, port, & request. pool( ) ) ?;
207
+ new_ctx. as_mut( ) . bind_addr( v) ;
208
+ request. set_module_ctx( new_ctx, Module :: module( ) ) ;
223
209
}
224
210
}
225
211
core:: Status :: NGX_OK . into( )
@@ -228,8 +214,8 @@ http_variable_get!(
228
214
229
215
http_variable_get ! (
230
216
ngx_http_orig_dst_port_variable,
231
- |request: & mut http:: Request , v: * mut ngx_variable_value_t, _: usize | {
232
- let ctx = request. get_module_ctx:: <NgxHttpOrigDstCtx >( & * addr_of! ( ngx_http_orig_dst_module ) ) ;
217
+ |request: & mut http:: Request , v: & mut ngx_variable_value_t, _: usize | {
218
+ let ctx = request. get_module_ctx:: <NgxHttpOrigDstCtx >( Module :: module ( ) ) ;
233
219
if let Some ( obj) = ctx {
234
220
ngx_log_debug_http!( request, "httporigdst: found context and binding variable" , ) ;
235
221
obj. bind_port( v) ;
@@ -249,7 +235,7 @@ http_variable_get!(
249
235
Ok ( ( ip, port) ) => {
250
236
// create context,
251
237
// set context
252
- let new_ctx = request
238
+ let mut new_ctx = request
253
239
. pool( )
254
240
. allocate_with_cleanup:: <NgxHttpOrigDstCtx >( Default :: default ( ) ) ?;
255
241
@@ -259,10 +245,9 @@ http_variable_get!(
259
245
ip,
260
246
port,
261
247
) ;
262
- ( * new_ctx) . save( & ip, port, & request. pool( ) ) ?;
263
- ( * new_ctx) . bind_port( v) ;
264
- request
265
- . set_module_ctx( new_ctx as * mut c_void, & * addr_of!( ngx_http_orig_dst_module) ) ;
248
+ new_ctx. as_mut( ) . save( & ip, port, & request. pool( ) ) ?;
249
+ new_ctx. as_mut( ) . bind_port( v) ;
250
+ request. set_module_ctx( new_ctx, Module :: module( ) ) ;
266
251
}
267
252
}
268
253
core:: Status :: NGX_OK . into( )
0 commit comments