]> git.mikk.net Git - ssm_nmsg/commitdiff
Publish URLs to inter-module communication channel.
authorchris mikkelson <chris@mikk.net>
Thu, 15 Apr 2010 21:04:08 +0000 (16:04 -0500)
committerchris mikkelson <chris@mikk.net>
Thu, 15 Apr 2010 21:04:08 +0000 (16:04 -0500)
ssm_nmsg.c

index 5318a58769b6fd4dadd2cad69cad418f7eef7d24..c2b3c07a1d9d9482267d3adcdea1bc3b2df1b522 100644 (file)
@@ -40,13 +40,20 @@ struct ssm_nmsg_state {
        unsigned nurl;
 };
 
+struct smtpsink_module ss_module;
+int publish_urls = 0;
+
 static void
 addurl(msgproc *m, char *s, void *data)
 {
-       struct ssm_nmsg_state *nms = (struct ssm_nmsg_state *)data;
+       struct conn *c = (struct conn *)data;
+       struct ssm_nmsg_state *nms = ssm_getpriv(&ss_module, c);
        const uint8_t *url = (const uint8_t *)s;
        size_t len = strlen(s) + 1;
 
+       if (publish_urls)
+               ssm_publish("bodyurl", c, s);
+
        if (nms->msg)
                nmsg_message_set_field(nms->msg, "bodyurl", nms->nurl++,
                                        url, len);
@@ -87,6 +94,11 @@ ssm_nmsg_init(char *config)
        nmsg_res res;
        nmsg_message_t m;
 
+       if (!ssm_nproviders("bodyurl")) {
+               ssm_provide("bodyurl");
+               publish_urls = 1;
+       }
+
        pthread_key_create(&nmsg_output_key, 0);
 
        msgproc_module_init(&msgproc_message);
@@ -126,8 +138,6 @@ ssm_nmsg_init(char *config)
        }
 }
 
-struct smtpsink_module ss_module;
-
 static int
 ssm_nmsg_connect(struct conn *c)
 {
@@ -152,7 +162,7 @@ ssm_nmsg_connect(struct conn *c)
                }
 
                if (nms->urlproc) {
-                       msgproc_setcallback(nms->urlproc, addurl, nms);
+                       msgproc_setcallback(nms->urlproc, addurl, c);
                        msgproc_start(nms->urlproc);
                }
        }