X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/ffc4dbaf1ee655263fd979d6c554ead000bef8e1..cca956b199841d754e8a78391d2e2c7efce4a3ee:/lib/eclient.c diff --git a/lib/eclient.c b/lib/eclient.c index 7023187..a9805f7 100644 --- a/lib/eclient.c +++ b/lib/eclient.c @@ -21,20 +21,15 @@ * @brief Client code for event-driven programs */ -#include -#include "types.h" +#include "common.h" #include #include #include #include -#include -#include #include #include #include -#include -#include #include #include #include @@ -841,9 +836,11 @@ static void stash_command(disorder_eclient *c, static void string_response_opcallback(disorder_eclient *c, struct operation *op) { D(("string_response_callback")); - if(c->rc / 100 == 2) { + if(c->rc / 100 == 2 || c->rc == 555) { if(op->completed) { - if(c->protocol >= 2) { + if(c->rc == 555) + ((disorder_eclient_string_response *)op->completed)(op->v, NULL); + else if(c->protocol >= 2) { char **rr = split(c->line + 4, 0, SPLIT_QUOTES, 0, 0); if(rr && *rr) @@ -1277,6 +1274,72 @@ int disorder_eclient_users(disorder_eclient *c, "users", (char *)0); } +/** @brief Delete a user + * @param c Client + * @param completed Called on completion + * @param user User to delete + * @param v Passed to @p completed + */ +int disorder_eclient_deluser(disorder_eclient *c, + disorder_eclient_no_response *completed, + const char *user, + void *v) { + return simple(c, no_response_opcallback, (void (*)())completed, v, + "deluser", user, (char *)0); +} + +/** @brief Get a user property + * @param c Client + * @param completed Called on completion + * @param user User to look up + * @param property Property to look up + * @param v Passed to @p completed + */ +int disorder_eclient_userinfo(disorder_eclient *c, + disorder_eclient_string_response *completed, + const char *user, + const char *property, + void *v) { + return simple(c, string_response_opcallback, (void (*)())completed, v, + "userinfo", user, property, (char *)0); +} + +/** @brief Modify a user property + * @param c Client + * @param completed Called on completion + * @param user User to modify + * @param property Property to modify + * @param value New property value + * @param v Passed to @p completed + */ +int disorder_eclient_edituser(disorder_eclient *c, + disorder_eclient_no_response *completed, + const char *user, + const char *property, + const char *value, + void *v) { + return simple(c, no_response_opcallback, (void (*)())completed, v, + "edituser", user, property, value, (char *)0); +} + +/** @brief Create a new user + * @param c Client + * @param completed Called on completion + * @param user User to create + * @param password Initial password + * @param rights Initial rights or NULL + * @param v Passed to @p completed + */ +int disorder_eclient_adduser(disorder_eclient *c, + disorder_eclient_no_response *completed, + const char *user, + const char *password, + const char *rights, + void *v) { + return simple(c, no_response_opcallback, (void (*)())completed, v, + "adduser", user, password, rights, (char *)0); +} + /* Log clients ***************************************************************/ /** @brief Monitor the server log @@ -1336,7 +1399,7 @@ static void logline(disorder_eclient *c, const char *line) { return; } /* TODO: do something with the time */ - n = TABLE_FIND(logentry_handlers, struct logentry_handler, name, vec[1]); + n = TABLE_FIND(logentry_handlers, name, vec[1]); if(n < 0) return; /* probably a future command */ vec += 2; nvec -= 2;