src/lib/url.h
author Tero Marttila <terom@fixme.fi>
Thu, 20 Nov 2008 01:16:24 +0200
branchnew-evsql
changeset 44 9e76ee9729b6
parent 16 74fb62022fb3
permissions -rw-r--r--
more work on the new evsql interface
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#ifndef LIB_URL_H
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#define LIB_URL_H
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
 * A trivial parser for simple URLs
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
 *
14
115067dfba55 more intermediate work
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
     7
 * [ <scheme> [ "+" <scheme> [ ... ] ] "://" ] [ <username> [ ":" <password> ] "@" ] [ <hostname> ] [ ":" <service> ] [ "/" <path> ] [ "?" [ <key> [ "=" <value> ] ] [ "&" [ <key> [ "="     <value> ] ] [ ... ] ]
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
 *
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
 *  example.com
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 *  tcp://example.com:7348/
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
 *  psql://postgres@localhost/test_db?charset=utf8
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
 *  
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    15
#include <sys/types.h>
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    16
#include <stdio.h>
15
a8d183e79ed9 look ma, it compiles\!
Tero Marttila <terom@fixme.fi>
parents: 14
diff changeset
    17
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
 * The schema
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
struct url_schema {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    size_t count;
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    23
    const char *list[];
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
 * The options at the end
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
struct url_opts {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    size_t count;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    struct url_opt {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        const char *key;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        const char *value;
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    34
    } list[];
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
 * A parsed URL
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
struct url {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    struct url_schema *schema;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    const char *username;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    const char *password;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    const char *hostname;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    const char *service;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    const char *path;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    struct url_opts *opts;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
 * Parse the given `text` as an URL, returning the result in `url`. Optional fields that are missing in the text will
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
 * cause those values to be returned unmodified.
14
115067dfba55 more intermediate work
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    53
 *
115067dfba55 more intermediate work
Tero Marttila <terom@fixme.fi>
parents: 13
diff changeset
    54
 * Returns zero if the url was valid and was parsed, nonzero if it was invalid.
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
int url_parse (struct url *url, const char *text);
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
16
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    58
/*
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    59
 * Prints a url in a debug-output format.
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    60
 */
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    61
void url_dump (const struct url *url, FILE *stream);
74fb62022fb3 starting to work
Tero Marttila <terom@fixme.fi>
parents: 15
diff changeset
    62
13
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
#endif /* LIB_URL_H */