Example #1
0
int main(int argc, char* argv[])
{
	XmlParser* thiz = xml_parser_create();
	XmlBuilder* builder = xml_builder_tree_create();

	xml_parser_set_builder(thiz, builder);

	if(argc > 1)
	{
		char* buffer = read_file(argv[1]);
		xml_parser_parse(thiz, buffer);
		free(buffer);
	}

	XmlNode* tree = xml_builder_get_tree(builder);
	dump_tree(tree);
	xml_node_destroy(tree);

	xml_builder_destroy(builder);
	xml_parser_destroy(thiz);

	return 0;
}
Example #2
0
static void process_http(struct http_thread_env *hte, HttpRequest *req)
{
	if (process_http_auth(hte->te, req) == FALSE) {
		push_http_msg(hte, MBB_MSG_UNAUTHORIZED);
		return;
	}

	if (req->body) {
		GError *error = NULL;
		guint len;

		len = strlen(req->body);
		if (! xml_parser_parse(hte->te->parser, req->body, len, &error)) {
			mbb_log_lvl(MBB_LOG_HTTP, "xml_parser failed");
			g_error_free(error);

			push_http_error_msg(hte, "invalid xml");
			return;
		}
	}

	process_request(hte);
}
Example #3
0
gboolean
xml_parser_parse_io_channel (XMLParser     *parser,
                             GIOChannel  *io,
                             gboolean     recode,
                             GError     **error)
{
  GIOStatus  status;
  guchar     buffer[8196];
  gsize      len = 0;
  gsize      bytes;

  g_return_val_if_fail (parser != NULL, FALSE);
  g_return_val_if_fail (io != NULL, FALSE);
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);

  if (recode)
    {
      const gchar *io_encoding = g_io_channel_get_encoding (io);
      gchar       *encoding    = NULL;
      
      if (io_encoding && strcmp (io_encoding, "UTF-8"))
        {
          g_warning ("xml_parser_parse_io_channel(): "
                     "The encoding has already been set on this IOChannel!");
          return FALSE;
        }

      /* try to determine the encoding */

      while (len < sizeof (buffer) && !encoding)
        {
          status = g_io_channel_read_chars (io,
                                            buffer + len, 1, &bytes, error);
          len += bytes;

          if (status == G_IO_STATUS_ERROR)
            return FALSE;
          if (status == G_IO_STATUS_EOF)
            break;

          encoding = xml_parse_encoding (buffer, len);
        }

      if (encoding)
        {
          if (!g_io_channel_set_encoding (io, encoding, error))
            return FALSE;
     
          g_free (encoding);
        }
    }

  while (TRUE)
    {
      if (!xml_parser_parse (parser, buffer, len, error))
        return FALSE;

      status = g_io_channel_read_chars (io,
                                        buffer, sizeof(buffer), &len, error);

      switch (status)
        {
        case G_IO_STATUS_ERROR:
          return FALSE;
        case G_IO_STATUS_EOF:
          return xml_parser_end_parse (parser, error);
        case G_IO_STATUS_NORMAL:
        case G_IO_STATUS_AGAIN:
          break;
        }
    }
}