void draw_player(int m_x, int m_y, int r_x, int r_y) { int i, j, k; getphoto(); for (i=0; i<=m_x; i++) { j=((double)m_y/(double)m_x)*i; k=((double)m_y/(double)m_x)*(i-1); D1(i, j); D3(i, k, j); } for (i=1024; i>=r_x; i--) { j=((double)r_y/(1024-(double)r_x))*(1024-i); k=((double)r_y/(1024-(double)r_x))*(1024-i+1); D2(i, j); D3(i, k, j); } return; }
int main(int argc, char *argv[]) { char **params = NULL; int op = OP_UNKNOWN; int i, j; int indx = 0; bool dispfp = false; bool skshash = false; bool exact = false; bool ishex = false; bool isfp = false; bool mrhkp = false; uint64_t keyid = 0; struct openpgp_fingerprint fingerprint; char *search = NULL; char *end = NULL; struct openpgp_publickey *publickey = NULL; struct openpgp_packet_list *packets = NULL; struct openpgp_packet_list *list_end = NULL; int result; struct skshash hash; struct onak_dbctx *dbctx; params = getcgivars(argc, argv); for (i = 0; params != NULL && params[i] != NULL; i += 2) { if (!strcmp(params[i], "op")) { if (!strcmp(params[i+1], "get")) { op = OP_GET; } else if (!strcmp(params[i+1], "hget")) { op = OP_HGET; } else if (!strcmp(params[i+1], "index")) { op = OP_INDEX; } else if (!strcmp(params[i+1], "vindex")) { op = OP_VINDEX; } else if (!strcmp(params[i+1], "photo")) { op = OP_PHOTO; } } else if (!strcmp(params[i], "search")) { search = params[i+1]; params[i+1] = NULL; if (search != NULL && strlen(search) == 42 && search[0] == '0' && search[1] == 'x') { /* v4 fingerprint */ fingerprint.length = 20; for (j = 0; j < 20; j++) { fingerprint.fp[j] = (hex2bin( search[2 + j * 2]) << 4) + hex2bin(search[3 + j * 2]); } isfp = true; } else if (search != NULL && strlen(search) == 66 && search[0] == '0' && search[1] == 'x') { /* v5 fingerprint */ fingerprint.length = 32; for (j = 0; j < 32; j++) { fingerprint.fp[j] = (hex2bin( search[2 + j * 2]) << 4) + hex2bin(search[3 + j * 2]); } isfp = true; } else if (search != NULL) { keyid = strtoull(search, &end, 16); if (*search != 0 && end != NULL && *end == 0) { ishex = true; } } } else if (!strcmp(params[i], "idx")) { indx = atoi(params[i+1]); } else if (!strcmp(params[i], "fingerprint")) { if (!strcmp(params[i+1], "on")) { dispfp = true; } } else if (!strcmp(params[i], "hash")) { if (!strcmp(params[i+1], "on")) { skshash = true; } } else if (!strcmp(params[i], "exact")) { if (!strcmp(params[i+1], "on")) { exact = true; } } else if (!strcmp(params[i], "options")) { /* * TODO: We should be smarter about this; options may * have several entries. For now mr is the only valid * one though. */ if (!strcmp(params[i+1], "mr")) { mrhkp = true; } } free(params[i]); params[i] = NULL; if (params[i+1] != NULL) { free(params[i+1]); params[i+1] = NULL; } } if (params != NULL) { free(params); params = NULL; } if (mrhkp) { puts("Content-Type: text/plain\n"); } else if (op == OP_PHOTO) { puts("Content-Type: image/jpeg\n"); } else { start_html("Lookup of key"); } if (op == OP_UNKNOWN) { puts("Error: No operation supplied."); } else if (search == NULL) { puts("Error: No key to search for supplied."); } else { readconfig(NULL); initlogthing("lookup", config.logfile); catchsignals(); dbctx = config.dbinit(config.backend, false); switch (op) { case OP_GET: case OP_HGET: if (op == OP_HGET) { parse_skshash(search, &hash); result = dbctx->fetch_key_skshash(dbctx, &hash, &publickey); } else if (ishex) { result = dbctx->fetch_key_id(dbctx, keyid, &publickey, false); } else if (isfp) { result = dbctx->fetch_key_fp(dbctx, &fingerprint, &publickey, false); } else { result = dbctx->fetch_key_text(dbctx, search, &publickey); } if (result) { logthing(LOGTHING_NOTICE, "Found %d key(s) for search %s", result, search); puts("<pre>"); cleankeys(&publickey, config.clean_policies); flatten_publickey(publickey, &packets, &list_end); armor_openpgp_stream(stdout_putchar, NULL, packets); puts("</pre>"); } else { logthing(LOGTHING_NOTICE, "Failed to find key for search %s", search); puts("Key not found"); } break; case OP_INDEX: find_keys(dbctx, search, keyid, &fingerprint, ishex, isfp, dispfp, skshash, exact, false, mrhkp); break; case OP_VINDEX: find_keys(dbctx, search, keyid, &fingerprint, ishex, isfp, dispfp, skshash, exact, true, mrhkp); break; case OP_PHOTO: if (isfp) { dbctx->fetch_key_fp(dbctx, &fingerprint, &publickey, false); } else { dbctx->fetch_key_id(dbctx, keyid, &publickey, false); } if (publickey != NULL) { unsigned char *photo = NULL; size_t length = 0; if (getphoto(publickey, indx, &photo, &length) == ONAK_E_OK) { fwrite(photo, 1, length, stdout); } free_publickey(publickey); publickey = NULL; } break; default: puts("Unknown operation!"); } dbctx->cleanupdb(dbctx); cleanuplogthing(); cleanupconfig(); } if (!mrhkp) { puts("<hr>"); puts("Produced by onak " ONAK_VERSION ); end_html(); } if (search != NULL) { free(search); search = NULL; } return (EXIT_SUCCESS); }