static HParsedToken *act_notime(const HParseResult *p, void *user) { DNP3_Object *o = H_ALLOC(DNP3_Object); // p = (cs, status) o->cmdev.status = H_FIELD_UINT(0); o->cmdev.cs = H_FIELD_UINT(1); return H_MAKE(DNP3_Object, o); }
static HParsedToken *act_ctr_flag_time(const HParseResult *p, void *user) { DNP3_Object *o = H_ALLOC(DNP3_Object); // p = (flags, value) o->timed.ctr.flags = H_FIELD(DNP3_Object, 0)->flags; o->timed.ctr.value = H_FIELD_UINT(1); o->timed.abstime = H_FIELD_UINT(2); return H_MAKE(DNP3_Object, o); }
const HParsedToken* act_wks(const HParseResult *p) { dns_rr_wks_t *wks = H_ALLOC(dns_rr_wks_t); wks->address = H_FIELD_UINT(0); wks->protocol = H_FIELD_UINT(1); wks->len = H_FIELD_SEQ(2)->used; wks->bit_map = h_arena_malloc(p->arena, sizeof(uint8_t)*wks->len); for (size_t i=0; i<wks->len; ++i) wks->bit_map[i] = H_INDEX_UINT(p->ast, 2, i); return H_MAKE(dns_rr_wks_t, wks); }
const HParsedToken* act_soa(const HParseResult *p) { dns_rr_soa_t *soa = H_ALLOC(dns_rr_soa_t); soa->mname = *H_FIELD(dns_domain_t, 0); soa->rname = *H_FIELD(dns_domain_t, 1); soa->serial = H_FIELD_UINT(2); soa->refresh = H_FIELD_UINT(3); soa->retry = H_FIELD_UINT(4); soa->expire = H_FIELD_UINT(5); soa->minimum = H_FIELD_UINT(6); return H_MAKE(dns_rr_soa_t, soa); }
const HParsedToken* act_mx(const HParseResult *p) { dns_rr_mx_t *mx = H_ALLOC(dns_rr_mx_t); mx->preference = H_FIELD_UINT(0); mx->exchange = *H_FIELD(dns_domain_t, 1); return H_MAKE(dns_rr_mx_t, mx); }
static HParsedToken *act_segment(const HParseResult *p, void *user) { DNP3_Segment *s = H_ALLOC(DNP3_Segment); s->fin = H_FIELD_UINT(0, 0); s->fir = H_FIELD_UINT(0, 1); s->seq = H_FIELD_UINT(0, 2); HCountedArray *a = H_FIELD_SEQ(1); s->len = a->used; s->payload = h_arena_malloc(p->arena, s->len); assert(s->payload != NULL); for(size_t i=0; i<s->len; i++) { s->payload[i] = H_CAST_UINT(a->elements[i]); } return H_MAKE(DNP3_Segment, s); }
const HParsedToken *act_null(const HParseResult *p) { dns_rr_null_t *null = H_ALLOC(dns_rr_null_t); size_t len = h_seq_len(p->ast); uint8_t *buf = h_arena_malloc(p->arena, sizeof(uint8_t)*len); for (size_t i=0; i<len; ++i) buf[i] = H_FIELD_UINT(i); return H_MAKE(dns_rr_null_t, null); }
static HParsedToken *act_crob(const HParseResult *p, void *user) { DNP3_Object *o = H_ALLOC(DNP3_Object); // p = (optype,qu,cr,tcc,count,on,off,status) o->cmd.optype = H_FIELD_UINT(0); o->cmd.queue = H_FIELD_UINT(1); o->cmd.clear = H_FIELD_UINT(2); o->cmd.tcc = H_FIELD_UINT(3); o->cmd.count = H_FIELD_UINT(4); o->cmd.on = H_FIELD_UINT(5); o->cmd.off = H_FIELD_UINT(6); o->cmd.status = H_FIELD_UINT(7); return H_MAKE(DNP3_Object, o); }
static HParsedToken *act_flags(const HParseResult *p, void *user) { DNP3_Object *o = H_ALLOC(DNP3_Object); o->flags.online = H_FIELD_UINT(0); o->flags.restart = H_FIELD_UINT(1); o->flags.comm_lost = H_FIELD_UINT(2); o->flags.remote_forced = H_FIELD_UINT(3); o->flags.local_forced = H_FIELD_UINT(4); o->flags.discontinuity = H_FIELD_UINT(5); return H_MAKE(DNP3_Object, o); }