From: Jonathan McDowell <noodles@earth.li>
Date: Mon, 31 May 2004 23:46:57 +0000 (+0000)
Subject: cscvs to tla changeset 8
X-Git-Url: https://git.sommitrealweird.co.uk/onak.git/commitdiff_plain/4aafe74aea2d616a5d9611c6e3c01a182a0b37ec

cscvs to tla changeset 8
Author: noodles
Date: 2002/09/08 10:33:20
Pulling dofindpath out of gpgwww.c into stats.c.
---

diff --git a/gpgwww.c b/gpgwww.c
index dc79135..75022b8 100644
--- a/gpgwww.c
+++ b/gpgwww.c
@@ -17,80 +17,6 @@
 #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 b302f09..db8566b 100644
--- 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 af9f79f..df32ab6 100644
--- 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);