* The EUID index is now built, and replication checks are being performed
[citadel.git] / citadel / euidindex.c
index 04c14b91a8982cfe542870e5b13490defcd0f690..62bc53c1206d2ab25ce2b5165cf5a7e0c0fcf829 100644 (file)
 
 
 long locate_message_by_euid(char *euid, struct ctdlroom *qrbuf) {
-       return(0);
+       char *key;
+       int key_len;
+       struct cdbdata *cdb_euid;
+       long msgnum = (-1L);
+
+       lprintf(CTDL_DEBUG, "Searching for EUID <%s> in <%s>\n", euid, qrbuf->QRname);
+
+       key_len = strlen(euid) + sizeof(long) + 1;
+       key = malloc(key_len);
+       memcpy(key, &qrbuf->QRnumber, sizeof(long));
+       strcpy(&key[sizeof(long)], euid);
+
+       cdb_euid = cdb_fetch(CDB_EUIDINDEX, key, key_len);
+       free(key);
+
+       if (cdb_euid == NULL) {
+               return(-1L);
+       }
+
+       if (cdb_euid->len == sizeof(long)) {
+               msgnum = *(long *)cdb_euid->ptr;
+       }
+
+       cdb_free(cdb_euid);
+       lprintf(CTDL_DEBUG, "returning msgnum==%ld\n", msgnum);
+       return(msgnum);
 }
 
 void index_message_by_euid(char *euid, struct ctdlroom *qrbuf, long msgnum) {
@@ -62,6 +87,7 @@ void index_message_by_euid(char *euid, struct ctdlroom *qrbuf, long msgnum) {
        strcpy(&key[sizeof(long)], euid);
 
        cdb_store(CDB_EUIDINDEX, key, key_len, &msgnum, sizeof(long));
+       free(key);
 }