mirror of
https://github.com/curl/curl.git
synced 2026-08-25 01:33:31 +03:00
protocol source, all about protocols and uri schemes
Add protocol.h and protocol.c containing all about libcurl's known URI schemes and their protocol handlers (so they exist). Moves the scheme definitions from the various sources files into protocol.c. Schemes are known and used, even of the protocol handler is not build or just not implemented at all. Closes #20906
This commit is contained in:
parent
32531f20f9
commit
eb14705280
42 changed files with 1089 additions and 992 deletions
74
lib/url.c
74
lib/url.c
|
|
@ -1433,80 +1433,6 @@ error:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const struct Curl_scheme *Curl_get_scheme(const char *scheme)
|
||||
{
|
||||
return Curl_getn_scheme(scheme, strlen(scheme));
|
||||
}
|
||||
|
||||
/* Returns a struct scheme pointer if the name is a known scheme. Check the
|
||||
->run struct field for non-NULL to figure out if an implementation is
|
||||
present. */
|
||||
const struct Curl_scheme *Curl_getn_scheme(const char *scheme, size_t len)
|
||||
{
|
||||
/* table generated by schemetable.c:
|
||||
1. gcc schemetable.c && ./a.out
|
||||
2. check how small the table gets
|
||||
3. tweak the hash algorithm, then rerun from 1
|
||||
4. when the table is good enough
|
||||
5. copy the table into this source code
|
||||
6. make sure this function uses the same hash function that worked for
|
||||
schemetable.c
|
||||
*/
|
||||
static const struct Curl_scheme * const all_schemes[67] = {
|
||||
&Curl_scheme_file,
|
||||
&Curl_scheme_mqtts, NULL,
|
||||
&Curl_scheme_gophers, NULL,
|
||||
&Curl_scheme_rtmpe,
|
||||
&Curl_scheme_smtp,
|
||||
&Curl_scheme_sftp,
|
||||
&Curl_scheme_smb,
|
||||
&Curl_scheme_smtps,
|
||||
&Curl_scheme_telnet,
|
||||
&Curl_scheme_gopher,
|
||||
&Curl_scheme_tftp, NULL, NULL, NULL,
|
||||
&Curl_scheme_ftps,
|
||||
&Curl_scheme_http,
|
||||
&Curl_scheme_imap,
|
||||
&Curl_scheme_rtmps,
|
||||
&Curl_scheme_rtmpt, NULL, NULL, NULL,
|
||||
&Curl_scheme_ldaps,
|
||||
&Curl_scheme_wss,
|
||||
&Curl_scheme_https, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
&Curl_scheme_rtsp,
|
||||
&Curl_scheme_smbs,
|
||||
&Curl_scheme_scp, NULL, NULL, NULL,
|
||||
&Curl_scheme_pop3, NULL, NULL,
|
||||
&Curl_scheme_rtmp, NULL, NULL, NULL,
|
||||
&Curl_scheme_rtmpte, NULL, NULL, NULL,
|
||||
&Curl_scheme_dict, NULL, NULL, NULL,
|
||||
&Curl_scheme_mqtt,
|
||||
&Curl_scheme_pop3s,
|
||||
&Curl_scheme_imaps, NULL,
|
||||
&Curl_scheme_ws, NULL,
|
||||
&Curl_scheme_rtmpts,
|
||||
&Curl_scheme_ldap, NULL, NULL,
|
||||
&Curl_scheme_ftp,
|
||||
};
|
||||
|
||||
if(len && (len <= 7)) {
|
||||
const char *s = scheme;
|
||||
size_t l = len;
|
||||
const struct Curl_scheme *h;
|
||||
unsigned int c = 978;
|
||||
while(l) {
|
||||
c <<= 5;
|
||||
c += (unsigned int)Curl_raw_tolower(*s);
|
||||
s++;
|
||||
l--;
|
||||
}
|
||||
|
||||
h = all_schemes[c % 67];
|
||||
if(h && curl_strnequal(scheme, h->name, len) && !h->name[len])
|
||||
return h;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static CURLcode findprotocol(struct Curl_easy *data,
|
||||
struct connectdata *conn,
|
||||
const char *protostr)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue