wininet: Moved WORKREQ_SENDCALLBACK out of WORKREQUEST.
This commit is contained in:
parent
7ca22d701d
commit
195ea90f3b
|
@ -427,14 +427,6 @@ struct WORKREQ_FTPFINDNEXTW
|
|||
LPWIN32_FIND_DATAW lpFindFileData;
|
||||
};
|
||||
|
||||
struct WORKREQ_SENDCALLBACK
|
||||
{
|
||||
DWORD_PTR dwContext;
|
||||
DWORD dwInternetStatus;
|
||||
LPVOID lpvStatusInfo;
|
||||
DWORD dwStatusInfoLength;
|
||||
};
|
||||
|
||||
typedef struct WORKREQ task_header_t;
|
||||
typedef void (*async_task_proc_t)(task_header_t*);
|
||||
|
||||
|
@ -455,7 +447,6 @@ typedef struct WORKREQ
|
|||
struct WORKREQ_FTPREMOVEDIRECTORYW FtpRemoveDirectoryW;
|
||||
struct WORKREQ_FTPRENAMEFILEW FtpRenameFileW;
|
||||
struct WORKREQ_FTPFINDNEXTW FtpFindNextW;
|
||||
struct WORKREQ_SENDCALLBACK SendCallback;
|
||||
} u;
|
||||
} WORKREQUEST, *LPWORKREQUEST;
|
||||
|
||||
|
|
|
@ -356,18 +356,24 @@ VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext,
|
|||
heap_free(lpvNewInfo);
|
||||
}
|
||||
|
||||
static void SendAsyncCallbackProc(WORKREQUEST *workRequest)
|
||||
typedef struct {
|
||||
task_header_t hdr;
|
||||
DWORD_PTR context;
|
||||
DWORD status;
|
||||
LPVOID status_info;
|
||||
DWORD status_info_len;
|
||||
} send_callback_task_t;
|
||||
|
||||
static void SendAsyncCallbackProc(task_header_t *hdr)
|
||||
{
|
||||
struct WORKREQ_SENDCALLBACK const *req = &workRequest->u.SendCallback;
|
||||
send_callback_task_t *task = (send_callback_task_t*)hdr;
|
||||
|
||||
TRACE("%p\n", workRequest->hdr);
|
||||
TRACE("%p\n", task->hdr.hdr);
|
||||
|
||||
INTERNET_SendCallback(workRequest->hdr,
|
||||
req->dwContext, req->dwInternetStatus, req->lpvStatusInfo,
|
||||
req->dwStatusInfoLength);
|
||||
INTERNET_SendCallback(task->hdr.hdr, task->context, task->status, task->status_info, task->status_info_len);
|
||||
|
||||
/* And frees the copy of the status info */
|
||||
heap_free(req->lpvStatusInfo);
|
||||
heap_free(task->status_info);
|
||||
}
|
||||
|
||||
void SendAsyncCallback(object_header_t *hdr, DWORD_PTR dwContext,
|
||||
|
@ -385,24 +391,22 @@ void SendAsyncCallback(object_header_t *hdr, DWORD_PTR dwContext,
|
|||
|
||||
if (hdr->dwFlags & INTERNET_FLAG_ASYNC)
|
||||
{
|
||||
WORKREQUEST *task;
|
||||
struct WORKREQ_SENDCALLBACK *req;
|
||||
void *lpvStatusInfo_copy = lpvStatusInfo;
|
||||
send_callback_task_t *task;
|
||||
void *lpvStatusInfo_copy = lpvStatusInfo;
|
||||
|
||||
if (lpvStatusInfo)
|
||||
{
|
||||
lpvStatusInfo_copy = heap_alloc(dwStatusInfoLength);
|
||||
memcpy(lpvStatusInfo_copy, lpvStatusInfo, dwStatusInfoLength);
|
||||
}
|
||||
if (lpvStatusInfo)
|
||||
{
|
||||
lpvStatusInfo_copy = heap_alloc(dwStatusInfoLength);
|
||||
memcpy(lpvStatusInfo_copy, lpvStatusInfo, dwStatusInfoLength);
|
||||
}
|
||||
|
||||
task = alloc_async_task(hdr, SendAsyncCallbackProc, sizeof(*task));
|
||||
req = &task->u.SendCallback;
|
||||
req->dwContext = dwContext;
|
||||
req->dwInternetStatus = dwInternetStatus;
|
||||
req->lpvStatusInfo = lpvStatusInfo_copy;
|
||||
req->dwStatusInfoLength = dwStatusInfoLength;
|
||||
task->context = dwContext;
|
||||
task->status = dwInternetStatus;
|
||||
task->status_info = lpvStatusInfo_copy;
|
||||
task->status_info_len = dwStatusInfoLength;
|
||||
|
||||
INTERNET_AsyncCall(task);
|
||||
INTERNET_AsyncCall(&task->hdr);
|
||||
}
|
||||
else
|
||||
INTERNET_SendCallback(hdr, dwContext, dwInternetStatus,
|
||||
|
|
Loading…
Reference in New Issue