int main(void) { FILE *f; int ret; char chars[10]; xmlParserCtxtPtr ctxt; xdebug_str message = {0, 0, NULL}; xdebug_xml_reader_priv data; data.level = 0; data.xml = NULL; data.current = NULL; f = fopen("test.xml", "r"); ctxt = xmlCreatePushParserCtxt(sax_handler_ptr, NULL, NULL, 0, "test"); ctxt->_private = &data; while ((ret = fread(chars, 1, 3, f)) > 0) { xmlParseChunk(ctxt, chars, ret, 0); } xmlParseChunk(ctxt, chars, 0, 1); xdebug_xml_return_node(data.xml, &message); xdebug_xml_node_dtor(data.xml); printf("%s\n", message.d); xdebug_str_dtor(message); xmlFreeParserCtxt(ctxt); fclose(f); xmlCleanupParser(); xmlMemoryDump(); return 0; }
void XDebugServer::sendMessage(xdebug_xml_node& xml) { // Convert xml to an xdebug_str xdebug_str xml_message = {0, 0, nullptr}; xdebug_xml_return_node(&xml, &xml_message); size_t msg_len = xml_message.l + sizeof(XML_MSG_HEADER) - 1; // Log the message log("-> %s\n\n", xml_message.d); logFlush(); // Format the message xdebug_str* message; xdebug_str_ptr_init(message); xdebug_str_add(message, xdebug_sprintf("%d", msg_len, 1), 1); xdebug_str_addl(message, "\0", 1, 0); xdebug_str_add(message, XML_MSG_HEADER, 0); xdebug_str_add(message, xml_message.d, 0); xdebug_str_addl(message, "\0", 1, 0); xdebug_str_dtor(xml_message); // Write the message write(m_socket, message->d, message->l); xdebug_str_ptr_dtor(message); }