]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins: fts-solr: solr-reponse - Move init/deinit of struct solr_response_parser...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 8 Oct 2019 16:57:00 +0000 (18:57 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 9 Jan 2020 12:52:43 +0000 (12:52 +0000)
src/plugins/fts-solr/solr-connection.c
src/plugins/fts-solr/solr-response.c
src/plugins/fts-solr/solr-response.h

index 104d9359f885636dc0c38413b1e11a8e1e85296d..4ee5482161d12a5c8295c311bb37e6e01210c0f1 100644 (file)
@@ -188,28 +188,10 @@ int solr_connection_select(struct solr_connection *conn, const char *query,
        i_zero(&lctx);
        lctx.conn = conn;
 
-       i_zero(&parser);
-       parser.result_pool = pool;
+       solr_response_parser_init(&parser, pool);
        lctx.parser = &parser;
 
-       parser.xml_parser = XML_ParserCreate("UTF-8");
-       if (parser.xml_parser == NULL) {
-               i_fatal_status(FATAL_OUTOFMEM,
-                              "fts_solr: Failed to allocate XML parser");
-       }
-
-       hash_table_create(&parser.mailboxes, default_pool, 0,
-                         str_hash, strcmp);
-       p_array_init(&parser.results, pool, 32);
-
        i_free_and_null(conn->http_failure);
-       parser.xml_failed = FALSE;
-       XML_ParserReset(parser.xml_parser, "UTF-8");
-       XML_SetElementHandler(parser.xml_parser,
-                             solr_lookup_xml_start, solr_lookup_xml_end);
-       XML_SetCharacterDataHandler(parser.xml_parser, solr_lookup_xml_data);
-       XML_SetUserData(parser.xml_parser, &parser);
-
        url = t_strconcat(conn->http_base_url, "select?", query, NULL);
 
        http_req = http_client_request(solr_http_client, "GET",
@@ -232,8 +214,7 @@ int solr_connection_select(struct solr_connection *conn, const char *query,
                return -1;
 
        parse_ret = solr_xml_parse(&parser, "", 0, TRUE);
-       hash_table_destroy(&parser.mailboxes);
-       XML_ParserFree(parser.xml_parser);
+       solr_response_parser_deinit(&parser);
 
        array_append_zero(&parser.results);
        *box_results_r = array_front_modifiable(&parser.results);
index cc3f6b436ed0926be2bceed3f344c40c630faf2e..e0022c1ac64425169724bb0e902a909fc7220056 100644 (file)
@@ -283,3 +283,33 @@ static void solr_lookup_xml_data(void *context, const char *str, int len)
                break;
        }
 }
+
+void solr_response_parser_init(struct solr_response_parser *parser,
+                              pool_t result_pool)
+{
+       i_zero(parser);
+
+       parser->xml_parser = XML_ParserCreate("UTF-8");
+       if (parser->xml_parser == NULL) {
+               i_fatal_status(FATAL_OUTOFMEM,
+                              "fts_solr: Failed to allocate XML parser");
+       }
+
+       hash_table_create(&parser->mailboxes, default_pool, 0,
+                         str_hash, strcmp);
+
+       parser->result_pool = result_pool;
+       p_array_init(&parser->results, result_pool, 32);
+
+       parser->xml_failed = FALSE;
+       XML_SetElementHandler(parser->xml_parser,
+                             solr_lookup_xml_start, solr_lookup_xml_end);
+       XML_SetCharacterDataHandler(parser->xml_parser, solr_lookup_xml_data);
+       XML_SetUserData(parser->xml_parser, parser);
+}
+
+void solr_response_parser_deinit(struct solr_response_parser *parser)
+{
+       hash_table_destroy(&parser->mailboxes);
+       XML_ParserFree(parser->xml_parser);
+}
index 1c105a56bafc69898acb1d47a0fe9ba9d0d11be2..aabc9ba1162ae974c2ad63c5e4926b7f68cf5f3f 100644 (file)
@@ -4,6 +4,8 @@
 #include "seq-range-array.h"
 #include "fts-api.h"
 
+struct solr_response_parser;
+
 struct solr_result {
        const char *box_id;
 
@@ -11,4 +13,8 @@ struct solr_result {
        ARRAY_TYPE(fts_score_map) scores;
 };
 
+void solr_response_parser_init(struct solr_response_parser *parser,
+                              pool_t result_pool);
+void solr_response_parser_deinit(struct solr_response_parser *parser);
+
 #endif