1 /* 2 * Queue Manager definitions 3 * 4 * Copyright 2007 Google (Roy Shea) 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #ifndef __QMGR_H__ 22 #define __QMGR_H__ 23 24 #include "windef.h" 25 #include "objbase.h" 26 27 #define COBJMACROS 28 #include "bits1_5.h" 29 30 #include <string.h> 31 #include "wine/list.h" 32 33 /* Background copy job vtbl and related data */ 34 typedef struct 35 { 36 const IBackgroundCopyJob2Vtbl *lpVtbl; 37 LONG ref; 38 LPWSTR displayName; 39 BG_JOB_TYPE type; 40 GUID jobId; 41 struct list files; 42 BG_JOB_PROGRESS jobProgress; 43 BG_JOB_STATE state; 44 /* Protects file list, and progress */ 45 CRITICAL_SECTION cs; 46 struct list entryFromQmgr; 47 } BackgroundCopyJobImpl; 48 49 /* Enum background copy jobs vtbl and related data */ 50 typedef struct 51 { 52 const IEnumBackgroundCopyJobsVtbl *lpVtbl; 53 LONG ref; 54 IBackgroundCopyJob **jobs; 55 ULONG numJobs; 56 ULONG indexJobs; 57 } EnumBackgroundCopyJobsImpl; 58 59 /* Enum background copy files vtbl and related data */ 60 typedef struct 61 { 62 const IEnumBackgroundCopyFilesVtbl *lpVtbl; 63 LONG ref; 64 IBackgroundCopyFile **files; 65 ULONG numFiles; 66 ULONG indexFiles; 67 } EnumBackgroundCopyFilesImpl; 68 69 /* Background copy file vtbl and related data */ 70 typedef struct 71 { 72 const IBackgroundCopyFileVtbl *lpVtbl; 73 LONG ref; 74 BG_FILE_INFO info; 75 BG_FILE_PROGRESS fileProgress; 76 WCHAR tempFileName[MAX_PATH]; 77 struct list entryFromJob; 78 BackgroundCopyJobImpl *owner; 79 } BackgroundCopyFileImpl; 80 81 /* Background copy manager vtbl and related data */ 82 typedef struct 83 { 84 const IBackgroundCopyManagerVtbl *lpVtbl; 85 /* Protects job list, job states, and jobEvent */ 86 CRITICAL_SECTION cs; 87 HANDLE jobEvent; 88 struct list jobs; 89 } BackgroundCopyManagerImpl; 90 91 typedef struct 92 { 93 const IClassFactoryVtbl *lpVtbl; 94 } ClassFactoryImpl; 95 96 extern HANDLE stop_event; 97 extern ClassFactoryImpl BITS_ClassFactory; 98 extern BackgroundCopyManagerImpl globalMgr; 99 100 HRESULT BackgroundCopyManagerConstructor(IUnknown *pUnkOuter, LPVOID *ppObj); 101 HRESULT BackgroundCopyJobConstructor(LPCWSTR displayName, BG_JOB_TYPE type, 102 GUID *pJobId, LPVOID *ppObj); 103 HRESULT EnumBackgroundCopyJobsConstructor(LPVOID *ppObj, 104 IBackgroundCopyManager* copyManager); 105 HRESULT BackgroundCopyFileConstructor(BackgroundCopyJobImpl *owner, 106 LPCWSTR remoteName, LPCWSTR localName, 107 LPVOID *ppObj); 108 HRESULT EnumBackgroundCopyFilesConstructor(LPVOID *ppObj, 109 IBackgroundCopyJob2 *copyJob); 110 DWORD WINAPI fileTransfer(void *param); 111 void processJob(BackgroundCopyJobImpl *job); 112 BOOL processFile(BackgroundCopyFileImpl *file, BackgroundCopyJobImpl *job); 113 114 /* Little helper functions */ 115 static inline char * 116 qmgr_strdup(const char *s) 117 { 118 size_t n = strlen(s) + 1; 119 char *d = HeapAlloc(GetProcessHeap(), 0, n); 120 return d ? memcpy(d, s, n) : NULL; 121 } 122 123 static inline BOOL 124 transitionJobState(BackgroundCopyJobImpl *job, BG_JOB_STATE fromState, 125 BG_JOB_STATE toState) 126 { 127 BOOL rv = FALSE; 128 EnterCriticalSection(&globalMgr.cs); 129 if (job->state == fromState) 130 { 131 job->state = toState; 132 rv = TRUE; 133 } 134 LeaveCriticalSection(&globalMgr.cs); 135 return rv; 136 } 137 138 #endif /* __QMGR_H__ */ 139