-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmulti.h
More file actions
115 lines (86 loc) · 3.34 KB
/
multi.h
File metadata and controls
115 lines (86 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
* multi.h --
*
* Header file for the part of the TclCurl extension that deals with libcurl's
* 'multi' interface.
*
* Copyright (c) 2002-2011 Andres Garcia Garcia.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
*/
#define multi_h
#include "tclcurl.h"
#ifdef __cplusplus
extern "C" {
#endif
struct easyHandleList {
CURL *curl;
char *name;
struct easyHandleList *next;
};
struct curlMultiObjData {
CURLM *mcurl;
Tcl_Command token;
Tcl_Interp *interp;
struct easyHandleList *handleListFirst;
struct easyHandleList *handleListLast;
fd_set fdread;
fd_set fdwrite;
fd_set fdexcep;
int runningTransfers;
char *postCommand;
};
struct curlEvent {
Tcl_EventProc *proc;
struct Tcl_Event *nextPtr;
struct curlMultiObjData *curlMultiData;
};
CONST static char *multiCommandTable[] = {
"addhandle",
"removehandle",
"perform",
"cleanup",
"getinfo",
"active",
"auto",
"configure",
(char *) NULL
};
CONST static char *multiConfigTable[] = {
"-pipelining", "-maxconnects",
(char *)NULL
};
char *curlCreateMultiObjCmd (Tcl_Interp *interp,struct curlMultiObjData *curlMultiData);
int Tclcurl_MultiInit (Tcl_Interp *interp);
int curlMultiDeleteCmd(ClientData clientData);
int curlInitMultiObjCmd (ClientData clientData, Tcl_Interp *interp,
int objc,Tcl_Obj *CONST objv[]);
int curlMultiObjCmd (ClientData clientData, Tcl_Interp *interp,
int objc,Tcl_Obj *CONST objv[]);
CURLMcode curlAddMultiHandle(Tcl_Interp *interp,CURLM *curlMultiHandle
,Tcl_Obj *objvPtr);
CURLMcode curlRemoveMultiHandle(Tcl_Interp *interp,CURLM *curlMultiHandle
,Tcl_Obj *objvPtr);
int curlMultiPerform(Tcl_Interp *interp,CURLM *curlMultiHandle);
int curlMultiGetInfo(Tcl_Interp *interp,CURLM *curlMultiHandlePtr);
int curlMultiGetActiveTransfers( struct curlMultiObjData *curlMultiData);
int curlMultiActiveTransfers(Tcl_Interp *interp, struct curlMultiObjData *curlMultiData);
struct curlObjData *curlGetEasyHandle(Tcl_Interp *interp,Tcl_Obj *nameObjPtr);
void curlMultiFreeSpace(struct curlMultiObjData *curlMultiData);
int curlReturnCURLMcode(Tcl_Interp *interp,CURLMcode errorCode);
void curlEasyHandleListAdd(struct curlMultiObjData *multiDataPtr,CURL *easyHandle,char *name);
void curlEasyHandleListRemove(struct curlMultiObjData *multiDataPtr,CURL *easyHandle);
char *curlGetEasyName(struct curlMultiObjData *multiDataPtr,CURL *easyHandle);
int curlMultiAutoTransfer(Tcl_Interp *interp, struct curlMultiObjData *curlMultiData, int objc,Tcl_Obj *CONST objv[]);
int curlMultiSetOpts(Tcl_Interp *interp, struct curlMultiObjData *curlMultiData,Tcl_Obj *CONST objv,int tableIndex);
int SetMultiOptLong(Tcl_Interp *interp,CURLM *curlMultiHandle,CURLMoption opt,
int tableIndex,Tcl_Obj *tclObj);
int curlMultiConfigTransfer(Tcl_Interp *interp, struct curlMultiObjData *curlMultiData, int objc,Tcl_Obj *CONST objv[]);
void curlEventSetup(ClientData clientData, int flags);
void curlEventCheck(ClientData clientData, int flags);
int curlEventProc(Tcl_Event *evPtr,int flags);
#ifdef __cplusplus
}
#endif