Ejemplo n.º 1
0
void cg_xml_node_addchildnode(CgXmlNode *node, CgXmlNode *cnode)
{
	cg_log_debug_l4("Entering...\n");

	cg_xml_nodelist_add(node->nodeList, cnode);
	cg_xml_node_setparentnode(cnode, node);

	cg_log_debug_l4("Leaving...\n");
}
Ejemplo n.º 2
0
void cg_upnp_control_soap_request_initializeenvelopenode(CgSoapRequest *soapReq)
{
	CgXmlNodeList *rootNodeList;
	CgHttpRequest *httpReq;

	cg_log_debug_l4("Entering...\n");

	rootNodeList = cg_soap_request_getrootnoodelist(soapReq);
	cg_xml_nodelist_add(rootNodeList, cg_soap_createenvelopebodynode());

	httpReq = cg_soap_request_gethttprequest(soapReq);
	cg_http_request_setcontenttype(httpReq, CG_SOAP_CONTENT_TYPE);

	cg_log_debug_l4("Leaving...\n");
}
BOOL cg_xml_parse(CgXmlParser *parser, CgXmlNodeList *nodeList, const char *data, size_t len)
{
#if defined DEBUG_XML_RESULT
    CgString* resdata = NULL;
#endif
    XML_Parser p;
    CgExpatData expatData;
#ifdef CG_SHOW_TIMINGS
    struct timeval start_time, end_time, elapsed_time;
#endif

    cg_log_debug_l4("Entering...\n");

#ifdef CG_SHOW_TIMINGS
    gettimeofday(&start_time, NULL);
#endif

    if (!data || len <= 0)
        return FALSE;

    p = XML_ParserCreate(NULL);
    if (!p)
        return FALSE;
    /* Fix to get expat parser to work with DLink-routers */
    if (data[len-1] == 0) len--;

    expatData.rootNode = NULL;
    expatData.currNode = NULL;
    XML_SetUserData(p, &expatData);
    XML_SetElementHandler(p, cg_expat_element_start, cg_expat_element_end);
    XML_SetCharacterDataHandler(p, cg_expat_character_data);

    parser->parseResult = XML_Parse(p, data, len, 1);
    XML_ParserFree(p);

    if (parser->parseResult == 0 /*XML_STATUS_ERROR*/) {
        if (expatData.rootNode != NULL)
            cg_xml_node_delete(expatData.rootNode);
#if defined DEBUG_XML_RESULT
            resdata = cg_string_new();
            cg_string_naddvalue(resdata,data,len);
            printf("XML parse Error on data %s\n time used = %ds\n",
                cg_string_getvalue(resdata),
                time(NULL)-startTime);
            cg_string_delete(resdata);
#endif
            return FALSE;
    }

    cg_xml_nodelist_add(nodeList, expatData.rootNode);

#ifdef CG_SHOW_TIMINGS
    gettimeofday(&end_time, NULL);
    timersub(&end_time, &start_time, &elapsed_time);
cg_log_debug_s("Parsing XML completed. Elapsed time: "
           "%ld msec\n", ((elapsed_time.tv_sec*1000) +
                  (elapsed_time.tv_usec/1000)));
    cg_total_elapsed_time += (elapsed_time.tv_sec*1000000)+
                 (elapsed_time.tv_usec);
cg_log_debug_s("Total elapsed time: %ld msec\n", cg_total_elapsed_time / 1000);
#endif

#if defined DEBUG_XML_RESULT
            resdata = cg_string_new();
            cg_string_naddvalue(resdata,data,len);
            printf("XML parse success - time used %ds\n",time(NULL)-startTime);
            cg_string_delete(resdata);
#endif

    return TRUE;

    cg_log_debug_l4("Leaving...\n");
}