errval_t get_record(struct ast_object* ast, struct oct_query_state* sqs) { OCT_DEBUG("get record %s\n", RECORD_NAME(ast)); assert(ast != NULL); assert(sqs != NULL); for (size_t i = 0; i < MAX_RECORDS; i++) { struct record* entry = &record_storage[i]; if (entry->name == NULL) { continue; } if (strcmp(RECORD_NAME(ast), entry->name) == 0 && entry->record != NULL) { transform_to_string(entry->record, sqs->std_out.buffer); return SYS_ERR_OK; } } return OCT_ERR_NO_RECORD; }
static void wakeup_clients(struct record* entry) { struct wait_queue* cur = entry->waiting_parties; // Walk through list, wake up all clients while (cur != NULL) { assert(cur->ors != NULL); assert(cur->ors->reply != NULL); assert(cur->ors->binding != NULL); transform_to_string(entry->record, cur->ors->query_state.std_out.buffer); OCT_DEBUG( "wakeup %p for %s\n", cur->ors->binding, cur->ors->query_state.std_out.buffer); cur->ors->reply(cur->ors->binding, cur->ors); struct wait_queue* next = cur->next; free(cur); cur = next; } entry->waiting_parties = NULL; }
static void print_test(test_t *test) { switch (test->type) { case BC_FALSE: printf("FALSE"); break; case BC_TRUE: printf("TRUE"); break; case BC_EXISTS: print_stringlist("EXISTS", test->u.sl); break; case BC_SIZE: printf("SIZE %s %d", (test->u.sz.t == B_OVER) ? "over" : "under", test->u.sz.n); break; case BC_ADDRESS: printf("ADDRESS"); printf(" ADDRPART(%s)", addrpart_to_string(test->u.ae.addrpart)); if (test->u.ae.comp.index) { printf(" INDEX(%d %s)", abs(test->u.ae.comp.index), (test->u.ae.comp.index < 0) ? "[LAST]" : ""); } print_comparator(&test->u.ae.comp); print_stringlist("\n\tHEADERS", test->u.ae.sl); print_stringlist(" PATTERNS", test->u.ae.pl); break; case BC_ENVELOPE: printf("ENVELOPE"); printf(" ADDRPART(%s)", addrpart_to_string(test->u.ae.addrpart)); print_comparator(&test->u.ae.comp); print_stringlist("\n\tHEADERS", test->u.ae.sl); print_stringlist(" PATTERNS", test->u.ae.pl); break; case BC_HEADER: printf("HEADER"); if (test->u.hhs.comp.index) { printf(" INDEX(%d %s)", abs(test->u.hhs.comp.index), (test->u.hhs.comp.index < 0) ? "[LAST]" : ""); } print_comparator(&test->u.hhs.comp); print_stringlist("\n\tHEADERS", test->u.hhs.sl); print_stringlist(" PATTERNS", test->u.hhs.pl); break; case BC_BODY: printf("BODY"); print_comparator(&test->u.b.comp); printf("\n\tTRANSFORM(%s)", transform_to_string(test->u.b.transform)); printf(" OFFSET(%d)", test->u.b.offset); print_stringlist(" CONTENT-TYPES", test->u.b.content_types); print_stringlist(" PATTERNS", test->u.b.pl); break; case BC_DATE: printf("DATE"); if (test->u.dt.comp.index) { printf(" INDEX(%d %s)", abs(test->u.dt.comp.index), (test->u.dt.comp.index < 0) ? "[LAST]" : ""); } if (test->u.dt.zonetag == B_TIMEZONE) printf(" ZONE(%+dmin)", test->u.dt.zone); else printf(" ZONE(ORIGINAL)"); print_comparator(&test->u.dt.comp); printf("\n\tDATEPART(%s)", datepart_to_string(test->u.dt.date_part)); print_string(" HEADER", test->u.dt.header_name); print_stringlist(" KEYS", test->u.dt.kl); break; case BC_CURRENTDATE: printf("CURRENTDATE"); if (test->u.dt.zonetag == B_TIMEZONE) printf(" ZONE(%+dmin)", test->u.dt.zone); else printf(" ZONE(ORIGINAL)"); print_comparator(&test->u.dt.comp); printf("\n\tDATEPART(%s)", datepart_to_string(test->u.dt.date_part)); print_stringlist(" KEYS", test->u.dt.kl); break; case BC_HASFLAG: printf("HASFLAG"); print_comparator(&test->u.hhs.comp); print_stringlist("\n\tVARIABLES", test->u.hhs.sl); print_stringlist(" PATTERNS", test->u.hhs.pl); break; case BC_MAILBOXEXISTS: print_stringlist("MAILBOXEXISTS", test->u.mm.keylist); break; case BC_MAILBOXIDEXISTS: print_stringlist("MAILBOXIDEXISTS", test->u.mm.keylist); break; case BC_METADATA: printf("METADATA"); print_comparator(&test->u.mm.comp); print_string("\n\tMAILBOX", test->u.mm.extname); print_string(" ANNOTATION", test->u.mm.keyname); print_stringlist(" PATTERNS", test->u.mm.keylist); break; case BC_METADATAEXISTS: printf("METAEXISTS"); print_string("MAILBOX", test->u.mm.extname); print_stringlist(" ANNOTATIONS", test->u.mm.keylist); break; case BC_SERVERMETADATA: printf("SERVERMETADATA"); print_comparator(&test->u.mm.comp); print_string("\n\tANNOTATION", test->u.mm.keyname); print_stringlist(" PATTERNS", test->u.mm.keylist); break; case BC_SERVERMETADATAEXISTS: print_stringlist("SERVERMETADATAEXISTS", test->u.mm.keylist); break; case BC_STRING: printf("STRING"); print_comparator(&test->u.hhs.comp); print_stringlist("\n\tVARIABLES", test->u.hhs.sl); print_stringlist(" PATTERNS", test->u.hhs.pl); break; case BC_VALIDEXTLIST: print_stringlist("VALIDEXTLIST", test->u.sl); break; case BC_VALIDNOTIFYMETHOD: print_stringlist("VALIDNOTIFYMETHOD", test->u.sl); break; case BC_NOTIFYMETHODCAPABILITY: printf("NOTIFYMETHODCAPABILITY"); print_comparator(&test->u.mm.comp); print_string("\n\tURI", test->u.mm.extname); print_string(" CAPABILITY", test->u.mm.keyname); print_stringlist(" KEYS", test->u.mm.keylist); break; case BC_DUPLICATE: printf("DUPLICATE"); print_string((test->u.dup.idtype == B_UNIQUEID) ? " UNIQUEID" : " HDRNAME", test->u.dup.idval); print_string(" HANDLE", test->u.dup.handle); printf("\n\tSECONDS(%d) LAST(%d)", test->u.dup.seconds, test->u.dup.last); break; case BC_IHAVE: print_stringlist("IHAVE", test->u.sl); break; case BC_SPECIALUSEEXISTS: printf("SPECIALUSEEXISTS"); print_string("MAILBOX", test->u.mm.extname); print_stringlist(" FLAGS", test->u.mm.keylist); break; case BC_ENVIRONMENT: printf("ENVIRONMENT"); print_comparator(&test->u.mm.comp); print_string("\n\tITEM", test->u.mm.keyname); print_stringlist(" KEYS", test->u.mm.keylist); break; } printf("\n"); }