Example #1
0
void xdebug_xml_return_node(xdebug_xml_node* node, struct xdebug_str *output) {
  xdebug_str_addl(output, "<", 1, 0);
  xdebug_str_add(output, node->tag, 0);

  if (node->text && node->text->encode) {
    xdebug_xml_add_attribute_ex(node, "encoding", "base64", 0, 0);
  }
  if (node->attribute) {
    xdebug_xml_return_attribute(node->attribute, output);
  }
  xdebug_str_addl(output, ">", 1, 0);

  if (node->child) {
    xdebug_xml_return_node(node->child, output);
  }

  if (node->text) {
    xdebug_xml_return_text_node(node->text, output);
  }

  xdebug_str_addl(output, "</", 2, 0);
  xdebug_str_add(output, node->tag, 0);
  xdebug_str_addl(output, ">", 1, 0);

  if (node->next) {
    xdebug_xml_return_node(node->next, output);
  }
}
Example #2
0
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;
}
Example #3
0
void XDebugServer::sendMessage(xdebug_xml_node& xml) {
  auto const message = xdebug_xml_return_node(&xml);
  auto const message_len = message.size() + sizeof(XML_MSG_HEADER) - 1;

  log("-> %s\n\n", message.data());
  logFlush();

  StringBuffer buf;
  buf.append(static_cast<int64_t>(message_len));
  buf.append('\0');
  buf.append(XML_MSG_HEADER);
  buf.append(message);
  buf.append('\0');

  write(m_socket, buf.data(), buf.size());
  return;
}
Example #4
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();

  StringBuffer buf;
  buf.append(static_cast<int64_t>(msg_len));
  buf.append('\0');
  buf.append(XML_MSG_HEADER);
  buf.append(xml_message.d);
  buf.append('\0');

  write(m_socket, buf.data(), buf.size());
  return;
}
Example #5
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);
}