1/** 2 * @file ada_c.h 3 * @brief Includes the C definitions for Ada. This is a C file, not C++. 4 */ 5#ifndef ADA_C_H 6#define ADA_C_H 7 8#include <stdbool.h> 9#include <stdint.h> 10#include <stddef.h> 11 12// This is a reference to ada::url_components::omitted 13// It represents "uint32_t(-1)" 14#define ada_url_omitted 0xffffffff 15 16// string that is owned by the ada_url instance 17typedef struct { 18 const char* data; 19 size_t length; 20} ada_string; 21 22// string that must be freed by the caller 23typedef struct { 24 const char* data; 25 size_t length; 26} ada_owned_string; 27 28typedef struct { 29 uint32_t protocol_end; 30 uint32_t username_end; 31 uint32_t host_start; 32 uint32_t host_end; 33 uint32_t port; 34 uint32_t pathname_start; 35 uint32_t search_start; 36 uint32_t hash_start; 37} ada_url_components; 38 39typedef void* ada_url; 40 41// input should be a null terminated C string (ASCII or UTF-8) 42// you must call ada_free on the returned pointer 43ada_url ada_parse(const char* input, size_t length); 44ada_url ada_parse_with_base(const char* input, size_t input_length, 45 const char* base, size_t base_length); 46 47// input and base should be a null terminated C strings 48bool ada_can_parse(const char* input, size_t length); 49bool ada_can_parse_with_base(const char* input, size_t input_length, 50 const char* base, size_t base_length); 51 52void ada_free(ada_url result); 53void ada_free_owned_string(ada_owned_string owned); 54ada_url ada_copy(ada_url input); 55 56bool ada_is_valid(ada_url result); 57 58// url_aggregator getters 59// if ada_is_valid(result)) is false, an empty string is returned 60ada_owned_string ada_get_origin(ada_url result); 61ada_string ada_get_href(ada_url result); 62ada_string ada_get_username(ada_url result); 63ada_string ada_get_password(ada_url result); 64ada_string ada_get_port(ada_url result); 65ada_string ada_get_hash(ada_url result); 66ada_string ada_get_host(ada_url result); 67ada_string ada_get_hostname(ada_url result); 68ada_string ada_get_pathname(ada_url result); 69ada_string ada_get_search(ada_url result); 70ada_string ada_get_protocol(ada_url result); 71uint8_t ada_get_host_type(ada_url result); 72uint8_t ada_get_scheme_type(ada_url result); 73 74// url_aggregator setters 75// if ada_is_valid(result)) is false, the setters have no effect 76// input should be a null terminated C string 77bool ada_set_href(ada_url result, const char* input, size_t length); 78bool ada_set_host(ada_url result, const char* input, size_t length); 79bool ada_set_hostname(ada_url result, const char* input, size_t length); 80bool ada_set_protocol(ada_url result, const char* input, size_t length); 81bool ada_set_username(ada_url result, const char* input, size_t length); 82bool ada_set_password(ada_url result, const char* input, size_t length); 83bool ada_set_port(ada_url result, const char* input, size_t length); 84bool ada_set_pathname(ada_url result, const char* input, size_t length); 85void ada_set_search(ada_url result, const char* input, size_t length); 86void ada_set_hash(ada_url result, const char* input, size_t length); 87 88// url_aggregator clear methods 89void ada_clear_port(ada_url result); 90void ada_clear_hash(ada_url result); 91void ada_clear_search(ada_url result); 92 93// url_aggregator functions 94// if ada_is_valid(result) is false, functions below will return false 95bool ada_has_credentials(ada_url result); 96bool ada_has_empty_hostname(ada_url result); 97bool ada_has_hostname(ada_url result); 98bool ada_has_non_empty_username(ada_url result); 99bool ada_has_non_empty_password(ada_url result); 100bool ada_has_port(ada_url result); 101bool ada_has_password(ada_url result); 102bool ada_has_hash(ada_url result); 103bool ada_has_search(ada_url result); 104 105// returns a pointer to the internal url_aggregator::url_components 106const ada_url_components* ada_get_components(ada_url result); 107 108// idna methods 109ada_owned_string ada_idna_to_unicode(const char* input, size_t length); 110ada_owned_string ada_idna_to_ascii(const char* input, size_t length); 111 112// url search params 113typedef void* ada_url_search_params; 114 115// Represents an std::vector<std::string> 116typedef void* ada_strings; 117typedef void* ada_url_search_params_keys_iter; 118typedef void* ada_url_search_params_values_iter; 119 120typedef struct { 121 ada_string key; 122 ada_string value; 123} ada_string_pair; 124 125typedef void* ada_url_search_params_entries_iter; 126 127ada_url_search_params ada_parse_search_params(const char* input, size_t length); 128void ada_free_search_params(ada_url_search_params result); 129 130size_t ada_search_params_size(ada_url_search_params result); 131void ada_search_params_sort(ada_url_search_params result); 132ada_owned_string ada_search_params_to_string(ada_url_search_params result); 133 134void ada_search_params_append(ada_url_search_params result, const char* key, 135 size_t key_length, const char* value, 136 size_t value_length); 137void ada_search_params_set(ada_url_search_params result, const char* key, 138 size_t key_length, const char* value, 139 size_t value_length); 140void ada_search_params_remove(ada_url_search_params result, const char* key, 141 size_t key_length); 142void ada_search_params_remove_value(ada_url_search_params result, 143 const char* key, size_t key_length, 144 const char* value, size_t value_length); 145bool ada_search_params_has(ada_url_search_params result, const char* key, 146 size_t key_length); 147bool ada_search_params_has_value(ada_url_search_params result, const char* key, 148 size_t key_length, const char* value, 149 size_t value_length); 150ada_string ada_search_params_get(ada_url_search_params result, const char* key, 151 size_t key_length); 152ada_strings ada_search_params_get_all(ada_url_search_params result, 153 const char* key, size_t key_length); 154ada_url_search_params_keys_iter ada_search_params_get_keys( 155 ada_url_search_params result); 156ada_url_search_params_values_iter ada_search_params_get_values( 157 ada_url_search_params result); 158ada_url_search_params_entries_iter ada_search_params_get_entries( 159 ada_url_search_params result); 160 161void ada_free_strings(ada_strings result); 162size_t ada_strings_size(ada_strings result); 163ada_string ada_strings_get(ada_strings result, size_t index); 164 165void ada_free_search_params_keys_iter(ada_url_search_params_keys_iter result); 166ada_string ada_search_params_keys_iter_next( 167 ada_url_search_params_keys_iter result); 168bool ada_search_params_keys_iter_has_next( 169 ada_url_search_params_keys_iter result); 170 171void ada_free_search_params_values_iter( 172 ada_url_search_params_values_iter result); 173ada_string ada_search_params_values_iter_next( 174 ada_url_search_params_values_iter result); 175bool ada_search_params_values_iter_has_next( 176 ada_url_search_params_values_iter result); 177 178void ada_free_search_params_entries_iter( 179 ada_url_search_params_entries_iter result); 180ada_string_pair ada_search_params_entries_iter_next( 181 ada_url_search_params_entries_iter result); 182bool ada_search_params_entries_iter_has_next( 183 ada_url_search_params_entries_iter result); 184 185#endif // ADA_C_H 186