コード例 #1
0
ファイル: sendf.c プロジェクト: 404UserNotFound/sourcemod
/*
 * Curl_write() is an internal write function that sends data to the
 * server. Works with plain sockets, SCP, SSL or kerberos.
 */
CURLcode Curl_write(struct connectdata *conn,
                    curl_socket_t sockfd,
                    const void *mem,
                    size_t len,
                    ssize_t *written)
{
  ssize_t bytes_written;
  CURLcode retcode;
  int num = (sockfd == conn->sock[SECONDARYSOCKET]);

  if(conn->ssl[num].state == ssl_connection_complete)
    bytes_written = Curl_ssl_send(conn, num, mem, len);
  else if(Curl_ssh_enabled(conn, PROT_SCP))
    bytes_written = Curl_scp_send(conn, num, mem, len);
  else if(Curl_ssh_enabled(conn, PROT_SFTP))
    bytes_written = Curl_sftp_send(conn, num, mem, len);
  else if(conn->sec_complete)
    bytes_written = Curl_sec_send(conn, num, mem, len);
  else
    bytes_written = send_plain(conn, num, mem, len);

  *written = bytes_written;
  retcode = (-1 != bytes_written)?CURLE_OK:CURLE_SEND_ERROR;

  return retcode;
}
コード例 #2
0
ファイル: sendf.c プロジェクト: SiteView/ecc82Server
/*
 * Curl_write() is an internal write function that sends data to the
 * server. Works with plain sockets, SCP, SSL or kerberos.
 */
CURLcode Curl_write(struct connectdata *conn,
                    curl_socket_t sockfd,
                    void *mem,
                    size_t len,
                    ssize_t *written)
{
  ssize_t bytes_written;
  CURLcode retcode;
  int num = (sockfd == conn->sock[SECONDARYSOCKET]);

  if (conn->ssl[num].use)
    /* only TRUE if SSL enabled */
    bytes_written = Curl_ssl_send(conn, num, mem, len);
#ifdef USE_LIBSSH2
  else if (conn->protocol & PROT_SCP)
    bytes_written = Curl_scp_send(conn, num, mem, len);
  else if (conn->protocol & PROT_SFTP)
    bytes_written = Curl_sftp_send(conn, num, mem, len);
#endif /* !USE_LIBSSH2 */
  else if(conn->sec_complete)
    /* only TRUE if krb enabled */
    bytes_written = Curl_sec_send(conn, num, mem, len);
  else
    bytes_written = Curl_plain_send(conn, num, mem, len);

  *written = bytes_written;
  retcode = (-1 != bytes_written)?CURLE_OK:CURLE_SEND_ERROR;

  return retcode;
}
コード例 #3
0
ファイル: sendf.c プロジェクト: sherpya/naitool
/*
 * Curl_write() is an internal write function that sends data to the
 * server. Works with plain sockets, SCP, SSL or kerberos.
 *
 * If the write would block (EWOULDBLOCK), we return CURLE_OK and
 * (*written == 0). Otherwise we return regular CURLcode value.
 */
CURLcode Curl_write(struct connectdata *conn,
                    curl_socket_t sockfd,
                    const void *mem,
                    size_t len,
                    ssize_t *written)
{
  ssize_t bytes_written;
  int curlcode = CURLE_OK;
  int num = (sockfd == conn->sock[SECONDARYSOCKET]);

  if(conn->ssl[num].state == ssl_connection_complete)
    bytes_written = Curl_ssl_send(conn, num, mem, len, &curlcode);
  else if(Curl_ssh_enabled(conn, PROT_SCP))
    bytes_written = Curl_scp_send(conn, num, mem, len);
  else if(Curl_ssh_enabled(conn, PROT_SFTP))
    bytes_written = Curl_sftp_send(conn, num, mem, len);
  else if(conn->sec_complete)
    bytes_written = Curl_sec_send(conn, num, mem, len);
  else
    bytes_written = send_plain(conn, num, mem, len);

  *written = bytes_written;
  if(-1 != bytes_written)
    /* we completely ignore the curlcode value when -1 is not returned */
    return CURLE_OK;

  /* handle EWOULDBLOCK or a send failure */
  switch(curlcode) {
  case /* EWOULDBLOCK */ -1:
    *written = /* EWOULDBLOCK */ 0;
    return CURLE_OK;

  case CURLE_OK:
    /* general send failure */
    return CURLE_SEND_ERROR;

  default:
    /* we got a specific curlcode, forward it */
    return (CURLcode)curlcode;
  }
}