static void swift_handle_request(struct http_request *req, void (*a_handler)(struct http_request *req, const char *account), void (*c_handler)(struct http_request *req, const char *account, const char *container), void (*o_handler)(struct http_request *req, const char *account, const char *container, const char *object)) { char *args[4] = {}; char *version, *account, *container, *object; split_path(req->uri, ARRAY_SIZE(args), args); version = args[0]; account = args[1]; container = args[2]; object = args[3]; sd_info("%s", str_http_req(req)); if (account == NULL) { sd_info("invalid uri: %s", req->uri); http_response_header(req, NOT_FOUND); } else if (container == NULL) { sd_info("account operation, %s", account); a_handler(req, account); } else if (object == NULL) { sd_info("container operation, %s, %s", account, container); c_handler(req, account, container); } else { sd_info("object operation, %s, %s, %s", account, container, object); o_handler(req, account, container, object); } sd_info("%s", str_http_req(req)); free(version); free(account); free(container); free(object); }
int main(int argc, char const **argv) { options_handler o_handler(true); try { MSRTool *msr = nullptr; try { o_handler.handle_args(argc, argv, msr); } catch(po::error &e) { std::cerr << "ERROR: " << e.what() << std::endl << std::endl; std::cerr << *(o_handler.desc) << std::endl; return COMMAND_LINE_ERROR; } } catch(std::exception &e) { std::cerr << "An error occured:\n\n" << e.what() << "\nBailing out!" << std::endl; return UNHANDLED_EXCEPTION; } return 0; }