diff options
-rw-r--r-- | admin.c | 118 | ||||
-rw-r--r-- | login.h | 20 | ||||
-rw-r--r-- | member.c | 51 | ||||
-rw-r--r-- | ord.c | 62 | ||||
-rw-r--r-- | request.c | 37 | ||||
-rw-r--r-- | request.h | 11 |
6 files changed, 153 insertions, 146 deletions
@@ -16,75 +16,81 @@ void interchange_admin_login(const char *username, const char *password, failpage, handler, (void (*)(void *))callback); } -void interchange_admin_new_admin(const char *username, const char *password, const char *name, bool super, - enum interchange_admin_group group, void (*handler)(interchange_response *)) +void interchange_admin_new_admin(const char *username, const char *password, + const char *name, bool super, + enum interchange_admin_group group, + void (*handler)(interchange_response *)) { - request(handler, NULL, &(struct body){ 13, { - { "mv_todo", "set" }, - { "mv_data_table", "access" }, - { "mv_data_key", "username" }, - { "mv_update_empty", "1" }, - { "mv_data_fields", "username password name super groups" }, - { "mv_click", "process_filter" }, - { "user_id", "NEW" }, - { "name", name }, - { "mv_data_function", "insert" }, - { "username", username }, - { "password", password }, - { "super", super ? "1" : "0" }, - { "groups", group == INTERCHANGE_ADMIN_GROUP_CONTENT ? ":CONTENT" - : group == INTERCHANGE_ADMIN_GROUP_MERCH ? ":MERCH" : ":ORDERS" } - }}, "%s", "ui"); + request(handler, NULL, (const char *[][2]){ + "mv_todo", "set", + "mv_data_table", "access", + "mv_data_key", "username", + "mv_update_empty", "1", + "mv_data_fields", "username password name super groups", + "mv_click", "process_filter", + "user_id", "NEW", + "name", name, + "mv_data_function", "insert", + "username", username, + "password", password, + "super", super ? "1" : "0", + "groups", group == INTERCHANGE_ADMIN_GROUP_CONTENT ? ":CONTENT" + : group == INTERCHANGE_ADMIN_GROUP_MERCH ? ":MERCH" : ":ORDERS" + }, "%s", "ui"); } -void interchange_admin_new_item(const char *description, const char *comment, const char *price, - const char *image_path, void (*handler)(interchange_response *)) +void interchange_admin_new_item(const char *description, const char *comment, + const char *price, const char *image_path, + void (*handler)(interchange_response *)) { - request(handler, NULL, &(struct body){ 15, { - { "mv_click", "process_filter" }, - { "mv_data_fields", "sku description prod_group category comment inactive price wholesale" - "image thumb image_large weight nontaxable gift_cert" }, - { "mv_ui", "1" }, - { "ui_new_item", "1" }, - { "mv_todo", "set" }, - { "mv_update_empty", "1" }, - { "mv_action", "set" }, - { "mv_data_table", "products" }, - { "mv_data_function", "insert" }, - { "mv_data_key", "sku" }, - { "mv_return_table", "products" }, - { "sku", image_path }, - { "description", description }, - { "comment", comment }, - { "price", price } + request(handler, NULL, (const char *[][2]){ + "mv_click", "process_filter", + "mv_data_fields", + "sku description prod_group category comment inactive price " + "wholesale image thumb image_large weight nontaxable gift_cert", + "mv_ui", "1", + "ui_new_item", "1", + "mv_todo", "set", + "mv_update_empty", "1", + "mv_action", "set", + "mv_data_table", "products", + "mv_data_function", "insert", + "mv_data_key", "sku", + "mv_return_table", "products", + "sku", image_path, + "description", description, + "comment", comment, + "price", price, /* - { "image", + "image", CURLFORM_FILE, image_path, - CURLFORM_CONTENTTYPE, "image/jpeg" }, - { "mv_data_file_field", "image" }, - { "mv_data_file_path", "images/items" } + CURLFORM_CONTENTTYPE, "image/jpeg", + "mv_data_file_field", "image", + "mv_data_file_path", "images/items" */ - }}, "%s", "admin/item_edit"); + NULL + }, "%s", "admin/item_edit"); } void interchange_admin_new_transaction(const struct interchange_ord_order *order, const struct interchange_member *member, bool new_customer_id, void (*handler)(interchange_response *)) { - request(handler, NULL, &(struct body){ 12, { - { "mv_values_space", "order_entry" }, - { "order_desk_entry", "1" }, - { "customer_id", member->username }, - { "new_customer_id", new_customer_id ? "1" : "0" }, - { "fname", member->fname }, - { "lname", member->lname }, - { "address1", member->address1 }, - { "city", member->city }, - { "zip", member->zip }, - { "email", member->email }, - { "country", member->country }, - { "phone_day", member->phone_day } - }}, "%s", "process"); + request(handler, NULL, (const char *[][2]){ + "mv_values_space", "order_entry", + "order_desk_entry", "1", + "customer_id", member->username, + "new_customer_id", new_customer_id ? "1" : "0", + "fname", member->fname, + "lname", member->lname, + "address1", member->address1, + "city", member->city, + "zip", member->zip, + "email", member->email, + "country", member->country, + "phone_day", member->phone_day, + NULL + }, "%s", "process"); } void interchange_admin_logout() @@ -9,16 +9,16 @@ static inline void login(const char *username, const char *password, void (*handler)(interchange_response *), void (*callback)(void *)) { - request(handler, callback, &(struct body){ 5 + (successpage ? 1 : 0) - + (failpage ? 1 : 0), { - { "mv_username", username }, - { "mv_password", password }, - { "mv_verify", verify }, - { "mv_click", click }, - { "mv_nextpage", nextpage }, - { "mv_successpage", successpage }, - { "mv_failpage", failpage }, - }}, "%s", "process"); + request(handler, callback, (const char *[][2]){ + "mv_username", username, + "mv_password", password, + "mv_verify", verify, + "mv_click", click, + "mv_nextpage", nextpage, + "mv_successpage", successpage, + "mv_failpage", failpage, + NULL + }, "%s", "process"); } #endif @@ -31,33 +31,36 @@ void interchange_member_account(void (*handler)(interchange_response *)) void interchange_member_setaccount(const struct interchange_member *member, void (*handler)(interchange_response *)) { - request(handler, NULL, &(struct body){ 13, { - { "mv_form_profile", "account_change" }, - { "mv_todo", "return" }, - { "mv_nextpage", "member/account" }, - { "mv_check", "Save_database" }, - { "fname", member->fname }, - { "lname", member->lname }, - { "address1", member->address1 }, - { "address2", member->address2 }, - { "city", member->city }, - { "state", member->state }, - { "zip", member->zip }, - { "email", member->email }, - { "phone_day", member->phone_day } - }}, "%s", "process"); + request(handler, NULL, (const char *[][2]){ + "mv_form_profile", "account_change", + "mv_todo", "return", + "mv_nextpage", "member/account", + "mv_check", "Save_database", + "fname", member->fname, + "lname", member->lname, + "address1", member->address1, + "address2", member->address2, + "city", member->city, + "state", member->state, + "zip", member->zip, + "email", member->email, + "phone_day", member->phone_day, + NULL + }, "%s", "process"); } -void interchange_member_changepassword(const char *password_old, const char *password, const char *verify) +void interchange_member_changepassword(const char *password_old, + const char *password, const char *verify) { - request(NULL, NULL, &(struct body){ 6, { - { "mv_action", "return" }, - { "mv_check", "Change_password" }, - { "mv_successpage", "member/service" }, - { "mv_password_old", password_old }, - { "mv_password", password }, - { "mv_verify", verify } - }}, "%s", "member/change_password"); + request(NULL, NULL, (const char *[][2]){ + "mv_action", "return", + "mv_check", "Change_password", + "mv_successpage", "member/service", + "mv_password_old", password_old, + "mv_password", password, + "mv_verify", verify, + NULL + }, "%s", "member/change_password"); } void interchange_member_logout() @@ -17,12 +17,13 @@ void interchange_ord_order(const char *sku, const char *item, } while ((qty /= 10)); char *qty_str = malloc(length + 1); sprintf(qty_str, "%d", quantity); - request(parser, NULL, &(struct body){ 4, { - { "mv_action", "refresh" }, - { "mv_sku", sku }, - { "mv_order_item", item }, - { "mv_order_quantity", qty_str } - }}, "%s", "ord/basket"); + request(parser, NULL, (const char *[][2]){ + "mv_action", "refresh", + "mv_sku", sku, + "mv_order_item", item, + "mv_order_quantity", qty_str, + NULL + }, "%s", "ord/basket"); } void interchange_ord_update(const char *name, const unsigned int quantity, @@ -36,35 +37,38 @@ void interchange_ord_update(const char *name, const unsigned int quantity, } while ((qty /= 10)); char *qty_str = malloc(length + 1); sprintf(qty_str, "%d", quantity); - request(parser, NULL, &(struct body){ 4 + (nextpage ? 1 : 0), { - { "mv_quantity_update", "1" }, - { "mv_doit", "refresh" }, - { name, qty_str }, - { "mv_orderpage", orderpage ? orderpage : "ord/basket" }, - { "mv_nextpage", nextpage } - }}, "%s", "process"); + request(parser, NULL, (const char *[][2]){ + "mv_quantity_update", "1", + "mv_doit", "refresh", + name, qty_str, + "mv_orderpage", orderpage ? orderpage : "ord/basket", + "mv_nextpage", nextpage, + NULL + }, "%s", "process"); } void interchange_ord_checkout(const char *order_profile, struct interchange_member member, void (*handler)(interchange_response *)) { - request(handler, NULL, &(struct body){ 14, { - { "mv_todo", "submit" }, - { "mv_action", "refresh" }, - { "mv_order_profile", order_profile }, - { "fname", member.fname }, - { "lname", member.lname }, - { "address1", member.address1 }, - { "address2", member.address2 }, - { "city", member.city }, - { "state", member.state }, - { "zip", member.zip }, - { "email", member.email }, - { "phone_day", member.phone_day }, - { "mv_same_billing", member.preferences.mv_same_billing? "1" : "0" }, - { "email_copy", member.preferences.email_copy? "1" : "0" } - }}, "%s", "ord/checkout"); + request(handler, NULL, (const char *[][2]){ + "mv_todo", "submit", + "mv_action", "refresh", + "mv_order_profile", order_profile, + "fname", member.fname, + "lname", member.lname, + "address1", member.address1, + "address2", member.address2, + "city", member.city, + "state", member.state, + "zip", member.zip, + "email", member.email, + "phone_day", member.phone_day, + "mv_same_billing", + member.preferences.mv_same_billing ? "1" : "0", + "email_copy", member.preferences.email_copy? "1" : "0", + NULL + }, "%s", "ord/checkout"); } void interchange_ord_free_order(struct interchange_ord_order *order) @@ -59,7 +59,8 @@ static void *async(void *arg) } #endif -void request(void (*handler)(interchange_response *), void (*callback)(void *), struct body *body, char *fmt, ...) +void request(void (*handler)(interchange_response *), void (*callback)(void *), + const char *body[][2], char *fmt, ...) { va_list ap; char *p, *sval; @@ -125,17 +126,18 @@ void request(void (*handler)(interchange_response *), void (*callback)(void *), size_t length = 0; char *post = malloc(1); memset(post, '\0', 1); - for (size_t i = 0; i < body->num_pairs; i++) { - struct pair pair = body->pairs[i]; - if (!pair.value) - continue; - length += strlen(pair.key) + strlen(pair.value) + (i ? 1 : 0) + 1; + size_t i = 0; + const char **pair = *body; + while (pair[0] && pair[1]) { + length += strlen(pair[0]) + strlen(pair[1]) + + (i ? 1 : 0) + 1; post = realloc(post, length + 1); - if (i) + if (i++) strcat(post, "&"); - sprintf(post, "%s%s=%s", post, pair.key, pair.value); - if (!strncmp(pair.key, "quantity", 8)) - free(pair.value); + sprintf(post, "%s%s=%s", post, pair[0], pair[1]); + if (!strncmp(pair[0], "quantity", 8)) + free((void *)pair[1]); + pair = *++body; } strcpy(attr.requestMethod, "POST"); static const char *headers[] = { "Content-Type", @@ -171,15 +173,14 @@ void request(void (*handler)(interchange_response *), void (*callback)(void *), struct curl_httppost *post = NULL; struct curl_httppost *last = NULL; if (body) { - for (size_t i = 0; i < body->num_pairs; i++) { - struct pair pair = body->pairs[i]; - if (!pair.value) - continue; - curl_formadd(&post, &last, CURLFORM_COPYNAME, pair.key, - CURLFORM_COPYCONTENTS, pair.value, + const char **pair = *body; + while (pair[0] && pair[1]) { + curl_formadd(&post, &last, CURLFORM_COPYNAME, pair[0], + CURLFORM_COPYCONTENTS, pair[1], CURLFORM_END); - if (!strncmp(pair.key, "quantity", 8)) - free(pair.value); + if (!strncmp(pair[0], "quantity", 8)) + free((void *)pair[1]); + pair = *++body; } last = NULL; curl_easy_setopt(curl, CURLOPT_HTTPPOST, post); @@ -3,14 +3,7 @@ #include "interchange/typedefs.h" -struct body { - size_t num_pairs; - struct pair { - const char *key; - const char *value; - } pairs[16]; -}; - -void request(void (*)(interchange_response *), void (*)(void *), struct body *, char *, ...); +void request(void (*)(interchange_response *), void (*)(void *), + const char *[][2], char *, ...); #endif |