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 17 typedef struct { 18 const char* data; 19 size_t length; 20 } ada_string; 21 22 // string that must be freed by the caller 23 typedef struct { 24 const char* data; 25 size_t length; 26 } ada_owned_string; 27 28 typedef 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 39 typedef 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 43 ada_url ada_parse(const char* input, size_t length); 44 ada_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 48 bool ada_can_parse(const char* input, size_t length); 49 bool ada_can_parse_with_base(const char* input, size_t input_length, 50 const char* base, size_t base_length); 51 52 void ada_free(ada_url result); 53 void ada_free_owned_string(ada_owned_string owned); 54 ada_url ada_copy(ada_url input); 55 56 bool ada_is_valid(ada_url result); 57 58 // url_aggregator getters 59 // if ada_is_valid(result)) is false, an empty string is returned 60 ada_owned_string ada_get_origin(ada_url result); 61 ada_string ada_get_href(ada_url result); 62 ada_string ada_get_username(ada_url result); 63 ada_string ada_get_password(ada_url result); 64 ada_string ada_get_port(ada_url result); 65 ada_string ada_get_hash(ada_url result); 66 ada_string ada_get_host(ada_url result); 67 ada_string ada_get_hostname(ada_url result); 68 ada_string ada_get_pathname(ada_url result); 69 ada_string ada_get_search(ada_url result); 70 ada_string ada_get_protocol(ada_url result); 71 uint8_t ada_get_host_type(ada_url result); 72 uint8_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 77 bool ada_set_href(ada_url result, const char* input, size_t length); 78 bool ada_set_host(ada_url result, const char* input, size_t length); 79 bool ada_set_hostname(ada_url result, const char* input, size_t length); 80 bool ada_set_protocol(ada_url result, const char* input, size_t length); 81 bool ada_set_username(ada_url result, const char* input, size_t length); 82 bool ada_set_password(ada_url result, const char* input, size_t length); 83 bool ada_set_port(ada_url result, const char* input, size_t length); 84 bool ada_set_pathname(ada_url result, const char* input, size_t length); 85 void ada_set_search(ada_url result, const char* input, size_t length); 86 void ada_set_hash(ada_url result, const char* input, size_t length); 87 88 // url_aggregator clear methods 89 void ada_clear_port(ada_url result); 90 void ada_clear_hash(ada_url result); 91 void ada_clear_search(ada_url result); 92 93 // url_aggregator functions 94 // if ada_is_valid(result) is false, functions below will return false 95 bool ada_has_credentials(ada_url result); 96 bool ada_has_empty_hostname(ada_url result); 97 bool ada_has_hostname(ada_url result); 98 bool ada_has_non_empty_username(ada_url result); 99 bool ada_has_non_empty_password(ada_url result); 100 bool ada_has_port(ada_url result); 101 bool ada_has_password(ada_url result); 102 bool ada_has_hash(ada_url result); 103 bool ada_has_search(ada_url result); 104 105 // returns a pointer to the internal url_aggregator::url_components 106 const ada_url_components* ada_get_components(ada_url result); 107 108 // idna methods 109 ada_owned_string ada_idna_to_unicode(const char* input, size_t length); 110 ada_owned_string ada_idna_to_ascii(const char* input, size_t length); 111 112 // url search params 113 typedef void* ada_url_search_params; 114 115 // Represents an std::vector<std::string> 116 typedef void* ada_strings; 117 typedef void* ada_url_search_params_keys_iter; 118 typedef void* ada_url_search_params_values_iter; 119 120 typedef struct { 121 ada_string key; 122 ada_string value; 123 } ada_string_pair; 124 125 typedef void* ada_url_search_params_entries_iter; 126 127 ada_url_search_params ada_parse_search_params(const char* input, size_t length); 128 void ada_free_search_params(ada_url_search_params result); 129 130 size_t ada_search_params_size(ada_url_search_params result); 131 void ada_search_params_sort(ada_url_search_params result); 132 ada_owned_string ada_search_params_to_string(ada_url_search_params result); 133 134 void 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); 137 void 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); 140 void ada_search_params_remove(ada_url_search_params result, const char* key, 141 size_t key_length); 142 void 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); 145 bool ada_search_params_has(ada_url_search_params result, const char* key, 146 size_t key_length); 147 bool 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); 150 ada_string ada_search_params_get(ada_url_search_params result, const char* key, 151 size_t key_length); 152 ada_strings ada_search_params_get_all(ada_url_search_params result, 153 const char* key, size_t key_length); 154 ada_url_search_params_keys_iter ada_search_params_get_keys( 155 ada_url_search_params result); 156 ada_url_search_params_values_iter ada_search_params_get_values( 157 ada_url_search_params result); 158 ada_url_search_params_entries_iter ada_search_params_get_entries( 159 ada_url_search_params result); 160 161 void ada_free_strings(ada_strings result); 162 size_t ada_strings_size(ada_strings result); 163 ada_string ada_strings_get(ada_strings result, size_t index); 164 165 void ada_free_search_params_keys_iter(ada_url_search_params_keys_iter result); 166 ada_string ada_search_params_keys_iter_next( 167 ada_url_search_params_keys_iter result); 168 bool ada_search_params_keys_iter_has_next( 169 ada_url_search_params_keys_iter result); 170 171 void ada_free_search_params_values_iter( 172 ada_url_search_params_values_iter result); 173 ada_string ada_search_params_values_iter_next( 174 ada_url_search_params_values_iter result); 175 bool ada_search_params_values_iter_has_next( 176 ada_url_search_params_values_iter result); 177 178 void ada_free_search_params_entries_iter( 179 ada_url_search_params_entries_iter result); 180 ada_string_pair ada_search_params_entries_iter_next( 181 ada_url_search_params_entries_iter result); 182 bool ada_search_params_entries_iter_has_next( 183 ada_url_search_params_entries_iter result); 184 185 #endif // ADA_C_H 186