X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=lib%2Fperl%2FBlerg-Database%2FDatabase.xs;h=97b426c7a723733aa8b522219e4c1efaa3c0396b;hb=4ebc59f7d9fbd644f2a6a4c5abda2cdd9dcb8476;hp=df1c4636aef7d3b7b8b8f2337cb40905667ec7fd;hpb=9777ec792051ef0e7c3e9eec300a15233077e1a8;p=blerg.git diff --git a/lib/perl/Blerg-Database/Database.xs b/lib/perl/Blerg-Database/Database.xs index df1c463..97b426c 100644 --- a/lib/perl/Blerg-Database/Database.xs +++ b/lib/perl/Blerg-Database/Database.xs @@ -10,6 +10,8 @@ #include "database/tags.h" #include "database/subscription.h" #include "database/util.h" +#include "database/configuration.h" +#include "common/auth.h" #include "const-c.inc" @@ -31,6 +33,12 @@ MODULE = Blerg::Database PACKAGE = Blerg::Database INCLUDE: const-xs.inc PROTOTYPES: ENABLE +int init() + CODE: + RETVAL = blerg_init(); + OUTPUT: + RETVAL + int exists(const char *name) CODE: RETVAL = blerg_exists(name); @@ -49,19 +57,25 @@ int _close(struct blerg *ptr) OUTPUT: RETVAL -int _store(struct blerg *ptr, const char *data, int length(data)) +const char * _store(struct blerg *ptr, const char *data, int length(data)) PROTOTYPE: $$ - CODE: - RETVAL = blerg_store(ptr, data, XSauto_length_of_data); - OUTPUT: - RETVAL + INIT: + uint64_t record; + char buf[21]; + int n; + PPCODE: + record = blerg_store(ptr, data, XSauto_length_of_data); + n = snprintf(buf, 21, "%llu", record); + XPUSHs(sv_2mortal(newSVpv(buf, n))); -const char * _fetch(struct blerg *ptr, int record) +const char * _fetch(struct blerg *ptr, const char *str_record) INIT: + uint64_t record; char *buf; int buflen; int n; PPCODE: + record = strtoull(str_record, NULL, 0); n = blerg_fetch(ptr, record, &buf, &buflen); if (!n) { XSRETURN_UNDEF; @@ -79,8 +93,11 @@ const char * _get_record_count(struct blerg *ptr) n = snprintf(buf, 21, "%llu", count); XPUSHs(sv_2mortal(newSVpv(buf, n))); -time_t _get_timestamp(struct blerg *ptr, int record) +time_t _get_timestamp(struct blerg *ptr, const char *str_record) + INIT: + uint64_t record; CODE: + record = strtoull(str_record, NULL, 0); RETVAL = blerg_get_timestamp(ptr, record); OUTPUT: RETVAL @@ -101,15 +118,15 @@ const char * _get_subscription_mark(struct blerg *ptr) n = snprintf(buf, 21, "%llu", mark); XPUSHs(sv_2mortal(newSVpv(buf, n))); -int _set_mute(struct blerg *ptr, int v) +int _set_status(struct blerg *ptr, int status, int v) CODE: - RETVAL = blerg_set_mute(ptr, v); + RETVAL = blerg_set_status(ptr, status, v); OUTPUT: RETVAL -int _get_mute(struct blerg *ptr) +int _get_status(struct blerg *ptr, int status) CODE: - RETVAL = blerg_get_mute(ptr); + RETVAL = blerg_get_status(ptr, status); OUTPUT: RETVAL @@ -121,9 +138,10 @@ void tag_list(const char *tag, const char *str_offset, int direction) int count, i; PPCODE: offset = strtoull(str_offset, NULL, 0); + count = 50; list = tag_list(tag, offset, &count, direction); if (list == NULL) { - XSRETURN_UNDEF; + XSRETURN_EMPTY; } i = count - 1; @@ -135,16 +153,8 @@ void tag_list(const char *tag, const char *str_offset, int direction) free(list); int subscription_add(const char *from, const char *to) - CODE: - RETVAL = subscription_add(from, to); - OUTPUT: - RETVAL int subscription_remove(const char *from, const char *to) - CODE: - RETVAL = subscription_remove(from, to); - OUTPUT: - RETVAL void _subscription_list(const char *author, const char *str_offset, int direction) INIT: @@ -154,9 +164,10 @@ void _subscription_list(const char *author, const char *str_offset, int directio int count, i; PPCODE: offset = strtoull(str_offset, NULL, 0); + count = 50; list = subscription_list(author, offset, &count, direction); if (list == NULL) { - XSRETURN_UNDEF; + XSRETURN_EMPTY; } i = count - 1; @@ -170,3 +181,45 @@ void _subscription_list(const char *author, const char *str_offset, int directio int valid_tag_name(const char *name) int valid_name(const char *name) + +int auth_set_password(const char *username, const char *password) + +int auth_check_password(const char *username, const char *password) + +char * auth_login(const char *username, const char *password) + INIT: + char *token; + PPCODE: + token = auth_login(username, password); + if (token != NULL) { + XPUSHs(sv_2mortal(newSVpv(token, TOKEN_SIZE * 2))); + } else { + XSRETURN_UNDEF; + } + free(token); + +int auth_logout(const char *username, const char *token) + +int auth_check_token(const char *username, const char *given_token) + +void auth_get_counter(const char *username) + INIT: + uint32_t counter = 0; + PPCODE: + if (auth_get_counter(username, &counter)) { + XPUSHs(sv_2mortal(newSVuv(counter))); + } else { + XSRETURN_UNDEF; + } + +void configuration() + INIT: + HV *confhash; + PPCODE: + confhash = newHV(); + hv_store(confhash, "base_path", 9, newSVpv(blergconf.base_path, 0), 0); + hv_store(confhash, "data_path", 9, newSVpv(blergconf.data_path, 0), 0); + hv_store(confhash, "hash_tags_path", 14, newSVpv(blergconf.hash_tags_path, 0), 0); + hv_store(confhash, "ref_tags_path", 13, newSVpv(blergconf.ref_tags_path, 0), 0); + + XPUSHs(sv_2mortal(newRV_noinc((SV*)confhash)));