1 #ifndef HEADER_CURL_URLDATA_H 2 #define HEADER_CURL_URLDATA_H 27 #include "curl_setup.h" 31 #define PORT_TELNET 23 33 #define PORT_HTTPS 443 34 #define PORT_DICT 2628 36 #define PORT_LDAPS 636 40 #define PORT_IMAPS 993 42 #define PORT_POP3S 995 46 #define PORT_SMTPS 465 48 #define PORT_RTMP 1935 49 #define PORT_RTMPT PORT_HTTP 50 #define PORT_RTMPS PORT_HTTPS 51 #define PORT_GOPHER 70 53 #define DICT_MATCH "/MATCH:" 54 #define DICT_MATCH2 "/M:" 55 #define DICT_MATCH3 "/FIND:" 56 #define DICT_DEFINE "/DEFINE:" 57 #define DICT_DEFINE2 "/D:" 58 #define DICT_DEFINE3 "/LOOKUP:" 60 #define CURL_DEFAULT_USER "anonymous" 61 #define CURL_DEFAULT_PASSWORD "ftp@example.com" 66 #define PROTO_FAMILY_HTTP (CURLPROTO_HTTP|CURLPROTO_HTTPS) 67 #define PROTO_FAMILY_FTP (CURLPROTO_FTP|CURLPROTO_FTPS) 68 #define PROTO_FAMILY_POP3 (CURLPROTO_POP3|CURLPROTO_POP3S) 69 #define PROTO_FAMILY_SMB (CURLPROTO_SMB|CURLPROTO_SMBS) 70 #define PROTO_FAMILY_SMTP (CURLPROTO_SMTP|CURLPROTO_SMTPS) 72 #define DEFAULT_CONNCACHE_SIZE 5 75 #define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") 80 #define RESP_TIMEOUT (1800*1000) 86 #include <openssl/ssl.h> 87 #ifdef HAVE_OPENSSL_ENGINE_H 88 #include <openssl/engine.h> 93 #include <gnutls/gnutls.h> 98 #include <mbedtls/ssl.h> 99 #include <mbedtls/version.h> 100 #include <mbedtls/entropy.h> 101 #include <mbedtls/ctr_drbg.h> 103 #elif defined USE_POLARSSL 105 #include <polarssl/ssl.h> 106 #include <polarssl/version.h> 107 #if POLARSSL_VERSION_NUMBER<0x01010000 108 #include <polarssl/havege.h> 110 #include <polarssl/entropy.h> 111 #include <polarssl/ctr_drbg.h> 119 #include <cyassl/openssl/ssl.h> 132 #include <axTLS/config.h> 133 #include <axTLS/ssl.h> 140 #include "curl_sspi.h" 142 #include <schannel.h> 146 #include <Security/Security.h> 149 #include <Security/SecureTransport.h> 152 #ifdef HAVE_NETINET_IN_H 153 #include <netinet/in.h> 166 #include <curl/curl.h> 168 #include "http_chunks.h" 182 #include "wildcard.h" 183 #include "multihandle.h" 188 # elif defined HAVE_GSSMIT 189 # include <gssapi/gssapi.h> 190 # include <gssapi/gssapi_generic.h> 196 #ifdef HAVE_LIBSSH2_H 198 #include <libssh2_sftp.h> 203 #define BUFSIZE CURL_MAX_WRITE_SIZE 207 #define HEADERSIZE 256 209 #define CURLEASY_MAGIC_NUMBER 0xc0dedbadU 210 #define GOOD_EASY_HANDLE(x) \ 211 ((x) && (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER)) 215 #define CURLMAX(x,y) ((x)>(y)?(x):(y)) 216 #define CURLMIN(x,y) ((x)<(y)?(x):(y)) 228 enum protection_level {
241 struct curl_schannel_cred {
242 CredHandle cred_handle;
243 TimeStamp time_stamp;
248 struct curl_schannel_ctxt {
249 CtxtHandle ctxt_handle;
250 TimeStamp time_stamp;
258 ssl_connect_2_reading,
259 ssl_connect_2_writing,
266 ssl_connection_negotiating,
267 ssl_connection_complete
268 } ssl_connection_state;
276 ssl_connection_state state;
277 ssl_connect_state connecting_state;
278 #if defined(USE_OPENSSL) 283 #elif defined(USE_GNUTLS) 284 gnutls_session_t session;
285 gnutls_certificate_credentials_t cred;
287 gnutls_srp_client_credentials_t srp_client_cred;
289 #elif defined(USE_MBEDTLS) 290 mbedtls_ctr_drbg_context ctr_drbg;
291 mbedtls_entropy_context entropy;
292 mbedtls_ssl_context ssl;
293 mbedtls_ssl_session ssn;
295 mbedtls_x509_crt cacert;
296 mbedtls_x509_crt clicert;
297 mbedtls_x509_crl crl;
298 mbedtls_pk_context pk;
299 mbedtls_ssl_config
config;
300 #elif defined(USE_POLARSSL) 301 ctr_drbg_context ctr_drbg;
302 entropy_context entropy;
310 #elif defined(USE_CYASSL) 313 #elif defined(USE_NSS) 315 char *client_nickname;
318 PK11GenericObject *obj_clicert;
319 #elif defined(USE_GSKIT) 322 #elif defined(USE_AXTLS) 325 #elif defined(USE_SCHANNEL) 326 struct curl_schannel_cred *cred;
327 struct curl_schannel_ctxt *ctxt;
328 SecPkgContext_StreamSizes stream_sizes;
329 size_t encdata_length, decdata_length;
330 size_t encdata_offset, decdata_offset;
331 unsigned char *encdata_buffer, *decdata_buffer;
332 unsigned long req_flags, ret_flags;
333 CURLcode recv_unrecoverable_err;
334 bool recv_sspi_close_notify;
335 bool recv_connection_closed;
336 #elif defined(USE_DARWINSSL) 337 SSLContextRef ssl_ctx;
338 curl_socket_t ssl_sockfd;
340 size_t ssl_write_buffered_length;
341 #elif defined(USE_SSL) 342 #error "SSL backend specific information missing from ssl_connect_data" 348 long certverifyresult;
356 const char *issuercert;
360 size_t max_ssl_sessions;
361 curl_ssl_ctx_callback fsslctx;
370 enum CURL_TLSAUTH authtype;
386 #if defined(USE_WINDOWS_SSPI) 388 size_t input_token_len;
410 #ifdef USE_WINDOWS_SSPI 411 #include "curl_sspi.h" 414 #if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV) 419 #if defined(USE_KERBEROS5) 420 struct kerberos5data {
421 #if defined(USE_WINDOWS_SSPI) 422 CredHandle *credentials;
425 SEC_WINNT_AUTH_IDENTITY identity;
426 SEC_WINNT_AUTH_IDENTITY *p_identity;
430 gss_ctx_id_t context;
437 #if defined(USE_NTLM) 440 #ifdef USE_WINDOWS_SSPI 441 CredHandle *credentials;
443 SEC_WINNT_AUTH_IDENTITY identity;
444 SEC_WINNT_AUTH_IDENTITY *p_identity;
448 size_t input_token_len;
451 unsigned char nonce[8];
453 unsigned int target_info_len;
459 struct negotiatedata {
462 enum { GSS_AUTHNONE, GSS_AUTHRECV, GSS_AUTHSENT } state;
465 gss_ctx_id_t context;
466 gss_name_t server_name;
467 gss_buffer_desc output_token;
469 #ifdef USE_WINDOWS_SSPI 471 CredHandle *credentials;
473 SEC_WINNT_AUTH_IDENTITY identity;
474 SEC_WINNT_AUTH_IDENTITY *p_identity;
478 size_t output_token_length;
495 bool proxy_user_passwd;
517 bool rewindaftersend;
530 bool stream_was_rewound;
533 bool proxy_connect_closed;
546 const char *dispname;
554 #define KEEP_RECV (1<<0) 555 #define KEEP_SEND (1<<1) 556 #define KEEP_RECV_HOLD (1<<2) 558 #define KEEP_SEND_HOLD (1<<3) 560 #define KEEP_RECV_PAUSE (1<<4) 561 #define KEEP_SEND_PAUSE (1<<5) 563 #define KEEP_RECVBITS (KEEP_RECV | KEEP_RECV_HOLD | KEEP_RECV_PAUSE) 564 #define KEEP_SENDBITS (KEEP_SEND | KEEP_SEND_HOLD | KEEP_SEND_PAUSE) 577 #ifdef CURLRES_ASYNCH 588 #define FIRSTSOCKET 0 589 #define SECONDARYSOCKET 1 594 typedef CURLcode (*Curl_do_more_func)(
struct connectdata *,
int *);
595 typedef CURLcode (*Curl_done_func)(
struct connectdata *, CURLcode, bool);
599 EXP100_AWAITING_CONTINUE,
600 EXP100_SENDING_REQUEST,
621 curl_off_t *bytecountp;
623 curl_off_t maxdownload;
625 curl_off_t *writebytecountp;
627 curl_off_t bytecount;
628 curl_off_t writebytecount;
630 long headerbytecount;
631 long deductheadercount;
661 enum expect100 exp100;
662 enum upgrade101 upgr101;
671 zlibInitState zlib_init;
699 ssize_t upload_present;
705 char *upload_fromhere;
728 CURLcode (*setup_connection)(
struct connectdata *);
731 CURLcode (*do_it)(
struct connectdata *,
bool *done);
738 Curl_do_more_func do_more;
746 CURLcode (*connect_it)(
struct connectdata *,
bool *done);
749 CURLcode (*connecting)(
struct connectdata *,
bool *done);
750 CURLcode (*doing)(
struct connectdata *,
bool *done);
755 curl_socket_t *socks,
761 curl_socket_t *socks,
767 curl_socket_t *socks,
773 int (*perform_getsock)(
const struct connectdata *conn,
774 curl_socket_t *socks,
782 CURLcode (*disconnect)(
struct connectdata *,
bool dead_connection);
787 ssize_t *nread,
bool *readmore);
790 unsigned int protocol;
795 #define PROTOPT_NONE 0 796 #define PROTOPT_SSL (1<<0) 797 #define PROTOPT_DUAL (1<<1) 798 #define PROTOPT_CLOSEACTION (1<<2) 803 #define PROTOPT_DIRLOCK (1<<3) 804 #define PROTOPT_NONETWORK (1<<4) 805 #define PROTOPT_NEEDSPWD (1<<5) 807 #define PROTOPT_NOURLQUERY (1<<6) 809 #define PROTOPT_CREDSPERREQUEST (1<<7) 814 typedef ssize_t (Curl_send)(
struct connectdata *conn,
821 typedef ssize_t (Curl_recv)(
struct connectdata *conn,
842 curl_closesocket_callback fclosesocket;
843 void *closesocket_client;
869 char ip_addr_str[MAX_IPADR_LEN];
871 unsigned int scope_id;
888 char primary_ip[MAX_IPADR_LEN];
895 char local_ip[MAX_IPADR_LEN];
906 curl_proxytype proxytype;
913 curl_socket_t sock[2];
915 curl_socket_t tempsock[2];
916 bool sock_accepted[2];
932 long timeoutms_per_addr;
942 curl_socket_t sockfd;
943 curl_socket_t writesockfd;
952 char *accept_encoding;
958 char *rtsp_transport;
964 enum protection_level command_prot;
965 enum protection_level data_prot;
966 enum protection_level request_data_prot;
968 struct krb5buffer in_buffer;
971 struct sockaddr_in local_addr;
974 #if defined(USE_KERBEROS5) 975 struct kerberos5data krb5;
982 bool readchannel_inuse;
984 bool writechannel_inuse;
996 curl_seek_callback seek_func;
1001 #if defined(USE_NTLM) 1002 struct ntlmdata ntlm;
1005 struct ntlmdata proxyntlm;
1007 #if defined(NTLM_WB_ENABLED) 1009 curl_socket_t ntlm_auth_hlpr_socket;
1010 pid_t ntlm_auth_hlpr_pid;
1011 char* challenge_header;
1012 char* response_header;
1016 char syserr_buf [256];
1018 #ifdef CURLRES_ASYNCH 1020 struct Curl_async async;
1044 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) 1045 int socks5_gssapi_enctype;
1057 unsigned short localport;
1088 unsigned long proxyauthavail;
1089 unsigned long httpauthavail;
1092 char *wouldredirect;
1102 char conn_primary_ip[MAX_IPADR_LEN];
1103 long conn_primary_port;
1105 char conn_local_ip[MAX_IPADR_LEN];
1106 long conn_local_port;
1119 curl_off_t downloaded;
1120 curl_off_t uploaded;
1122 curl_off_t current_speed;
1135 double t_appconnect;
1136 double t_pretransfer;
1137 double t_starttransfer;
1144 #define CURR_TIME (5+1) 1146 curl_off_t speeder[ CURR_TIME ];
1147 struct timeval speeder_time[ CURR_TIME ];
1171 RTSPREQ_GET_PARAMETER,
1172 RTSPREQ_SET_PARAMETER,
1186 #define MAX_CURL_USER_LENGTH 256 1187 #define MAX_CURL_PASSWORD_LENGTH 256 1192 unsigned long picked;
1193 unsigned long avail;
1211 bool multi_owned_by_easy;
1221 char buffer[BUFSIZE+1];
1222 char uploadbuffer[BUFSIZE+1];
1223 curl_off_t current_speed;
1225 bool this_is_a_follow;
1236 size_t tempwritesize;
1246 void (*prev_signal)(
int sig);
1254 struct negotiatedata negotiate;
1255 struct negotiatedata proxyneg;
1258 struct auth authhost;
1259 struct auth authproxy;
1266 #if defined(USE_OPENSSL) && defined(HAVE_OPENSSL_ENGINE_H) 1274 char *most_recent_ftp_entrypath;
1277 bool ftp_trying_alternative;
1281 bool expect100header;
1286 #if !defined(WIN32) && !defined(MSDOS) && !defined(__EMX__) && \ 1287 !defined(__SYMBIAN32__) 1289 #define CURL_DO_LINEEND_CONV 1291 bool prev_block_had_trailing_cr;
1293 curl_off_t crlf_conversions;
1301 bool rangestringalloc;
1305 curl_off_t resume_from;
1308 long rtsp_next_client_CSeq;
1309 long rtsp_next_server_CSeq;
1310 long rtsp_CSeq_recv;
1312 curl_off_t infilesize;
1322 curl_read_callback fread_func;
1326 bool stream_depends_e;
1365 STRING_CUSTOMREQUEST,
1366 STRING_DEFAULT_PROTOCOL,
1370 STRING_FTP_ALTERNATIVE_TO_USER,
1384 STRING_SSL_PINNEDPUBLICKEY,
1385 STRING_SSL_CIPHER_LIST,
1386 STRING_SSL_EGDSOCKET,
1387 STRING_SSL_RANDOM_FILE,
1390 STRING_SSL_ISSUERCERT,
1394 STRING_PROXYUSERNAME,
1395 STRING_PROXYPASSWORD,
1398 STRING_RTSP_SESSION_ID,
1399 STRING_RTSP_STREAM_URI,
1400 STRING_RTSP_TRANSPORT,
1402 STRING_SSH_PRIVATE_KEY,
1403 STRING_SSH_PUBLIC_KEY,
1404 STRING_SSH_HOST_PUBLIC_KEY_MD5,
1405 STRING_SSH_KNOWNHOSTS,
1407 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) 1408 STRING_SOCKS5_GSSAPI_SERVICE,
1409 STRING_PROXY_SERVICE_NAME,
1410 STRING_SERVICE_NAME,
1416 STRING_TLSAUTH_USERNAME,
1417 STRING_TLSAUTH_PASSWORD,
1420 #ifdef USE_UNIX_SOCKETS 1421 STRING_UNIX_SOCKET_PATH,
1426 STRING_LASTZEROTERMINATED,
1431 STRING_COPYPOSTFIELDS,
1448 unsigned long httpauth;
1449 unsigned long proxyauth;
1450 long followlocation;
1459 curl_seek_callback seek_func;
1460 curl_off_t postfieldsize;
1463 unsigned short localport;
1466 curl_write_callback fwrite_func;
1467 curl_write_callback fwrite_header;
1468 curl_write_callback fwrite_rtp;
1469 curl_read_callback fread_func_set;
1472 curl_progress_callback fprogress;
1473 curl_xferinfo_callback fxferinfo;
1474 curl_debug_callback fdebug;
1475 curl_ioctl_callback ioctl_func;
1476 curl_sockopt_callback fsockopt;
1477 void *sockopt_client;
1478 curl_opensocket_callback fopensocket;
1481 void* opensocket_client;
1482 curl_closesocket_callback fclosesocket;
1484 void* closesocket_client;
1489 curl_conv_callback convfromnetwork;
1491 curl_conv_callback convtonetwork;
1493 curl_conv_callback convfromutf8;
1495 void *progress_client;
1498 long connecttimeout;
1500 long server_response_timeout;
1502 curl_off_t filesize;
1503 long low_speed_limit;
1504 long low_speed_time;
1505 curl_off_t max_send_speed;
1506 curl_off_t max_recv_speed;
1508 curl_off_t set_resume_from;
1526 curl_TimeCond timecondition;
1528 Curl_HttpReq httpreq;
1532 curl_proxytype proxytype;
1533 long dns_cache_timeout;
1542 curl_off_t max_filesize;
1544 curl_ftpfile ftp_filemethod;
1546 int ftp_create_missing_dirs;
1550 curl_sshkeycallback ssh_keyfunc;
1551 void *ssh_keyfunc_userp;
1559 bool tunnel_thru_httpproxy;
1565 bool http_fail_on_error;
1566 bool http_follow_location;
1567 bool http_transfer_encoding;
1568 bool http_disable_hostname_check_before_authentication;
1569 bool include_header;
1570 bool http_set_referer;
1571 bool http_auto_referer;
1575 enum CURL_NETRC_OPTION
1585 curl_usessl use_ssl;
1587 curl_ftpauth ftpsslauth;
1588 curl_ftpccc ftp_ccc;
1590 bool global_dns_cache;
1596 bool ssl_enable_beast;
1599 long ssh_auth_types;
1604 long new_file_perms;
1605 long new_directory_perms;
1606 bool proxy_transfer_mode;
1608 char *str[STRING_LAST];
1609 unsigned int scope_id;
1610 long allowed_protocols;
1611 long redir_protocols;
1612 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) 1613 long socks5_gssapi_nec;
1618 Curl_RtspReq rtspreq;
1621 curl_chunk_bgn_callback chunk_bgn;
1623 curl_chunk_end_callback chunk_end;
1625 curl_fnmatch_callback fnmatch;
1629 long gssapi_delegation;
1638 bool ssl_enable_npn;
1639 bool ssl_enable_alpn;
1643 long expect_100_timeout;
1646 bool stream_depends_e;
1686 curl_socket_t sockets[MAX_SOCKSPEREASYHANDLE];
1711 #if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV) 1712 iconv_t outbound_cd;
1719 #define LIBCURL_NAME "libcurl"
Definition: conncache.h:38
Definition: urldata.h:1076
Definition: urldata.h:1670
Definition: http_chunks.h:82
Definition: curl_addrinfo.h:51
Definition: urldata.h:724
Definition: urldata.h:1114
Definition: urldata.h:1436
Definition: urldata.h:385
Definition: urldata.h:542
Definition: urldata.h:1650
Definition: curl_sec.h:25
Definition: wildcard.h:43
Definition: urldata.h:488
Definition: urldata.h:1189
Definition: urldata.h:1203
Definition: multihandle.h:68
Definition: urldata.h:346
Definition: curl_setup_once.h:110
Definition: urldata.h:271
Definition: urldata.h:375
Definition: dl_malloc.c:2448
Definition: urldata.h:619
Definition: conncache.h:26
Definition: multihandle.h:27
Definition: urldata.h:831
Definition: urldata.h:1338
Dynamicly allocated strings, MUST be freed before this.
Definition: urldata.h:949