Parsing macros and prototypes for HTTP-like protocols. More...
#include <sofia-sip/su_types.h>
#include <string.h>
Go to the source code of this file.
Defines | |
#define | BNF_H |
Defined when <sofia-sip/bnf.h> has been included. | |
#define | CTL |
Control characters. | |
#define | SP " " |
Space. | |
#define | HT "\t" |
Horizontal tab. | |
#define | CR "\r" |
Carriage return. | |
#define | LF "\n" |
Line feed. | |
#define | CRLF CR LF |
Line-ending characters. | |
#define | WS SP HT |
Whitespace. | |
#define | LWS SP HT CR LF |
Linear whitespace. | |
#define | LOALPHA "abcdefghijklmnopqrstuvwxyz" |
Lower-case alphabetic characters. | |
#define | UPALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
Upper-case alphabetic characters. | |
#define | ALPHA LOALPHA UPALPHA |
Alphabetic characters. | |
#define | DIGIT "0123456789" |
Digits. | |
#define | SAFE "$-_." |
RTSP safe characters. | |
#define | SIP_TOKEN ALPHANUM "-.!%*_+`'~" |
SIP token characters. | |
#define | SIP_SEPARATOR "()<>@,;:\\\"/[]?={}" SP HT |
SIP separator characters. | |
#define | SIP_WORD "()<>:\\\"/[]?{}" |
SIP Word characters (that are not token characters). | |
#define | skip_ws(ss) (*(ss) += span_ws(*(ss))) |
Skip whitespace (SP HT). | |
#define | skip_lws(ss) (*(ss) += span_lws(*(ss))) |
Skip linear whitespace (SP HT CR LF). | |
#define | skip_alpha(ss) (*(ss) += span_alpha(*(ss))) |
Skip [a-zA-Z]. | |
#define | skip_digit(ss) (*(ss) += span_digit(*(ss))) |
Skip digits. | |
#define | skip_alpha_digit_safe(ss) (*(ss) += span_alpha_digit_safe(*(ss))) |
Skip characters belonging to an RTSP token. | |
#define | skip_token(ss) (*(ss) += span_token(*(ss))) |
Skip characters belonging to a SIP token. | |
#define | skip_param(ss) (*(ss) += span_param(*(ss))) |
Skip characters belonging to a SIP parameter value. | |
#define | skip_word(ss) (*(ss) += span_word(*(ss))) |
Skip characters belonging to a SIP word. | |
#define | IS_CRLF(c) ((c) == '\r' || (c) == '\n') |
Test if is CR or LF. | |
#define | IS_LWS(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n') |
Test if is linear whitespace. | |
#define | IS_WS(c) ((c) == ' ' || (c) == '\t') |
Test if is normal whitespace. | |
#define | IS_NON_WS(c) (c && !IS_WS(c)) |
Test if is not whitespace (and not NUL). | |
#define | IS_NON_LWS(c) (c && !IS_LWS(c)) |
Test if is not linear whitespace (and not NUL). | |
#define | IS_DIGIT(c) ((c) >= '0' && (c) <= '9') |
Test if is a digit. | |
#define | IS_ALPHA(c) (c && ((_bnf_table[(unsigned char)c] & bnf_alpha))) |
Test if is alphabetic. | |
#define | IS_ALPHANUM(c) (c && (IS_DIGIT(c) || IS_ALPHA(c))) |
Test if is alphanumeric. | |
#define | IS_UNRESERVED(c) ((_bnf_table[(unsigned char)c] & bnf_unreserved)) |
Test if is URL-unreserved. | |
#define | IS_RESERVED(c) (c && !(_bnf_table[(unsigned char)c] & bnf_unreserved)) |
Test if is URL-reserved. | |
#define | IS_TOKEN(c) ((_bnf_table[(unsigned char)c] & bnf_token)) |
Test if is valid in tokens. | |
#define | IS_PARAM(c) ((_bnf_table[(unsigned char)c] & (bnf_token|bnf_param))) |
Test if is valid for SIP parameter value. | |
#define | IS_HEX(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) |
Test if is a hex digit. | |
#define | IS_TOKENLWS(c) ((_bnf_table[(unsigned char)c] & (bnf_token|bn_lws))) |
Test if is a linear whitespace or valid in tokens. | |
#define | span_non_crlf(s) strcspn(s, CR LF) |
Get number of characters before CRLF. | |
#define | span_non_ws(s) strcspn(s, WS) |
Get number of characters before whitespace. | |
#define | span_ws(s) strspn(s, WS) |
Get number of whitespace characters. | |
#define | span_non_lws(s) strcspn(s, LWS) |
Get number of characters before linear whitespace. | |
#define | URL_RESERVED ";/?:=+$," |
Reserved in URLs. | |
#define | URL_MARK "-_.!~*'()" |
Non-alphanumeric characters without syntactical meaning. | |
#define | URL_UNRESERVED ALPHANUM URL_MARK |
Unreserved characters. | |
#define | URL_ESCAPED "%" |
URL hex escape. | |
#define | span_url_scheme(s) strspn(s, URL_SCHEME) |
Get number of characters belonging to url scheme. | |
Enumerations | |
enum | { bnf_ws = 1, bnf_crlf = 2, bnf_lws = 3, bnf_alpha = 4, bnf_safe = 8, bnf_mark = 16, bnf_unreserved = bnf_alpha | bnf_mark, bnf_separator = 32, bnf_token0 = 64 | bnf_safe, bnf_token = bnf_token0 | bnf_alpha, bnf_param0 = 128, bnf_param = bnf_token | bnf_param0 } |
Functions | |
isize_t | span_lws (char const *s) |
Calculate span of a linear whitespace. | |
isize_t | span_token_lws (char const *s) |
Calculate span of a token or linear whitespace characters. | |
isize_t | span_token (char const *s) |
Calculate span of a token characters. | |
isize_t | span_alpha (char const *s) |
Calculate span of a alphabetic characters. | |
isize_t | span_digit (char const *s) |
Calculate span of a digits. | |
isize_t | span_hexdigit (char const *s) |
Calculate span of a hex. | |
isize_t | span_alpha_digit_safe (char const *s) |
Calculate span of characters belonging to an RTSP token. | |
isize_t | span_param (char const *s) |
Calculate span of a characters valid in parameters. | |
isize_t | span_word (char const *s) |
Calculate span of a SIP word. | |
isize_t | span_unreserved (char const *s) |
Calculate span of a unreserved characters. | |
isize_t | span_quoted (char const *s) |
Calculate span of a double quoted string (with escaped chars inside). | |
int | span_ip4_address (char const *host) |
Return length of valid IP4 address. | |
int | span_ip6_address (char const *host) |
Return length of valid IP6 address. | |
int | span_ip6_reference (char const *host) |
Return length of valid IP6 reference. | |
int | span_ip_address (char const *host) |
Return length of valid IP4 or IP6 address. | |
isize_t | span_domain (char const *host) |
Return length of a valid domain name. | |
isize_t | span_host (char const *host) |
Return length of a valid domain name or IP address. | |
int | scan_ip4_address (char **inout_host) |
Scan and canonize a valid IP4 address. | |
int | scan_ip6_address (char **inout_host) |
Scan and canonize valid IP6 address. | |
int | scan_ip6_reference (char **inout_host) |
Scan valid IP6 reference. | |
int | scan_ip_address (char **inout_host) |
Scan valid IP4/IP6 address. | |
issize_t | scan_domain (char **inout_host) |
Scan valid domain name. | |
issize_t | scan_host (char **inout_host) |
Scan valid domain name or IP address. | |
Variables | |
unsigned char const | _bnf_table [256] |
Table for determining class of a character. |
Parsing macros and prototypes for HTTP-like protocols.
#define BNF_H |
Defined when <sofia-sip/bnf.h> has been included.
#define CTL |
Control characters.
#define IS_ALPHA | ( | c | ) | (c && ((_bnf_table[(unsigned char)c] & bnf_alpha))) |
Test if is
alphabetic.
#define IS_ALPHANUM | ( | c | ) | (c && (IS_DIGIT(c) || IS_ALPHA(c))) |
Test if is
alphanumeric.
#define IS_DIGIT | ( | c | ) | ((c) >= '0' && (c) <= '9') |
Test if is
a digit.
#define IS_HEX | ( | c | ) | (((c) >= '0' && (c) <= '9') || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) |
Test if is
a hex digit.
#define IS_NON_LWS | ( | c | ) | (c && !IS_LWS(c)) |
Test if is
not linear whitespace (and not NUL).
#define IS_NON_WS | ( | c | ) | (c && !IS_WS(c)) |
Test if is
not whitespace (and not NUL).
#define IS_PARAM | ( | c | ) | ((_bnf_table[(unsigned char)c] & (bnf_token|bnf_param))) |
Test if is
valid for SIP parameter value.
#define IS_RESERVED | ( | c | ) | (c && !(_bnf_table[(unsigned char)c] & bnf_unreserved)) |
Test if is
URL-reserved.
#define IS_TOKEN | ( | c | ) | ((_bnf_table[(unsigned char)c] & bnf_token)) |
Test if is
valid in tokens.
#define IS_TOKENLWS | ( | c | ) | ((_bnf_table[(unsigned char)c] & (bnf_token|bn_lws))) |
Test if is
a linear whitespace or valid in tokens.
#define IS_UNRESERVED | ( | c | ) | ((_bnf_table[(unsigned char)c] & bnf_unreserved)) |
Test if is
URL-unreserved.
#define SIP_TOKEN ALPHANUM "-.!%*_+`'~" |
SIP token characters.
#define skip_alpha_digit_safe | ( | ss | ) | (*(ss) += span_alpha_digit_safe(*(ss))) |
Skip characters belonging to an RTSP token.
#define skip_param | ( | ss | ) | (*(ss) += span_param(*(ss))) |
Skip characters belonging to a SIP parameter value.
#define skip_token | ( | ss | ) | (*(ss) += span_token(*(ss))) |
Skip characters belonging to a SIP token.
#define skip_word | ( | ss | ) | (*(ss) += span_word(*(ss))) |
Skip characters belonging to a SIP word.
#define URL_ESCAPED "%" |
URL hex escape.
#define URL_MARK "-_.!~*'()" |
Non-alphanumeric characters without syntactical meaning.
#define URL_UNRESERVED ALPHANUM URL_MARK |
Unreserved characters.
anonymous enum |
issize_t scan_domain | ( | char ** | inout_host | ) |
Scan valid domain name.
issize_t scan_host | ( | char ** | inout_host | ) |
Scan valid domain name or IP address.
int scan_ip4_address | ( | char ** | inout_host | ) |
Scan and canonize a valid IP4 address.
int scan_ip6_address | ( | char ** | inout_host | ) |
Scan and canonize valid IP6 address.
inout_host | input pointer to string to scan output pointer to first character after valid IP6 address |
Length | of valid IP6 address or -1 upon an error. |
int scan_ip6_reference | ( | char ** | inout_host | ) |
Scan valid IP6 reference.
int scan_ip_address | ( | char ** | inout_host | ) |
Scan valid IP4/IP6 address.
isize_t span_alpha | ( | char const * | s | ) | [inline] |
Calculate span of a alphabetic characters.
isize_t span_digit | ( | char const * | s | ) | [inline] |
Calculate span of a digits.
isize_t span_domain | ( | char const * | host | ) |
isize_t span_hexdigit | ( | char const * | s | ) | [inline] |
Calculate span of a hex.
isize_t span_host | ( | char const * | host | ) |
Return length of a valid domain name or IP address.
int span_ip4_address | ( | char const * | host | ) |
Return length of valid IP4 address.
Note that we accept here up to two leading zeroes which makes "dotted decimal" notation ambiguous: 127.000.000.001 is interpreted same as 127.0.0.1
Note that traditionally IP address octets starting with zero have been interpreted as octal: 172.055.055.001 has been same as 172.45.45.1
However, we interpret them as decimal, 172.055.055.001 is same as 172.55.55.1.
int span_ip6_reference | ( | char const * | host | ) |
Return length of valid IP6 reference.
int span_ip_address | ( | char const * | host | ) |
Return length of valid IP4 or IP6 address.
isize_t span_lws | ( | char const * | s | ) | [inline] |
Calculate span of a linear whitespace.
LWS = [*WSP CRLF] 1*WSP
isize_t span_param | ( | char const * | s | ) | [inline] |
Calculate span of a characters valid in parameters.
isize_t span_token | ( | char const * | s | ) | [inline] |
Calculate span of a token characters.
isize_t span_token_lws | ( | char const * | s | ) | [inline] |
Calculate span of a token or linear whitespace characters.
isize_t span_unreserved | ( | char const * | s | ) | [inline] |
Calculate span of a unreserved characters.
isize_t span_word | ( | char const * | s | ) | [inline] |
Calculate span of a SIP word.
unsigned char const _bnf_table[256] |
Table for determining class of a character.