00001
00002
00003
00004
00005 #ifndef __CURL_MULTI_H
00006 #define __CURL_MULTI_H
00007
00008 #include "curl.h"
00009
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013
00014 typedef void CURLM;
00015
00016 typedef enum {
00017 CURLM_CALL_MULTI_PERFORM = -1,
00018 CURLM_OK,
00019 CURLM_BAD_HANDLE,
00020 CURLM_BAD_EASY_HANDLE,
00021 CURLM_OUT_OF_MEMORY,
00022 CURLM_INTERNAL_ERROR,
00023 CURLM_BAD_SOCKET,
00024 CURLM_UNKNOWN_OPTION,
00025 CURLM_LAST
00026 } CURLMcode;
00027
00028 #define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
00029
00030 typedef enum {
00031 CURLMSG_NONE,
00032 CURLMSG_DONE,
00033 CURLMSG_LAST
00034 } CURLMSG;
00035
00036 struct CURLMsg {
00037 CURLMSG msg;
00038 CURL *easy_handle;
00039 union {
00040 void *whatever;
00041 CURLcode result;
00042 } data;
00043 };
00044 typedef struct CURLMsg CURLMsg;
00045
00046 CURL_EXTERN CURLM *curl_multi_init(void);
00047
00048 CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
00049 CURL *curl_handle);
00050
00051
00052 CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
00053 CURL *curl_handle);
00054
00055
00056 CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
00057 fd_set *read_fd_set,
00058 fd_set *write_fd_set,
00059 fd_set *exc_fd_set,
00060 int *max_fd);
00061
00062
00063 CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
00064 int *running_handles);
00065
00066
00067 CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
00068
00069 CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
00070 int *msgs_in_queue);
00071
00072 CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
00073
00074 #define CURL_POLL_NONE 0
00075 #define CURL_POLL_IN 1
00076 #define CURL_POLL_OUT 2
00077 #define CURL_POLL_INOUT 3
00078 #define CURL_POLL_REMOVE 4
00079
00080 #define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
00081
00082 #define CURL_CSELECT_IN 0x01
00083 #define CURL_CSELECT_OUT 0x02
00084 #define CURL_CSELECT_ERR 0x04
00085
00086 typedef int (*curl_socket_callback)(CURL *easy,
00087 curl_socket_t s,
00088 int what,
00089 void *userp,
00090 void *socketp);
00091
00092 typedef int (*curl_multi_timer_callback)(CURLM *multi,
00093 long timeout_ms,
00094 void *userp);
00095
00096 CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
00097 int *running_handles);
00098
00099 CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
00100 curl_socket_t s,
00101 int ev_bitmask,
00102 int *running_handles);
00103
00104 CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
00105 int *running_handles);
00106
00107 #ifndef CURL_ALLOW_OLD_MULTI_SOCKET
00108
00109 #define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
00110 #endif
00111
00112 CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
00113 long *milliseconds);
00114
00115 #undef CINIT
00116
00117 #ifdef CURL_ISOCPP
00118 #define CINIT(name,type,number) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + number
00119 #else
00120
00121 #define LONG CURLOPTTYPE_LONG
00122 #define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
00123 #define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
00124 #define OFF_T CURLOPTTYPE_OFF_T
00125 #define CINIT(name,type,number) CURLMOPT_name = type + number
00126 #endif
00127
00128 typedef enum {
00129
00130 CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
00131
00132
00133 CINIT(SOCKETDATA, OBJECTPOINT, 2),
00134
00135
00136 CINIT(PIPELINING, LONG, 3),
00137
00138
00139 CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
00140
00141
00142 CINIT(TIMERDATA, OBJECTPOINT, 5),
00143
00144
00145 CINIT(MAXCONNECTS, LONG, 6),
00146
00147 CURLMOPT_LASTENTRY
00148 } CURLMoption;
00149
00150 CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
00151 CURLMoption option, ...);
00152
00153 CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
00154 curl_socket_t sockfd, void *sockp);
00155
00156 #ifdef __cplusplus
00157 }
00158 #endif
00159
00160 #endif