]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins: fts-solr: Move solr_lookup_xml_start() from solr-connection.c to solr-respon...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 8 Oct 2019 16:56:55 +0000 (18:56 +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

index 98bc61288fe6f16f28af1208ff2c911a3bcc6b30..37daa7f8c58e22ec2fea627eba4fe717382c94be 100644 (file)
@@ -126,70 +126,6 @@ void solr_connection_deinit(struct solr_connection **_conn)
        i_free(conn);
 }
 
-static const char *attrs_get_name(const char **attrs)
-{
-       for (; *attrs != NULL; attrs += 2) {
-               if (strcmp(attrs[0], "name") == 0)
-                       return attrs[1];
-       }
-       return "";
-}
-
-static void
-solr_lookup_xml_start(void *context, const char *name, const char **attrs)
-{
-       struct solr_lookup_xml_context *ctx = context;
-       const char *name_attr;
-
-       i_assert(ctx->depth >= (int)ctx->state);
-
-       ctx->depth++;
-       if (ctx->depth - 1 > (int)ctx->state) {
-               /* skipping over unwanted elements */
-               return;
-       }
-
-       /* response -> result -> doc */
-       switch (ctx->state) {
-       case SOLR_XML_RESPONSE_STATE_ROOT:
-               if (strcmp(name, "response") == 0)
-                       ctx->state++;
-               break;
-       case SOLR_XML_RESPONSE_STATE_RESPONSE:
-               if (strcmp(name, "result") == 0)
-                       ctx->state++;
-               break;
-       case SOLR_XML_RESPONSE_STATE_RESULT:
-               if (strcmp(name, "doc") == 0) {
-                       ctx->state++;
-                       ctx->uid = 0;
-                       ctx->score = 0;
-                       i_free_and_null(ctx->mailbox);
-                       i_free_and_null(ctx->ns);
-                       ctx->uidvalidity = 0;
-               }
-               break;
-       case SOLR_XML_RESPONSE_STATE_DOC:
-               name_attr = attrs_get_name(attrs);
-               if (strcmp(name_attr, "uid") == 0)
-                       ctx->content_state = SOLR_XML_CONTENT_STATE_UID;
-               else if (strcmp(name_attr, "score") == 0)
-                       ctx->content_state = SOLR_XML_CONTENT_STATE_SCORE;
-               else if (strcmp(name_attr, "box") == 0)
-                       ctx->content_state = SOLR_XML_CONTENT_STATE_MAILBOX;
-               else if (strcmp(name_attr, "ns") == 0)
-                       ctx->content_state = SOLR_XML_CONTENT_STATE_NAMESPACE;
-               else if (strcmp(name_attr, "uidv") == 0)
-                       ctx->content_state = SOLR_XML_CONTENT_STATE_UIDVALIDITY;
-               else
-                       break;
-               ctx->state++;
-               break;
-       case SOLR_XML_RESPONSE_STATE_CONTENT:
-               break;
-       }
-}
-
 static struct solr_result *
 solr_result_get(struct solr_lookup_xml_context *ctx, const char *box_id)
 {
index 6fb26d5087a3ef819b790958654e713317d5be48..3413ee021ab975a1ec924201881e3e412f6af2f3 100644 (file)
@@ -63,3 +63,68 @@ solr_xml_parse(struct solr_connection *conn,
        }
        return 0;
 }
+
+static const char *attrs_get_name(const char **attrs)
+{
+       for (; *attrs != NULL; attrs += 2) {
+               if (strcmp(attrs[0], "name") == 0)
+                       return attrs[1];
+       }
+       return "";
+}
+
+static void
+solr_lookup_xml_start(void *context, const char *name, const char **attrs)
+{
+       struct solr_lookup_xml_context *ctx = context;
+       const char *name_attr;
+
+       i_assert(ctx->depth >= (int)ctx->state);
+
+       ctx->depth++;
+       if (ctx->depth - 1 > (int)ctx->state) {
+               /* skipping over unwanted elements */
+               return;
+       }
+
+       /* response -> result -> doc */
+       switch (ctx->state) {
+       case SOLR_XML_RESPONSE_STATE_ROOT:
+               if (strcmp(name, "response") == 0)
+                       ctx->state++;
+               break;
+       case SOLR_XML_RESPONSE_STATE_RESPONSE:
+               if (strcmp(name, "result") == 0)
+                       ctx->state++;
+               break;
+       case SOLR_XML_RESPONSE_STATE_RESULT:
+               if (strcmp(name, "doc") == 0) {
+                       ctx->state++;
+                       ctx->uid = 0;
+                       ctx->score = 0;
+                       i_free_and_null(ctx->mailbox);
+                       i_free_and_null(ctx->ns);
+                       ctx->uidvalidity = 0;
+               }
+               break;
+       case SOLR_XML_RESPONSE_STATE_DOC:
+               name_attr = attrs_get_name(attrs);
+               if (strcmp(name_attr, "uid") == 0)
+                       ctx->content_state = SOLR_XML_CONTENT_STATE_UID;
+               else if (strcmp(name_attr, "score") == 0)
+                       ctx->content_state = SOLR_XML_CONTENT_STATE_SCORE;
+               else if (strcmp(name_attr, "box") == 0)
+                       ctx->content_state = SOLR_XML_CONTENT_STATE_MAILBOX;
+               else if (strcmp(name_attr, "ns") == 0)
+                       ctx->content_state = SOLR_XML_CONTENT_STATE_NAMESPACE;
+               else if (strcmp(name_attr, "uidv") == 0)
+                       ctx->content_state = SOLR_XML_CONTENT_STATE_UIDVALIDITY;
+               else
+                       break;
+               ctx->state++;
+               break;
+       case SOLR_XML_RESPONSE_STATE_CONTENT:
+               break;
+       }
+}
+