ReactOS  0.4.15-dev-1203-g0e5a4d5
qmgr.c File Reference
#include "qmgr.h"
#include "wine/debug.h"
Include dependency graph for qmgr.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (qmgr)
 
static HRESULT WINAPI BackgroundCopyManager_QueryInterface (IBackgroundCopyManager *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI BackgroundCopyManager_AddRef (IBackgroundCopyManager *iface)
 
static ULONG WINAPI BackgroundCopyManager_Release (IBackgroundCopyManager *iface)
 
static HRESULT WINAPI BackgroundCopyManager_CreateJob (IBackgroundCopyManager *iface, LPCWSTR DisplayName, BG_JOB_TYPE Type, GUID *pJobId, IBackgroundCopyJob **ppJob)
 
static HRESULT WINAPI BackgroundCopyManager_GetJob (IBackgroundCopyManager *iface, REFGUID jobID, IBackgroundCopyJob **job)
 
static HRESULT WINAPI BackgroundCopyManager_EnumJobs (IBackgroundCopyManager *iface, DWORD flags, IEnumBackgroundCopyJobs **ppEnum)
 
static HRESULT WINAPI BackgroundCopyManager_GetErrorDescription (IBackgroundCopyManager *iface, HRESULT hr, DWORD langid, LPWSTR *error_description)
 
HRESULT BackgroundCopyManagerConstructor (LPVOID *ppObj)
 
DWORD WINAPI fileTransfer (void *param)
 

Variables

BackgroundCopyManagerImpl globalMgr
 
static const IBackgroundCopyManagerVtbl BackgroundCopyManagerVtbl
 

Function Documentation

◆ BackgroundCopyManager_AddRef()

static ULONG WINAPI BackgroundCopyManager_AddRef ( IBackgroundCopyManager iface)
static

Definition at line 44 of file qmgr.c.

45 {
46  return 2;
47 }

◆ BackgroundCopyManager_CreateJob()

static HRESULT WINAPI BackgroundCopyManager_CreateJob ( IBackgroundCopyManager iface,
LPCWSTR  DisplayName,
BG_JOB_TYPE  Type,
GUID pJobId,
IBackgroundCopyJob **  ppJob 
)
static

Definition at line 56 of file qmgr.c.

58 {
60  HRESULT hres;
61 
62  TRACE("(%s %d %p %p)\n", debugstr_w(DisplayName), Type, pJobId, ppJob);
63 
64  hres = BackgroundCopyJobConstructor(DisplayName, Type, pJobId, &job);
65  if (FAILED(hres))
66  return hres;
67 
68  /* Add a reference to the job to job list */
69  *ppJob = (IBackgroundCopyJob *)&job->IBackgroundCopyJob3_iface;
70  IBackgroundCopyJob_AddRef(*ppJob);
72  list_add_head(&globalMgr.jobs, &job->entryFromQmgr);
74  return S_OK;
75 }
static HANDLE job
Definition: process.c:77
Type
Definition: Type.h:6
BackgroundCopyManagerImpl globalMgr
Definition: qmgr.c:26
__WINE_SERVER_LIST_INLINE void list_add_head(struct list *list, struct list *elem)
Definition: list.h:96
CRITICAL_SECTION cs
Definition: qmgr.h:89
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define debugstr_w
Definition: kernel32.h:32
struct list jobs
Definition: qmgr.h:91
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
HRESULT BackgroundCopyJobConstructor(LPCWSTR displayName, BG_JOB_TYPE type, GUID *job_id, BackgroundCopyJobImpl **job)
Definition: job.c:1197
#define S_OK
Definition: intsafe.h:51
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ BackgroundCopyManager_EnumJobs()

static HRESULT WINAPI BackgroundCopyManager_EnumJobs ( IBackgroundCopyManager iface,
DWORD  flags,
IEnumBackgroundCopyJobs **  ppEnum 
)
static

Definition at line 108 of file qmgr.c.

110 {
111  TRACE("(0x%x %p)\n", flags, ppEnum);
112  return enum_copy_job_create(&globalMgr, ppEnum);
113 }
HRESULT enum_copy_job_create(BackgroundCopyManagerImpl *qmgr, IEnumBackgroundCopyJobs **enumjob)
Definition: enum_jobs.c:179
BackgroundCopyManagerImpl globalMgr
Definition: qmgr.c:26
#define TRACE(s)
Definition: solgame.cpp:4
GLbitfield flags
Definition: glext.h:7161

◆ BackgroundCopyManager_GetErrorDescription()

static HRESULT WINAPI BackgroundCopyManager_GetErrorDescription ( IBackgroundCopyManager iface,
HRESULT  hr,
DWORD  langid,
LPWSTR error_description 
)
static

Definition at line 115 of file qmgr.c.

117 {
118  FIXME("(0x%08x 0x%x %p): stub\n", hr, langid, error_description);
119  return E_NOTIMPL;
120 }
HRESULT hr
Definition: shlfolder.c:183
LANGID langid
Definition: msctf.idl:605
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ BackgroundCopyManager_GetJob()

static HRESULT WINAPI BackgroundCopyManager_GetJob ( IBackgroundCopyManager iface,
REFGUID  jobID,
IBackgroundCopyJob **  job 
)
static

Definition at line 77 of file qmgr.c.

79 {
83 
84  TRACE("(%s %p)\n", debugstr_guid(jobID), job);
85 
86  if (!job || !jobID) return E_INVALIDARG;
87 
88  *job = NULL;
89 
90  EnterCriticalSection(&qmgr->cs);
91 
92  LIST_FOR_EACH_ENTRY(cur, &qmgr->jobs, BackgroundCopyJobImpl, entryFromQmgr)
93  {
94  if (IsEqualGUID(&cur->jobId, jobID))
95  {
97  IBackgroundCopyJob3_AddRef(&cur->IBackgroundCopyJob3_iface);
98  hr = S_OK;
99  break;
100  }
101  }
102 
103  LeaveCriticalSection(&qmgr->cs);
104 
105  return hr;
106 }
IBackgroundCopyJob3 IBackgroundCopyJob3_iface
Definition: qmgr.h:38
static HANDLE job
Definition: process.c:77
HRESULT hr
Definition: shlfolder.c:183
BackgroundCopyManagerImpl globalMgr
Definition: qmgr.c:26
CRITICAL_SECTION cs
Definition: qmgr.h:89
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
struct list jobs
Definition: qmgr.h:91
#define TRACE(s)
Definition: solgame.cpp:4
#define BG_E_NOT_FOUND
Definition: bitsmsg.h:38
LONG HRESULT
Definition: typedefs.h:79
#define S_OK
Definition: intsafe.h:51
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)

◆ BackgroundCopyManager_QueryInterface()

static HRESULT WINAPI BackgroundCopyManager_QueryInterface ( IBackgroundCopyManager iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 28 of file qmgr.c.

30 {
31  TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
32 
33  if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IBackgroundCopyManager))
34  {
35  *ppv = iface;
36  IBackgroundCopyManager_AddRef(iface);
37  return S_OK;
38  }
39 
40  *ppv = NULL;
41  return E_NOINTERFACE;
42 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:51
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112

◆ BackgroundCopyManager_Release()

static ULONG WINAPI BackgroundCopyManager_Release ( IBackgroundCopyManager iface)
static

Definition at line 49 of file qmgr.c.

50 {
51  return 1;
52 }

◆ BackgroundCopyManagerConstructor()

HRESULT BackgroundCopyManagerConstructor ( LPVOID ppObj)

Definition at line 141 of file qmgr.c.

142 {
143  TRACE("(%p)\n", ppObj);
144  *ppObj = &globalMgr;
145  return S_OK;
146 }
BackgroundCopyManagerImpl globalMgr
Definition: qmgr.c:26
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51

Referenced by BITS_IClassFactory_CreateInstance().

◆ fileTransfer()

DWORD WINAPI fileTransfer ( void param)

Definition at line 148 of file qmgr.c.

149 {
151  HANDLE events[2];
152 
153  events[0] = stop_event;
154  events[1] = qmgr->jobEvent;
155 
156  for (;;)
157  {
158  BackgroundCopyJobImpl *job, *jobCur;
159  BOOL haveJob = FALSE;
160 
161  /* Check if it's the stop_event */
163  {
164  LIST_FOR_EACH_ENTRY_SAFE(job, jobCur, &qmgr->jobs, BackgroundCopyJobImpl, entryFromQmgr)
165  {
166  list_remove(&job->entryFromQmgr);
167  IBackgroundCopyJob3_Release(&job->IBackgroundCopyJob3_iface);
168  }
169  return 0;
170  }
171 
172  /* Note that other threads may add files to the job list, but only
173  this thread ever deletes them so we don't need to worry about jobs
174  magically disappearing from the list. */
175  EnterCriticalSection(&qmgr->cs);
176 
177  LIST_FOR_EACH_ENTRY_SAFE(job, jobCur, &qmgr->jobs, BackgroundCopyJobImpl, entryFromQmgr)
178  {
179  if (job->state == BG_JOB_STATE_ACKNOWLEDGED || job->state == BG_JOB_STATE_CANCELLED)
180  {
181  list_remove(&job->entryFromQmgr);
182  IBackgroundCopyJob3_Release(&job->IBackgroundCopyJob3_iface);
183  }
184  else if (job->state == BG_JOB_STATE_QUEUED)
185  {
186  haveJob = TRUE;
187  break;
188  }
189  else if (job->state == BG_JOB_STATE_CONNECTING
190  || job->state == BG_JOB_STATE_TRANSFERRING)
191  {
192  ERR("Invalid state for job %p: %d\n", job, job->state);
193  }
194  }
195 
196  if (!haveJob)
197  ResetEvent(qmgr->jobEvent);
198 
199  LeaveCriticalSection(&qmgr->cs);
200 
201  if (haveJob)
202  processJob(job);
203  }
204 }
static HANDLE job
Definition: process.c:77
#define TRUE
Definition: types.h:120
BackgroundCopyManagerImpl globalMgr
Definition: qmgr.c:26
CRITICAL_SECTION cs
Definition: qmgr.h:89
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
Definition: synch.c:151
HANDLE stop_event
Definition: nfs41_daemon.c:55
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
struct list jobs
Definition: qmgr.h:91
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define WAIT_OBJECT_0
Definition: winbase.h:387
void processJob(BackgroundCopyJobImpl *job)
Definition: job.c:1265
#define ERR(fmt,...)
Definition: debug.h:110
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:714
HANDLE events[2]
Definition: event.c:4
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define INFINITE
Definition: serial.h:102

Referenced by ServiceMain().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( qmgr  )

Variable Documentation

◆ BackgroundCopyManagerVtbl

const IBackgroundCopyManagerVtbl BackgroundCopyManagerVtbl
static
Initial value:
=
{
}
static ULONG WINAPI BackgroundCopyManager_Release(IBackgroundCopyManager *iface)
Definition: qmgr.c:49
static HRESULT WINAPI BackgroundCopyManager_CreateJob(IBackgroundCopyManager *iface, LPCWSTR DisplayName, BG_JOB_TYPE Type, GUID *pJobId, IBackgroundCopyJob **ppJob)
Definition: qmgr.c:56
static HRESULT WINAPI BackgroundCopyManager_GetErrorDescription(IBackgroundCopyManager *iface, HRESULT hr, DWORD langid, LPWSTR *error_description)
Definition: qmgr.c:115
static ULONG WINAPI BackgroundCopyManager_AddRef(IBackgroundCopyManager *iface)
Definition: qmgr.c:44
static HRESULT WINAPI BackgroundCopyManager_EnumJobs(IBackgroundCopyManager *iface, DWORD flags, IEnumBackgroundCopyJobs **ppEnum)
Definition: qmgr.c:108
static HRESULT WINAPI BackgroundCopyManager_QueryInterface(IBackgroundCopyManager *iface, REFIID riid, void **ppv)
Definition: qmgr.c:28
static HRESULT WINAPI BackgroundCopyManager_GetJob(IBackgroundCopyManager *iface, REFGUID jobID, IBackgroundCopyJob **job)
Definition: qmgr.c:77

Definition at line 122 of file qmgr.c.

◆ globalMgr

Initial value:
= {
{ NULL, -1, 0, 0, 0, 0 },
}
smooth NULL
Definition: ftsmooth.c:416
static const IBackgroundCopyManagerVtbl BackgroundCopyManagerVtbl
Definition: qmgr.c:122

Definition at line 26 of file qmgr.c.

Referenced by BackgroundCopyJob_Resume(), BackgroundCopyManager_CreateJob(), BackgroundCopyManager_EnumJobs(), BackgroundCopyManager_GetJob(), BackgroundCopyManagerConstructor(), fileTransfer(), ServiceMain(), and transitionJobState().