src/lib/url.h
author Tero Marttila <terom@fixme.fi>
Tue, 07 Oct 2008 18:38:03 +0300
changeset 13 385b9a10d096
child 14 115067dfba55
permissions -rw-r--r--
inital playing around with a lexer/url parser
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
 *
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
 * [ <scheme> [ "+" <scheme> [ ... ] ] "://" ] [ <username> [ ":" <password> ] "@" ] <hostname> [ ":" <service> ] [ "/" <path> ] [ "?" [ <key> [ "=" <value> ] ] [ "&" [ <key> [ "="     <value> ] ] [ ... ] ]
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
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
 * The schema
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
 */
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
struct url_schema {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    size_t count;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    const char **list;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
 * The options at the end
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
struct url_opts {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    size_t count;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    struct url_opt {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        const char *key;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        const char *value;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    } *list;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
 * A parsed URL
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
struct url {
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    struct url_schema *schema;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    const char *username;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    const char *password;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    const char *hostname;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    const char *service;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    const char *path;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    struct url_opts *opts;
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
};
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
/*
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
 * 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
    49
 * cause those values to be returned unmodified.
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
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
    52
385b9a10d096 inital playing around with a lexer/url parser
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
#endif /* LIB_URL_H */