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