💾 Archived View for gemini.thededem.de › lc19 › src › include › url.h captured on 2021-12-03 at 14:04:38.

View Raw

More Information

-=-=-=-=-=-=-

/* Copyright 2020, 2021 Lukas Wedeking
 *
 * This file is part of LC19.
 *
 * LC19 is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * LC19 is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with LC19.  If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef GEMINI_SERVER_URL_H
#define GEMINI_SERVER_URL_H

#include<stdbool.h>
#include<stddef.h>

struct Url {
	char *scheme;
	char *userinfo;
	char *host;
	char *port;
	char *path; /* The decoded normalized path. */
	char *path_orig; /* The unprocessed path from the URL string. */
	char *query;
	char *fragment;
	char *junk;
};

size_t url_char_is_gen_delim(const char *url, size_t offset, size_t max_length);

size_t url_char_is_sub_delim(const char *url, size_t offset, size_t max_length);

size_t url_char_is_reserved(const char *url, size_t offset, size_t max_length);

size_t url_char_is_ucschar(const char *url, size_t offset, size_t max_length);

size_t url_char_is_unreserved(const char *url, size_t offset, size_t max_length);

size_t url_char_is_iprivate(const char *url, size_t offset, size_t max_length);

size_t url_char_is_hex(char c);

size_t url_char_is_pct_enc(const char *url, size_t offset, size_t max_length);

size_t url_find_scheme_end(const char *url, const size_t max_length);

size_t url_find_userinfo_end(const char *url, const size_t offset,
		const size_t max_length);

size_t url_find_host_end(const char *url, const size_t offset,
		const size_t max_length);

size_t url_find_port_end(const char *url, const size_t offset,
		const size_t max_length);

size_t url_find_path_end(const char *url, const size_t offset,
		const size_t max_length, int schemeless, int absolute);

size_t url_find_query_end(const char *url, const size_t offset,
		const size_t max_length);

size_t url_find_fragment_end(const char *url, const size_t offset,
		const size_t max_length);

char* url_part_alloc(const char *url, size_t start, size_t end);

void url_decode_pct(char *s);

void url_normalize_path(char *path);

void url_destroy(struct Url *url);

struct Url *url_create(const char *url, size_t max_length);

char *url_pct_encode_path(const char *s, int schemeless);

void url_normalize_pct_encoding(char *s);

#endif