D:/opendownloadmanager/ODM-1.x/InetFile/cURL_lib/multi.c File Reference

#include "setup.h"
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "urldata.h"
#include "transfer.h"
#include "url.h"
#include "connect.h"
#include "progress.h"
#include "memory.h"
#include "easyif.h"
#include "multiif.h"
#include "sendf.h"
#include "timeval.h"
#include "http.h"
#include "memdebug.h"

Go to the source code of this file.

Classes

struct  Curl_message
struct  closure
struct  Curl_one_easy
struct  Curl_multi
struct  Curl_sh_entry

Defines

#define CURL_SOCKET_HASH_TABLE_SIZE   911
#define MAX_SOCKSPEREASYHANDLE   5
#define GETSOCK_READABLE   (0x00ff)
#define GETSOCK_WRITABLE   (0xff00)
#define CURL_MULTI_HANDLE   0x000bab1e
#define GOOD_MULTI_HANDLE(x)   ((x)&&(((struct Curl_multi *)(x))->type == CURL_MULTI_HANDLE))
#define GOOD_EASY_HANDLE(x)   (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER)
#define SH_READ   1
#define SH_WRITE   2

Enumerations

enum  CURLMstate {
  CURLM_STATE_INIT, CURLM_STATE_CONNECT, CURLM_STATE_WAITRESOLVE, CURLM_STATE_WAITCONNECT,
  CURLM_STATE_WAITPROXYCONNECT, CURLM_STATE_PROTOCONNECT, CURLM_STATE_WAITDO, CURLM_STATE_DO,
  CURLM_STATE_DOING, CURLM_STATE_DO_MORE, CURLM_STATE_DO_DONE, CURLM_STATE_WAITPERFORM,
  CURLM_STATE_PERFORM, CURLM_STATE_TOOFAST, CURLM_STATE_DONE, CURLM_STATE_COMPLETED,
  CURLM_STATE_CANCELLED, CURLM_STATE_LAST
}

Functions

static bool multi_conn_using (struct Curl_multi *multi, struct SessionHandle *data)
static void singlesocket (struct Curl_multi *multi, struct Curl_one_easy *easy)
static void add_closure (struct Curl_multi *multi, struct SessionHandle *data)
static int update_timer (struct Curl_multi *multi)
static void multistate (struct Curl_one_easy *easy, CURLMstate state)
static struct Curl_sh_entrysh_addentry (struct curl_hash *sh, curl_socket_t s, struct SessionHandle *data)
static void sh_delentry (struct curl_hash *sh, curl_socket_t s)
static void sh_freeentry (void *freethis)
static size_t fd_key_compare (void *k1, size_t k1_len, void *k2, size_t k2_len)
static size_t hash_fd (void *key, size_t key_length, size_t slots_num)
static struct curl_hashsh_init (void)
CURLMcurl_multi_init (void)
CURLMcode curl_multi_add_handle (CURLM *multi_handle, CURL *easy_handle)
CURLMcode curl_multi_remove_handle (CURLM *multi_handle, CURL *curl_handle)
bool Curl_multi_canPipeline (struct Curl_multi *multi)
void Curl_multi_handlePipeBreak (struct SessionHandle *data)
static int waitconnect_getsock (struct connectdata *conn, curl_socket_t *sock, int numsocks)
static int domore_getsock (struct connectdata *conn, curl_socket_t *sock, int numsocks)
static int multi_getsock (struct Curl_one_easy *easy, curl_socket_t *socks, int numsocks)
CURLMcode curl_multi_fdset (CURLM *multi_handle, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd)
static CURLMcode multi_runsingle (struct Curl_multi *multi, struct Curl_one_easy *easy)
CURLMcode curl_multi_perform (CURLM *multi_handle, int *running_handles)
void Curl_multi_rmeasy (void *multi_handle, CURL *easy_handle)
CURLMcode curl_multi_cleanup (CURLM *multi_handle)
CURLMsgcurl_multi_info_read (CURLM *multi_handle, int *msgs_in_queue)
static CURLMcode multi_socket (struct Curl_multi *multi, bool checkall, curl_socket_t s, int ev_bitmask, int *running_handles)
CURLMcode curl_multi_setopt (CURLM *multi_handle, CURLMoption option,...)
CURLMcode curl_multi_socket (CURLM *multi_handle, curl_socket_t s, int *running_handles)
CURLMcode curl_multi_socket_action (CURLM *multi_handle, curl_socket_t s, int ev_bitmask, int *running_handles)
CURLMcode curl_multi_socket_all (CURLM *multi_handle, int *running_handles)
static CURLMcode multi_timeout (struct Curl_multi *multi, long *timeout_ms)
CURLMcode curl_multi_timeout (CURLM *multi_handle, long *timeout_ms)
void Curl_expire (struct SessionHandle *data, long milli)
CURLMcode curl_multi_assign (CURLM *multi_handle, curl_socket_t s, void *hashp)


Define Documentation

#define CURL_MULTI_HANDLE   0x000bab1e

Definition at line 130 of file multi.c.

Referenced by curl_multi_init().

#define CURL_SOCKET_HASH_TABLE_SIZE   911

Definition at line 59 of file multi.c.

Referenced by sh_init().

#define GETSOCK_READABLE   (0x00ff)

Definition at line 96 of file multi.c.

#define GETSOCK_WRITABLE   (0xff00)

Definition at line 97 of file multi.c.

#define GOOD_EASY_HANDLE (  )     (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER)

Definition at line 134 of file multi.c.

Referenced by curl_multi_add_handle(), curl_multi_remove_handle(), and multi_runsingle().

#define GOOD_MULTI_HANDLE (  )     ((x)&&(((struct Curl_multi *)(x))->type == CURL_MULTI_HANDLE))

#define MAX_SOCKSPEREASYHANDLE   5

Definition at line 95 of file multi.c.

Referenced by curl_multi_fdset(), and singlesocket().

#define SH_READ   1

Definition at line 260 of file multi.c.

#define SH_WRITE   2

Definition at line 261 of file multi.c.


Enumeration Type Documentation

enum CURLMstate

Enumerator:
CURLM_STATE_INIT 
CURLM_STATE_CONNECT 
CURLM_STATE_WAITRESOLVE 
CURLM_STATE_WAITCONNECT 
CURLM_STATE_WAITPROXYCONNECT 
CURLM_STATE_PROTOCONNECT 
CURLM_STATE_WAITDO 
CURLM_STATE_DO 
CURLM_STATE_DOING 
CURLM_STATE_DO_MORE 
CURLM_STATE_DO_DONE 
CURLM_STATE_WAITPERFORM 
CURLM_STATE_PERFORM 
CURLM_STATE_TOOFAST 
CURLM_STATE_DONE 
CURLM_STATE_COMPLETED 
CURLM_STATE_CANCELLED 
CURLM_STATE_LAST 

Definition at line 71 of file multi.c.


Function Documentation

static void add_closure ( struct Curl_multi multi,
struct SessionHandle data 
) [static]

void Curl_expire ( struct SessionHandle data,
long  milli 
)

CURLMcode curl_multi_add_handle ( CURLM multi_handle,
CURL easy_handle 
)

CURLMcode curl_multi_assign ( CURLM multi_handle,
curl_socket_t  s,
void *  hashp 
)

bool Curl_multi_canPipeline ( struct Curl_multi multi  ) 

CURLMcode curl_multi_cleanup ( CURLM multi_handle  ) 

CURLMcode curl_multi_fdset ( CURLM multi_handle,
fd_set *  read_fd_set,
fd_set *  write_fd_set,
fd_set *  exc_fd_set,
int *  max_fd 
)

void Curl_multi_handlePipeBreak ( struct SessionHandle data  ) 

Definition at line 698 of file multi.c.

References Curl_one_easy::easy_conn, NULL, UserDefined::one_easy, and SessionHandle::set.

Referenced by signalPipeClose().

CURLMsg* curl_multi_info_read ( CURLM multi_handle,
int *  msgs_in_queue 
)

CURLM* curl_multi_init ( void   ) 

CURLMcode curl_multi_perform ( CURLM multi_handle,
int *  running_handles 
)

CURLMcode curl_multi_remove_handle ( CURLM multi_handle,
CURL curl_handle 
)

void Curl_multi_rmeasy ( void *  multi_handle,
CURL easy_handle 
)

Definition at line 1515 of file multi.c.

References curl_multi_remove_handle().

Referenced by Curl_close(), and curl_multi_perform().

CURLMcode curl_multi_setopt ( CURLM multi_handle,
CURLMoption  option,
  ... 
)

CURLMcode curl_multi_socket ( CURLM multi_handle,
curl_socket_t  s,
int *  running_handles 
)

Definition at line 1869 of file multi.c.

References CURLM_OK, FALSE, multi_socket(), and update_timer().

CURLMcode curl_multi_socket_action ( CURLM multi_handle,
curl_socket_t  s,
int  ev_bitmask,
int *  running_handles 
)

Definition at line 1879 of file multi.c.

References CURLM_OK, FALSE, multi_socket(), and update_timer().

CURLMcode curl_multi_socket_all ( CURLM multi_handle,
int *  running_handles 
)

Definition at line 1889 of file multi.c.

References CURL_SOCKET_BAD, CURLM_OK, multi_socket(), TRUE, and update_timer().

CURLMcode curl_multi_timeout ( CURLM multi_handle,
long *  timeout_ms 
)

Definition at line 1922 of file multi.c.

References CURLM_BAD_HANDLE, GOOD_MULTI_HANDLE, and multi_timeout().

static int domore_getsock ( struct connectdata conn,
curl_socket_t sock,
int  numsocks 
) [static]

Definition at line 717 of file multi.c.

References GETSOCK_BLANK, GETSOCK_WRITESOCK, SECONDARYSOCKET, and connectdata::sock.

Referenced by multi_getsock().

static size_t fd_key_compare ( void *  k1,
size_t  k1_len,
void *  k2,
size_t  k2_len 
) [static]

Definition at line 317 of file multi.c.

Referenced by sh_init().

static size_t hash_fd ( void *  key,
size_t  key_length,
size_t  slots_num 
) [static]

Definition at line 324 of file multi.c.

Referenced by sh_init().

static bool multi_conn_using ( struct Curl_multi multi,
struct SessionHandle data 
) [static]

static int multi_getsock ( struct Curl_one_easy easy,
curl_socket_t socks,
int  numsocks 
) [static]

static CURLMcode multi_runsingle ( struct Curl_multi multi,
struct Curl_one_easy easy 
) [static]

Definition at line 836 of file multi.c.

References connectdata::bits, UrlState::cancelled, SessionHandle::change, ConnectBits::close, UserDefined::connect_only, connectdata::connectindex, Curl_addHandleToPipeline(), Curl_async_resolved(), Curl_connect(), Curl_disconnect(), Curl_do(), Curl_do_more(), Curl_done(), Curl_expire(), Curl_follow(), Curl_http_connect(), Curl_is_connected(), Curl_is_resolved(), Curl_isHandleAtHead(), Curl_pgrsTime(), Curl_pgrsUpdate(), Curl_posttransfer(), Curl_pre_readwrite(), Curl_pretransfer(), Curl_protocol_connect(), Curl_protocol_connecting(), Curl_protocol_doing(), Curl_readwrite(), Curl_readwrite_init(), Curl_removeHandleFromPipeline(), Curl_retry_request(), CURL_SOCKET_BAD, CURLE_COULDNT_CONNECT, CURLE_OK, CURLE_OUT_OF_MEMORY, CURLM_BAD_EASY_HANDLE, CURLM_CALL_MULTI_PERFORM, CURLM_INTERNAL_ERROR, CURLM_OK, CURLM_OUT_OF_MEMORY, CURLM_STATE_CANCELLED, CURLM_STATE_COMPLETED, CURLM_STATE_CONNECT, CURLM_STATE_DO, CURLM_STATE_DO_DONE, CURLM_STATE_DO_MORE, CURLM_STATE_DOING, CURLM_STATE_DONE, CURLM_STATE_INIT, CURLM_STATE_PERFORM, CURLM_STATE_PROTOCONNECT, CURLM_STATE_TOOFAST, CURLM_STATE_WAITCONNECT, CURLM_STATE_WAITDO, CURLM_STATE_WAITPERFORM, CURLM_STATE_WAITPROXYCONNECT, CURLM_STATE_WAITRESOLVE, CURLMSG_DONE, CURLMsg::data, connectdata::data, Progress::dlspeed, SessionHandle::dns, ConnectBits::do_more, Curl_one_easy::easy_conn, CURLMsg::easy_handle, Curl_one_easy::easy_handle, Curl_message::extmsg, FALSE, FIRSTSOCKET, free, GOOD_EASY_HANDLE, Names::hostcache, Names::hostcachetype, infof, UrlState::is_in_pipeline, HandleData::keep, KEEP_READ, KEEP_WRITE, Curl_transfer_keeper::keepon, malloc, UserDefined::max_recv_speed, UserDefined::max_send_speed, CURLMsg::msg, Curl_one_easy::msg, Curl_one_easy::msg_num, multistate(), HandleData::newurl, Curl_message::next, NULL, Curl_multi::num_msgs, HandleData::path, UrlState::pipe_broke, SessionHandle::progress, connectdata::readchannel_inuse, connectdata::recv_pipe, SessionHandle::reqdata, CURLMsg::result, Curl_one_easy::result, sclose, SECONDARYSOCKET, connectdata::send_pipe, SessionHandle::set, curl_llist::size, connectdata::sock, state(), Curl_one_easy::state, SessionHandle::state, strdup, ConnectBits::stream_was_rewound, TIMER_STARTSINGLE, TRUE, ConnectBits::tunnel_connecting, Progress::ulspeed, DynamicStatic::url, DynamicStatic::url_changed, UrlState::used_interface, and connectdata::writechannel_inuse.

Referenced by curl_multi_perform(), and multi_socket().

static CURLMcode multi_socket ( struct Curl_multi multi,
bool  checkall,
curl_socket_t  s,
int  ev_bitmask,
int *  running_handles 
) [static]

static CURLMcode multi_timeout ( struct Curl_multi multi,
long *  timeout_ms 
) [static]

static void multistate ( struct Curl_one_easy easy,
CURLMstate  state 
) [static]

static struct Curl_sh_entry* sh_addentry ( struct curl_hash sh,
curl_socket_t  s,
struct SessionHandle data 
) [static, read]

Definition at line 264 of file multi.c.

References calloc, Curl_hash_add(), Curl_hash_pick(), Curl_sh_entry::easy, free, NULL, and Curl_sh_entry::socket.

Referenced by singlesocket().

static void sh_delentry ( struct curl_hash sh,
curl_socket_t  s 
) [static]

Definition at line 294 of file multi.c.

References Curl_hash_delete(), and Curl_hash_pick().

Referenced by singlesocket().

static void sh_freeentry ( void *  freethis  )  [static]

Definition at line 310 of file multi.c.

References free.

Referenced by sh_init().

static struct curl_hash* sh_init ( void   )  [static, read]

static void singlesocket ( struct Curl_multi multi,
struct Curl_one_easy easy 
) [static]

static int update_timer ( struct Curl_multi multi  )  [static]

static int waitconnect_getsock ( struct connectdata conn,
curl_socket_t sock,
int  numsocks 
) [static]

Definition at line 706 of file multi.c.

References FIRSTSOCKET, GETSOCK_BLANK, GETSOCK_WRITESOCK, and connectdata::sock.

Referenced by multi_getsock().


Generated on Sun May 25 00:20:08 2008 by  doxygen 1.5.6