Exemplo n.º 1
0
Arquivo: rr.c Projeto: spease/hammer
const HParsedToken* act_cstr(const HParseResult *p) {
  dns_cstr_t *cs = H_ALLOC(dns_cstr_t);

  const HCountedArray *arr = H_CAST_SEQ(p->ast);
  uint8_t *ret = h_arena_malloc(arr->arena, sizeof(uint8_t)*arr->used);
  for (size_t i=0; i<arr->used; ++i)
    ret[i] = H_CAST_UINT(arr->elements[i]);
  assert(ret[arr->used-1] == '\0'); // XXX Is this right?! If so, shouldn't it be a validation?
  *cs = ret;

  return H_MAKE(dns_cstr_t, cs);
}
Exemplo n.º 2
0
static HParsedToken *act_bytes(const HParseResult *p, void *user)
{
    DNP3_Object *o = H_ALLOC(DNP3_Object);
    HCountedArray *a = H_CAST_SEQ(p->ast);
    size_t n = a->used;

    o->applid.len = n;
    o->applid.str = h_arena_malloc(p->arena, n+1);  // null-terminate

    for(size_t i=0; i<n; i++)
        o->applid.str[i] = H_CAST_UINT(a->elements[i]);
    o->applid.str[n] = '\0';

    return H_MAKE(DNP3_Object, o);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
const HParsedToken *act_bsfdig(const HParseResult *p)
{
    HParsedToken *res = H_MAKE_UINT(0);

    uint8_t c = H_CAST_UINT(p->ast);

    if(c >= 0x40 && c <= 0x5A) // A-Z
        res->uint = c - 0x41;
    else if(c >= 0x60 && c <= 0x7A) // a-z
        res->uint = c - 0x61 + 26;
    else if(c >= 0x30 && c <= 0x39) // 0-9
        res->uint = c - 0x30 + 52;
    else if(c == '+')
        res->uint = 62;
    else if(c == '/')
        res->uint = 63;

    return res;
}
Exemplo n.º 5
0
static HParsedToken *act_packed(const HParseResult *p, void *user)
{
    DNP3_Object *o = H_ALLOC(DNP3_Object);
    o->bit = H_CAST_UINT(p->ast);
    return H_MAKE(DNP3_Object, o);
}