File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / lib / connect.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:15 2020 UTC (5 years, 6 months ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    1: #ifndef HEADER_CURL_CONNECT_H
    2: #define HEADER_CURL_CONNECT_H
    3: /***************************************************************************
    4:  *                                  _   _ ____  _
    5:  *  Project                     ___| | | |  _ \| |
    6:  *                             / __| | | | |_) | |
    7:  *                            | (__| |_| |  _ <| |___
    8:  *                             \___|\___/|_| \_\_____|
    9:  *
   10:  * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
   11:  *
   12:  * This software is licensed as described in the file COPYING, which
   13:  * you should have received as part of this distribution. The terms
   14:  * are also available at https://curl.haxx.se/docs/copyright.html.
   15:  *
   16:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
   17:  * copies of the Software, and permit persons to whom the Software is
   18:  * furnished to do so, under the terms of the COPYING file.
   19:  *
   20:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
   21:  * KIND, either express or implied.
   22:  *
   23:  ***************************************************************************/
   24: #include "curl_setup.h"
   25: 
   26: #include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */
   27: #include "sockaddr.h"
   28: #include "timeval.h"
   29: 
   30: CURLcode Curl_is_connected(struct connectdata *conn,
   31:                            int sockindex,
   32:                            bool *connected);
   33: 
   34: CURLcode Curl_connecthost(struct connectdata *conn,
   35:                           const struct Curl_dns_entry *host);
   36: 
   37: /* generic function that returns how much time there's left to run, according
   38:    to the timeouts set */
   39: timediff_t Curl_timeleft(struct Curl_easy *data,
   40:                          struct curltime *nowp,
   41:                          bool duringconnect);
   42: 
   43: #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
   44: 
   45: /*
   46:  * Used to extract socket and connectdata struct for the most recent
   47:  * transfer on the given Curl_easy.
   48:  *
   49:  * The returned socket will be CURL_SOCKET_BAD in case of failure!
   50:  */
   51: curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
   52:                                   struct connectdata **connp);
   53: 
   54: bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen,
   55:                       char *addr, long *port);
   56: 
   57: /*
   58:  * Check if a connection seems to be alive.
   59:  */
   60: bool Curl_connalive(struct connectdata *conn);
   61: 
   62: #ifdef USE_WINSOCK
   63: /* When you run a program that uses the Windows Sockets API, you may
   64:    experience slow performance when you copy data to a TCP server.
   65: 
   66:    https://support.microsoft.com/kb/823764
   67: 
   68:    Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
   69:    Buffer Size
   70: 
   71: */
   72: void Curl_sndbufset(curl_socket_t sockfd);
   73: #else
   74: #define Curl_sndbufset(y) Curl_nop_stmt
   75: #endif
   76: 
   77: void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd);
   78: void Curl_persistconninfo(struct connectdata *conn);
   79: int Curl_closesocket(struct connectdata *conn, curl_socket_t sock);
   80: 
   81: /*
   82:  * The Curl_sockaddr_ex structure is basically libcurl's external API
   83:  * curl_sockaddr structure with enough space available to directly hold any
   84:  * protocol-specific address structures. The variable declared here will be
   85:  * used to pass / receive data to/from the fopensocket callback if this has
   86:  * been set, before that, it is initialized from parameters.
   87:  */
   88: struct Curl_sockaddr_ex {
   89:   int family;
   90:   int socktype;
   91:   int protocol;
   92:   unsigned int addrlen;
   93:   union {
   94:     struct sockaddr addr;
   95:     struct Curl_sockaddr_storage buff;
   96:   } _sa_ex_u;
   97: };
   98: #define sa_addr _sa_ex_u.addr
   99: 
  100: /*
  101:  * Create a socket based on info from 'conn' and 'ai'.
  102:  *
  103:  * Fill in 'addr' and 'sockfd' accordingly if OK is returned. If the open
  104:  * socket callback is set, used that!
  105:  *
  106:  */
  107: CURLcode Curl_socket(struct connectdata *conn,
  108:                      const Curl_addrinfo *ai,
  109:                      struct Curl_sockaddr_ex *addr,
  110:                      curl_socket_t *sockfd);
  111: 
  112: /*
  113:  * Curl_conncontrol() marks the end of a connection/stream. The 'closeit'
  114:  * argument specifies if it is the end of a connection or a stream.
  115:  *
  116:  * For stream-based protocols (such as HTTP/2), a stream close will not cause
  117:  * a connection close. Other protocols will close the connection for both
  118:  * cases.
  119:  *
  120:  * It sets the bit.close bit to TRUE (with an explanation for debug builds),
  121:  * when the connection will close.
  122:  */
  123: 
  124: #define CONNCTRL_KEEP 0 /* undo a marked closure */
  125: #define CONNCTRL_CONNECTION 1
  126: #define CONNCTRL_STREAM 2
  127: 
  128: void Curl_conncontrol(struct connectdata *conn,
  129:                       int closeit
  130: #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
  131:                       , const char *reason
  132: #endif
  133:   );
  134: 
  135: #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
  136: #define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM, y)
  137: #define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION, y)
  138: #define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP, y)
  139: #else /* if !DEBUGBUILD || CURL_DISABLE_VERBOSE_STRINGS */
  140: #define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM)
  141: #define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION)
  142: #define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP)
  143: #endif
  144: 
  145: bool Curl_conn_data_pending(struct connectdata *conn, int sockindex);
  146: 
  147: #endif /* HEADER_CURL_CONNECT_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>