]> git.sven.stormbind.net Git - sven/tclcurl.git/blobdiff - generic/multi.h
Imported Upstream version 7.19.6
[sven/tclcurl.git] / generic / multi.h
diff --git a/generic/multi.h b/generic/multi.h
new file mode 100755 (executable)
index 0000000..3fbd324
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * multi.h --
+ *
+ * Header file for the part of the TclCurl extension that deals with libcurl's
+ * 'multi' interface.
+ *
+ * Copyright (c) 2002-2009 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