Exemplo n.º 1
0
int xml_script_reader_parse(script_t *script) {
    assert(_p_xml_reader);

    /* init list of playlets */
    int idx = 0;
    text_t *cur_text = NULL;
    ptrlist_init(&(script->texts));

    int            ret;
    int            element_type = XML_READER_TYPE_NONE;
    unsigned char *element_name = '\0';


    ret = xmlTextReaderRead(_p_xml_reader);
    while (ret == 1) {
        element_type = xmlTextReaderNodeType(_p_xml_reader);

        if (XML_READER_TYPE_ELEMENT == element_type) {
            element_name = xmlTextReaderLocalName(_p_xml_reader);

            if(!strcmp(XML_POINTER_ELE, (const char *) element_name)) {

                /* starting new text */
                cur_text = text_init();

                /* setting pointer index value. */
                cur_text->pointer_idx = idx++;

                /* setting cpu address value. */
                readPointerAddressAttr(&(cur_text->cpu_address));
            }

            xmlFree(element_name);
        }
        else if (XML_READER_TYPE_END_ELEMENT == element_type) {
            element_name = xmlTextReaderLocalName(_p_xml_reader);

            if(!strcmp(XML_POINTER_ELE, (const char *) element_name)) {
                /* end of text*/
                if(NULL != cur_text)
                    ptrlist_add(&(script->texts), cur_text);
                cur_text = NULL;
            }

            xmlFree(element_name);
        }
        else if (XML_READER_TYPE_CDATA == element_type && NULL != cur_text) {

            readPointerCData(&(cur_text->u8srt));

        }

        ret = xmlTextReaderRead(_p_xml_reader);
    }

    return 0;

}
Exemplo n.º 2
0
static int axfr_query_init(struct query_data *qdata)
{
	assert(qdata);

	/* Check AXFR query validity. */
	int state = axfr_query_check(qdata);
	if (state == KNOT_NS_PROC_FAIL) {
		if (qdata->rcode == KNOT_RCODE_FORMERR) {
			return KNOT_EMALF;
		} else {
			return KNOT_EDENIED;
		}
	}

	/* Create transfer processing context. */
	mm_ctx_t *mm = qdata->mm;

	zone_contents_t *zone = qdata->zone->contents;
	struct axfr_proc *axfr = mm_alloc(mm, sizeof(struct axfr_proc));
	if (axfr == NULL) {
		return KNOT_ENOMEM;
	}
	memset(axfr, 0, sizeof(struct axfr_proc));
	init_list(&axfr->proc.nodes);

	/* Put data to process. */
	gettimeofday(&axfr->proc.tstamp, NULL);
	ptrlist_add(&axfr->proc.nodes, zone->nodes, mm);
	/* Put NSEC3 data if exists. */
	if (!zone_tree_is_empty(zone->nsec3_nodes)) {
		ptrlist_add(&axfr->proc.nodes, zone->nsec3_nodes, mm);
	}

	/* Set up cleanup callback. */
	qdata->ext = axfr;
	qdata->ext_cleanup = &axfr_query_cleanup;

	/* No zone changes during multipacket answer
	   (unlocked in axfr_answer_cleanup) */
	rcu_read_lock();

	return KNOT_EOK;
}
Exemplo n.º 3
0
__private_extern__ boolean_t
ptrlist_insert(ptrlist_t * list, void * element, int where)
{
    if (where < 0)
	return (FALSE);

    if (where >= list->count)
	return (ptrlist_add(list, element));

    if (ptrlist_grow(list) == FALSE)
	return (FALSE);

    /* open up a space for 1 element */
    bcopy(list->array + where,
	  list->array + where + 1,
	  (list->count - where) * sizeof(*list->array));
    list->array[where] = element;
    list->count++;
    return (TRUE);

}
Exemplo n.º 4
0
STATIC void
parse_nd_options(ptrlist_t * options_p, const char * buf, int len)
{
    int				left = len;
    const struct nd_opt_hdr *	opt;
    int				opt_len = 0;
    const char *		scan;

    ptrlist_init(options_p);
    
    for (scan = buf; left >= sizeof(*opt); ) {
	opt = (struct nd_opt_hdr *)scan;
	opt_len = opt->nd_opt_len * ND_OPT_ALIGN;
	if (opt_len > left) {
	    /* truncated packet */
	    ptrlist_free(options_p);
	    break;
	}
	ptrlist_add(options_p, (void *)opt);
	scan += opt_len;
	left -= opt_len;
    }
    return;
}
Exemplo n.º 5
0
/*
 * Functions: dhcpol_* 
 *
 * Purpose:
 *   Routines to parse/access existing options buffers.
 */
boolean_t
dhcpol_add(dhcpol_t * list, void * element)
{
    return (ptrlist_add((ptrlist_t *)list, element));
}