cscvs to tla changeset 8
authorJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:46:57 +0000 (23:46 +0000)
committerJonathan McDowell <noodles@earth.li>
Mon, 31 May 2004 23:46:57 +0000 (23:46 +0000)
Author: noodles
Date: 2002/09/08 10:33:20
Pulling dofindpath out of gpgwww.c into stats.c.

gpgwww.c
stats.c
stats.h

index dc79135e69a5a1de4cc841b4fda93401693b4ef1..75022b86e83b5d74d1312c4fc161fc3968e91d92 100644 (file)
--- a/gpgwww.c
+++ b/gpgwww.c
 #include "onak-conf.h"
 #include "stats.h"
 
-void dofindpath(uint64_t have, uint64_t want, bool html)
-{
-       struct stats_key *keyinfoa, *keyinfob, *curkey;
-       int rec;
-       char *uid;
-
-       have = getfullkeyid(have);
-       want = getfullkeyid(want);
-
-       /*
-        * Make sure the keys we have and want are in the cache.
-        */
-       hash_getkeysigs(have);
-       hash_getkeysigs(want);
-
-       if ((keyinfoa = findinhash(have)) == NULL) {
-               printf("Couldn't find key 0x%llX.\n", have);
-               return;
-       }
-       if ((keyinfob = findinhash(want)) == NULL) {
-               printf("Couldn't find key 0x%llX.\n", want);
-               return;
-       }
-       
-       /*
-        * Fill the tree info up.
-        */
-       initcolour(true);
-       rec = findpath(keyinfoa, keyinfob);
-       keyinfob->parent = 0;
-
-       printf("%d nodes examined. %ld elements in the hash\n", rec,
-                       hashelements());
-       if (keyinfoa->colour == 0) {
-               printf("Can't find a link from 0x%llX to 0x%llX\n",
-                               have,
-                               want);
-       } else {
-               printf("%d steps from 0x%llX to 0x%llX\n",
-                               keyinfoa->colour, have & 0xFFFFFFFF,
-                               want & 0xFFFFFFFF);
-               curkey = keyinfoa;
-               while (curkey != NULL && curkey->keyid != 0) {
-                       uid = keyid2uid(curkey->keyid);
-                       if (html && uid == NULL) {
-                               printf("<a href=\"lookup?op=get&search=%llX\">"
-                                       "0x%llX</a> ([User id not found])%s)%s\n",
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       (curkey->keyid == want) ? "" :
-                                        " signs");
-                       } else if (html && uid != NULL) {
-                               printf("<a href=\"lookup?op=get&search=%llX\">"
-                                       "0x%llX</a> (<a href=\"lookup?op=vindex"
-                                       "&search=0x%llX\">%s</a>)%s\n",
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       txt2html(keyid2uid(curkey->keyid)),
-                                       (curkey->keyid == want) ? "" :
-                                        " signs");
-                       } else {
-                               printf("0x%llX (%s)%s\n",
-                                       curkey->keyid & 0xFFFFFFFF,
-                                       (uid == NULL) ? "[User id not found]" :
-                                               uid,
-                                       (curkey->keyid == want) ? "" :
-                                        " signs");
-                       }
-                       curkey = findinhash(curkey->parent);
-               }
-       }
-}
-
 void parsecgistuff(char **cgiparams, uint64_t *from, uint64_t *to)
 {
        int i = 0;
@@ -117,13 +43,7 @@ int main(int argc, char *argv[])
 
        cgiparams = getcgivars(argc, argv);
 
-       puts("Content-Type: text/html\n");
-       puts("<HTML>");
-       puts("<HEAD>");
-       puts("<TITLE>Experimental PGP key path finder results</TITLE>");
-       puts("</HEAD>");
-       puts("<BODY>");
-       puts("</BODY>");
+       start_html("Experimental PGP key path finder results");
 
        parsecgistuff(cgiparams, &from, &to);
 
@@ -134,16 +54,15 @@ int main(int argc, char *argv[])
        }
 
        printf("<P>Looking for path from 0x%llX to 0x%llX</P>\n", from, to);
-       puts("<PRE>");
        initdb();
        inithash();
        dofindpath(from, to, true);
+       destroyhash();
        cleanupdb();
-       puts("</PRE>");
 
        puts("<HR>");
        puts("Produced by gpgwww " VERSION ", part of onak. <A HREF=\"mailto:noodles-onak@earth.li\">Jonathan McDowell</A>");
-       puts("</HTML>");
+       end_html();
 
        return EXIT_SUCCESS;
 }
diff --git a/stats.c b/stats.c
index b302f09b627282364a09aca1fdc7dfb9d21dd0c8..db8566bc859335b773a0f2d33fb06d9bfd8ce3f4 100644 (file)
--- a/stats.c
+++ b/stats.c
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "getcgi.h"
 #include "hash.h"
 #include "keydb.h"
 #include "ll.h"
@@ -88,12 +89,112 @@ unsigned long findpath(struct stats_key *have, struct stats_key *want)
                        nextkeys = NULL;
                        curdegree++;
                }
-               fprintf(stderr, "Hash contains %ld keys.\n", hashelements());
        }
 
        return count;
 }
 
+/**
+ *     dofindpath - Given 2 keys displays a path between them.
+ *     @have: The key we have.
+ *     @want: The key we want to get to.
+ *     @html: Should we output in html.
+ *
+ *     This does a breadth first search on the key tree, starting with the
+ *     key we have. It returns as soon as a path is found or when we run out
+ *     of keys; whichever comes sooner.
+ */
+void dofindpath(uint64_t have, uint64_t want, bool html)
+{
+       struct stats_key *keyinfoa, *keyinfob, *curkey;
+       int rec;
+       char *uid;
+
+       have = getfullkeyid(have);
+       want = getfullkeyid(want);
+
+       /*
+        * Make sure the keys we have and want are in the cache.
+        */
+       hash_getkeysigs(have);
+       hash_getkeysigs(want);
+
+       if ((keyinfoa = findinhash(have)) == NULL) {
+               printf("Couldn't find key 0x%llX.\n", have);
+               return;
+       }
+       if ((keyinfob = findinhash(want)) == NULL) {
+               printf("Couldn't find key 0x%llX.\n", want);
+               return;
+       }
+       
+       /*
+        * Fill the tree info up.
+        */
+       initcolour(true);
+       rec = findpath(keyinfoa, keyinfob);
+       keyinfob->parent = 0;
+
+       printf("%d nodes examined. %ld elements in the hash%s\n", rec,
+                       hashelements(),
+                       html ? "<BR>" : "");
+       if (keyinfoa->colour == 0) {
+               printf("Can't find a link from 0x%08llX to 0x%08llX%s\n",
+                               have,
+                               want,
+                               html ? "<BR>" : "");
+       } else {
+               printf("%d steps from 0x%08llX to 0x%08llX%s\n",
+                               keyinfoa->colour, have & 0xFFFFFFFF,
+                               want & 0xFFFFFFFF,
+                               html ? "<BR>" : "");
+               curkey = keyinfoa;
+               while (curkey != NULL && curkey->keyid != 0) {
+                       uid = keyid2uid(curkey->keyid);
+                       if (html && uid == NULL) {
+                               printf("<a href=\"lookup?op=get&search=%llX\">"
+                                       "0x%08llX</a> ([User id not found])%s"
+                                       "<BR>\n",
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       (curkey->keyid == want) ? "" :
+                                        " signs");
+                       } else if (html && uid != NULL) {
+                               printf("<a href=\"lookup?op=get&search=%llX\">"
+                                       "0x%08llX</a> (<a href=\"lookup?op=vindex"
+                                       "&search=0x%llX\">%s</a>)%s<BR>\n",
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       txt2html(keyid2uid(curkey->keyid)),
+                                       (curkey->keyid == want) ? "" :
+                                        " signs");
+                       } else {
+                               printf("0x%08llX (%s)%s\n",
+                                       curkey->keyid & 0xFFFFFFFF,
+                                       (uid == NULL) ? "[User id not found]" :
+                                               uid,
+                                       (curkey->keyid == want) ? "" :
+                                        " signs");
+                       }
+                       curkey = findinhash(curkey->parent);
+               }
+               if (html) {
+                       puts("<P>List of key ids in path:</P>");
+               } else {
+                       puts("List of key ids in path:");
+               }
+               curkey = keyinfoa;
+               while (curkey != NULL && curkey->keyid != 0) {
+                       printf("0x%08llX ", curkey->keyid & 0xFFFFFFFF);
+                       curkey = findinhash(curkey->parent);
+               }
+               putchar('\n');
+       }
+}
+
+
+
 struct stats_key *furthestkey(struct stats_key *have)
 {
        unsigned long count = 0;
diff --git a/stats.h b/stats.h
index af9f79fcbf7d4975bb063098c2b2f7493e0713c4..df32ab66189a6345e4f2c20c58f55f4bc751239d 100644 (file)
--- a/stats.h
+++ b/stats.h
@@ -61,6 +61,17 @@ void initcolour(bool parent);
  */
 unsigned long findpath(struct stats_key *have, struct stats_key *want);
 
+/**
+ *     dofindpath - Given 2 keys displays a path between them.
+ *     @have: The key we have.
+ *     @want: The key we want to get to.
+ *     @html: Should we output in html.
+ *
+ *     This does a breadth first search on the key tree, starting with the
+ *     key we have. It returns as soon as a path is found or when we run out
+ *     of keys; whichever comes sooner.
+ */
+void dofindpath(uint64_t have, uint64_t want, bool html);
 
 struct stats_key *furthestkey(struct stats_key *have);