#ifndef HTTP_AUTH_H #define HTTP_AUTH_H #include "array-decl.h" struct http_auth_param; struct http_auth_challenge; struct http_auth_credentials; ARRAY_DEFINE_TYPE(http_auth_param, struct http_auth_param); ARRAY_DEFINE_TYPE(http_auth_challenge, struct http_auth_challenge); struct http_auth_param { const char *name; const char *value; }; struct http_auth_challenge { const char *scheme; const char *data; ARRAY_TYPE(http_auth_param) params; }; struct http_auth_credentials { const char *scheme; const char *data; ARRAY_TYPE(http_auth_param) params; }; /* * Parsing */ int http_auth_parse_challenges(const unsigned char *data, size_t size, ARRAY_TYPE(http_auth_challenge) *chlngs); int http_auth_parse_credentials(const unsigned char *data, size_t size, struct http_auth_credentials *crdts); /* * Construction */ void http_auth_create_challenge(string_t *out, const struct http_auth_challenge *chlng); void http_auth_create_challenges(string_t *out, const ARRAY_TYPE(http_auth_challenge) *chlngs); void http_auth_create_credentials(string_t *out, const struct http_auth_credentials *crdts); /* * Manipulation */ void http_auth_challenge_copy(pool_t pool, struct http_auth_challenge *dst, const struct http_auth_challenge *src); struct http_auth_challenge * http_auth_challenge_clone(pool_t pool, const struct http_auth_challenge *src); void http_auth_credentials_copy(pool_t pool, struct http_auth_credentials *dst, const struct http_auth_credentials *src); struct http_auth_credentials * http_auth_credentials_clone(pool_t pool, const struct http_auth_credentials *src); /* * Simple schemes */ void http_auth_basic_challenge_init(struct http_auth_challenge *chlng, const char *realm); void http_auth_basic_credentials_init(struct http_auth_credentials *crdts, const char *username, const char *password); #endif