varnish_sys/
validate.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use crate::ffi;
use crate::ffi::{
    director, req, sess, vcldir, vfp_ctx, vfp_entry, vrt_ctx, ws, DIRECTOR_MAGIC, REQ_MAGIC,
    SESS_MAGIC, VCLDIR_MAGIC, VCL_BACKEND, VFP_CTX_MAGIC, VFP_ENTRY_MAGIC, VRT_CTX_MAGIC, WS_MAGIC,
};
use crate::vcl::{DeliveryFilters, FetchFilters};

pub unsafe fn validate_vfp_ctx(ctxp: *mut vfp_ctx) -> &'static mut vfp_ctx {
    let val = ctxp.as_mut().unwrap();
    assert_eq!(val.magic, VFP_CTX_MAGIC);
    val
}

pub unsafe fn validate_vrt_ctx(ctxp: *const vrt_ctx) -> &'static vrt_ctx {
    let val = ctxp.as_ref().unwrap();
    assert_eq!(val.magic, VRT_CTX_MAGIC);
    val
}

pub unsafe fn validate_vfp_entry(vfep: *mut vfp_entry) -> &'static mut vfp_entry {
    let val = vfep.as_mut().unwrap();
    assert_eq!(val.magic, VFP_ENTRY_MAGIC);
    val
}

pub unsafe fn validate_director(be: VCL_BACKEND) -> &'static director {
    let val = be.0.as_ref().unwrap();
    assert_eq!(val.magic, DIRECTOR_MAGIC);
    val
}

pub unsafe fn validate_ws(wsp: *mut ws) -> &'static mut ws {
    let val = wsp.as_mut().unwrap();
    assert_eq!(val.magic, WS_MAGIC);
    val
}

pub unsafe fn validate_vdir(be: &director) -> &'static mut vcldir {
    let val = be.vdir.as_mut().unwrap();
    assert_eq!(val.magic, VCLDIR_MAGIC);
    val
}

impl vrt_ctx {
    pub fn validated_req(&mut self) -> &mut req {
        let val = unsafe { self.req.as_mut().unwrap() };
        assert_eq!(val.magic, REQ_MAGIC);
        val
    }

    pub fn fetch_filters<'c, 'f>(
        &'c self,
        filters: &'f mut Vec<Box<ffi::vfp>>,
    ) -> FetchFilters<'c, 'f> {
        FetchFilters::<'c, 'f>::new(self, filters)
    }

    pub fn delivery_filters<'c, 'f>(
        &'c self,
        filters: &'f mut Vec<Box<ffi::vdp>>,
    ) -> DeliveryFilters<'c, 'f> {
        DeliveryFilters::<'c, 'f>::new(self, filters)
    }
}

impl req {
    pub fn validated_session(&mut self) -> &sess {
        let val = unsafe { self.sp.as_ref().unwrap() };
        assert_eq!(val.magic, SESS_MAGIC);
        val
    }
}