You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
668 lines
18 KiB
668 lines
18 KiB
// Job.cpp: implementation of the CJob class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#define __FILE_ID__ 17
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
IMPLEMENT_DYNCREATE(CJob, CObject)
|
|
|
|
DWORD
|
|
CJob::Init (
|
|
PFAX_JOB_ENTRY_EX pJob,
|
|
CServerNode* pServer
|
|
)
|
|
/*++
|
|
|
|
Routine name : CJob::Init
|
|
|
|
Routine description:
|
|
|
|
Constructs a new job from a FAX_JOB_ENTRY_EX structure
|
|
|
|
Author:
|
|
|
|
Eran Yariv (EranY), Jan, 2000
|
|
|
|
Arguments:
|
|
|
|
pJob [in] - Pointer to FAX_JOB_ENTRY_EX structure
|
|
pServer [in] - pointer to CServerNode object
|
|
|
|
Return Value:
|
|
|
|
Standard Win32 error code
|
|
|
|
--*/
|
|
{
|
|
DWORD dwRes = ERROR_SUCCESS;
|
|
DBG_ENTER(TEXT("CJob::Init"), dwRes);
|
|
|
|
ASSERTION (pServer);
|
|
m_pServer = pServer;
|
|
|
|
ASSERTION (!m_bValid);
|
|
|
|
m_dwJobOnlyValidityMask = pJob->dwValidityMask;
|
|
|
|
try
|
|
{
|
|
//
|
|
// Message id
|
|
//
|
|
ASSERTION (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_MESSAGE_ID );
|
|
m_dwlMessageId = pJob->dwlMessageId;
|
|
|
|
//
|
|
// Broadcast id
|
|
//
|
|
m_dwlBroadcastId = (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_BROADCAST_ID) ?
|
|
pJob->dwlBroadcastId : 0;
|
|
|
|
//
|
|
// Recipient info
|
|
//
|
|
m_cstrRecipientNumber = pJob->lpctstrRecipientNumber ?
|
|
pJob->lpctstrRecipientNumber : TEXT("");
|
|
m_cstrRecipientName = pJob->lpctstrRecipientName ?
|
|
pJob->lpctstrRecipientName : TEXT("");
|
|
//
|
|
// Sender info
|
|
//
|
|
m_cstrSenderUserName = pJob->lpctstrSenderUserName ?
|
|
pJob->lpctstrSenderUserName : TEXT("");
|
|
m_cstrBillingCode = pJob->lpctstrBillingCode ?
|
|
pJob->lpctstrBillingCode : TEXT("");
|
|
//
|
|
// Document info
|
|
//
|
|
m_cstrDocumentName = pJob->lpctstrDocumentName ?
|
|
pJob->lpctstrDocumentName : TEXT("");
|
|
m_cstrSubject = pJob->lpctstrSubject ?
|
|
pJob->lpctstrSubject : TEXT("");
|
|
|
|
//
|
|
// Server name
|
|
//
|
|
m_cstrServerName = m_pServer->Machine();
|
|
|
|
//
|
|
// Original scheduled time
|
|
//
|
|
if (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_ORIGINAL_SCHEDULE_TIME)
|
|
{
|
|
m_tmOriginalScheduleTime = pJob->tmOriginalScheduleTime;
|
|
}
|
|
else
|
|
{
|
|
m_tmOriginalScheduleTime.Zero ();
|
|
}
|
|
//
|
|
// Submission time
|
|
//
|
|
if (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_SUBMISSION_TIME)
|
|
{
|
|
m_tmSubmissionTime = pJob->tmSubmissionTime;
|
|
}
|
|
else
|
|
{
|
|
m_tmSubmissionTime.Zero ();
|
|
}
|
|
//
|
|
// Priority
|
|
//
|
|
if (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_PRIORITY)
|
|
{
|
|
m_Priority = pJob->Priority;
|
|
ASSERTION (m_Priority <= FAX_PRIORITY_TYPE_HIGH);
|
|
}
|
|
else
|
|
{
|
|
m_Priority = (FAX_ENUM_PRIORITY_TYPE)-1;
|
|
}
|
|
}
|
|
catch (CException *pException)
|
|
{
|
|
TCHAR wszCause[1024];
|
|
|
|
pException->GetErrorMessage (wszCause, 1024);
|
|
pException->Delete ();
|
|
VERBOSE (EXCEPTION_ERR,
|
|
TEXT("CJob::Init caused exception : %s"),
|
|
wszCause);
|
|
dwRes = ERROR_NOT_ENOUGH_MEMORY;
|
|
return dwRes;
|
|
}
|
|
|
|
m_bValid = TRUE;
|
|
|
|
m_dwPossibleOperations = 0;
|
|
if (m_dwJobOnlyValidityMask & FAX_JOB_FIELD_STATUS_SUB_STRUCT)
|
|
{
|
|
//
|
|
// Now update the status
|
|
//
|
|
dwRes = UpdateStatus (pJob->pStatus);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// No status
|
|
//
|
|
VERBOSE (DBG_MSG, TEXT("Job id 0x%016I64x has no status"), m_dwlMessageId);
|
|
m_dwValidityMask = m_dwJobOnlyValidityMask;
|
|
ASSERTION_FAILURE;
|
|
}
|
|
return dwRes;
|
|
} // CJob::Init
|
|
|
|
BOOL
|
|
CJob::IsNewStatus (
|
|
PFAX_JOB_STATUS pStatus
|
|
)
|
|
/*++
|
|
|
|
Routine name : CJob::IsNewStatus
|
|
|
|
Routine description:
|
|
|
|
Check if the new status deffer from the current one
|
|
|
|
Arguments:
|
|
|
|
pStatus [in] - Pointer to a new status structure
|
|
|
|
Return Value:
|
|
|
|
TRUE if the new status deffer from the current one
|
|
FALSE otherwize
|
|
|
|
--*/
|
|
{
|
|
DBG_ENTER(TEXT("CJob::IsNewStatus"));
|
|
|
|
ASSERTION (pStatus);
|
|
|
|
if(m_dwValidityMask != (m_dwJobOnlyValidityMask | (pStatus->dwValidityMask)) ||
|
|
m_dwJobID != pStatus->dwJobID ||
|
|
m_dwJobType != pStatus->dwJobType ||
|
|
m_dwQueueStatus != pStatus->dwQueueStatus ||
|
|
m_dwExtendedStatus != pStatus->dwExtendedStatus ||
|
|
m_dwSize != pStatus->dwSize ||
|
|
m_dwPageCount != pStatus->dwPageCount ||
|
|
m_dwCurrentPage != pStatus->dwCurrentPage ||
|
|
m_tmScheduleTime != pStatus->tmScheduleTime ||
|
|
m_tmTransmissionStartTime != pStatus->tmTransmissionStartTime ||
|
|
m_tmTransmissionEndTime != pStatus->tmTransmissionEndTime ||
|
|
m_dwDeviceID != pStatus->dwDeviceID ||
|
|
m_dwRetries != pStatus->dwRetries ||
|
|
m_dwPossibleOperations != (pStatus->dwAvailableJobOperations | FAX_JOB_OP_PROPERTIES))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
if((pStatus->lpctstrExtendedStatus && m_cstrExtendedStatus.Compare(pStatus->lpctstrExtendedStatus)) ||
|
|
(pStatus->lpctstrTsid && m_cstrTsid.Compare(pStatus->lpctstrTsid)) ||
|
|
(pStatus->lpctstrCsid && m_cstrCsid.Compare(pStatus->lpctstrCsid)) ||
|
|
(pStatus->lpctstrDeviceName && m_cstrDeviceName.Compare(pStatus->lpctstrDeviceName)) ||
|
|
(pStatus->lpctstrCallerID && m_cstrCallerID.Compare(pStatus->lpctstrCallerID)) ||
|
|
(pStatus->lpctstrRoutingInfo && m_cstrRoutingInfo.Compare(pStatus->lpctstrRoutingInfo)))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
} // CJob::IsNewStatus
|
|
|
|
DWORD
|
|
CJob::UpdateStatus (
|
|
PFAX_JOB_STATUS pStatus
|
|
)
|
|
{
|
|
DWORD dwRes = ERROR_SUCCESS;
|
|
DBG_ENTER(TEXT("CJob::UpdateStatus"), dwRes);
|
|
|
|
ASSERTION (m_bValid);
|
|
ASSERTION (pStatus);
|
|
|
|
m_dwValidityMask = m_dwJobOnlyValidityMask | (pStatus->dwValidityMask);
|
|
|
|
try
|
|
{
|
|
//
|
|
// Job id
|
|
//
|
|
ASSERTION (m_dwValidityMask & FAX_JOB_FIELD_JOB_ID);
|
|
m_dwJobID = pStatus->dwJobID;
|
|
//
|
|
// Job type
|
|
//
|
|
ASSERTION (m_dwValidityMask & FAX_JOB_FIELD_TYPE);
|
|
m_dwJobType = pStatus->dwJobType;
|
|
//
|
|
// Queue status
|
|
//
|
|
ASSERTION (m_dwValidityMask & FAX_JOB_FIELD_QUEUE_STATUS);
|
|
m_dwQueueStatus = pStatus->dwQueueStatus;
|
|
//
|
|
// Extended status
|
|
//
|
|
m_dwExtendedStatus = pStatus->dwExtendedStatus;
|
|
m_cstrExtendedStatus = pStatus->lpctstrExtendedStatus;
|
|
//
|
|
// Size
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_SIZE)
|
|
{
|
|
m_dwSize = pStatus->dwSize;
|
|
}
|
|
else
|
|
{
|
|
m_dwSize = 0;
|
|
}
|
|
//
|
|
// Page count
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_PAGE_COUNT)
|
|
{
|
|
m_dwPageCount = pStatus->dwPageCount;
|
|
}
|
|
else
|
|
{
|
|
m_dwPageCount = 0;
|
|
}
|
|
//
|
|
// Current page
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_CURRENT_PAGE)
|
|
{
|
|
m_dwCurrentPage = pStatus->dwCurrentPage;
|
|
}
|
|
else
|
|
{
|
|
m_dwCurrentPage = 0;
|
|
}
|
|
//
|
|
// TCID and CSID
|
|
//
|
|
m_cstrTsid = pStatus->lpctstrTsid;
|
|
m_cstrCsid = pStatus->lpctstrCsid;
|
|
//
|
|
// Scheduled time
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_SCHEDULE_TIME)
|
|
{
|
|
m_tmScheduleTime = pStatus->tmScheduleTime;
|
|
}
|
|
else
|
|
{
|
|
m_tmScheduleTime.Zero ();
|
|
}
|
|
//
|
|
// Start time
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_START_TIME)
|
|
{
|
|
m_tmTransmissionStartTime = pStatus->tmTransmissionStartTime;
|
|
}
|
|
else
|
|
{
|
|
m_tmTransmissionStartTime.Zero ();
|
|
}
|
|
|
|
//
|
|
// End time
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_TRANSMISSION_END_TIME)
|
|
{
|
|
m_tmTransmissionEndTime = pStatus->tmTransmissionEndTime;
|
|
}
|
|
else
|
|
{
|
|
m_tmTransmissionEndTime.Zero ();
|
|
}
|
|
|
|
//
|
|
// Device
|
|
//
|
|
m_dwDeviceID = pStatus->dwDeviceID;
|
|
m_cstrDeviceName = pStatus->lpctstrDeviceName;
|
|
//
|
|
// Retries
|
|
//
|
|
if (m_dwValidityMask & FAX_JOB_FIELD_RETRIES)
|
|
{
|
|
m_dwRetries = pStatus->dwRetries;
|
|
}
|
|
else
|
|
{
|
|
m_dwRetries = 0;
|
|
}
|
|
//
|
|
// Caller id and routing info
|
|
//
|
|
m_cstrCallerID = pStatus->lpctstrCallerID;
|
|
m_cstrRoutingInfo = pStatus->lpctstrRoutingInfo;
|
|
|
|
//
|
|
// possible job operations
|
|
//
|
|
m_dwPossibleOperations = pStatus->dwAvailableJobOperations | FAX_JOB_OP_PROPERTIES;
|
|
}
|
|
catch (CException *pException)
|
|
{
|
|
TCHAR wszCause[1024];
|
|
|
|
pException->GetErrorMessage (wszCause, 1024);
|
|
pException->Delete ();
|
|
VERBOSE (EXCEPTION_ERR,
|
|
TEXT("CJob::UpdateStatus caused exception : %s"),
|
|
wszCause);
|
|
dwRes = ERROR_NOT_ENOUGH_MEMORY;
|
|
m_bValid = FALSE;
|
|
return dwRes;
|
|
}
|
|
|
|
ASSERTION (ERROR_SUCCESS == dwRes);
|
|
return dwRes;
|
|
} // CJob::UpdateStatus
|
|
|
|
const JobStatusType
|
|
CJob::GetStatus () const
|
|
/*++
|
|
|
|
Routine name : CJob::GetStatus
|
|
|
|
Routine description:
|
|
|
|
Finds the current job status
|
|
|
|
Author:
|
|
|
|
Eran Yariv (EranY), Jan, 2000
|
|
|
|
Arguments:
|
|
|
|
|
|
Return Value:
|
|
|
|
Job status
|
|
|
|
--*/
|
|
{
|
|
DBG_ENTER(TEXT("CJob::GetStatus"));
|
|
|
|
ASSERTION (m_dwValidityMask & FAX_JOB_FIELD_STATUS_SUB_STRUCT);
|
|
ASSERTION (m_dwValidityMask & FAX_JOB_FIELD_QUEUE_STATUS);
|
|
|
|
DWORD dwQueueStatus = m_dwQueueStatus;
|
|
//
|
|
// Start by checking status modifiers:
|
|
//
|
|
if (dwQueueStatus & JS_PAUSED)
|
|
{
|
|
return JOB_STAT_PAUSED;
|
|
}
|
|
//
|
|
// We igonre the JS_NOLINE modifier.
|
|
// Remove the modifiers now.
|
|
//
|
|
dwQueueStatus &= ~(JS_PAUSED | JS_NOLINE);
|
|
//
|
|
// Check other status values
|
|
//
|
|
switch (dwQueueStatus)
|
|
{
|
|
case JS_PENDING:
|
|
return JOB_STAT_PENDING;
|
|
case JS_INPROGRESS:
|
|
case JS_FAILED: // The job is about to be deleted in a sec. Do not update status.
|
|
return JOB_STAT_INPROGRESS;
|
|
case JS_DELETING:
|
|
return JOB_STAT_DELETING;
|
|
case JS_RETRYING:
|
|
return JOB_STAT_RETRYING;
|
|
case JS_RETRIES_EXCEEDED:
|
|
return JOB_STAT_RETRIES_EXCEEDED;
|
|
case JS_COMPLETED:
|
|
return JOB_STAT_COMPLETED;
|
|
case JS_CANCELED:
|
|
return JOB_STAT_CANCELED;
|
|
case JS_CANCELING:
|
|
return JOB_STAT_CANCELING;
|
|
case JS_ROUTING:
|
|
return JOB_STAT_ROUTING;
|
|
default:
|
|
ASSERTION_FAILURE;
|
|
return (JobStatusType)-1;
|
|
}
|
|
} // CJob::StatusValue
|
|
|
|
|
|
DWORD
|
|
CJob::GetTiff (
|
|
CString &cstrTiffLocation
|
|
) const
|
|
/*++
|
|
|
|
Routine name : CJob::GetTiff
|
|
|
|
Routine description:
|
|
|
|
Retrieves the job's TIFF file from the server
|
|
|
|
Author:
|
|
|
|
Eran Yariv (EranY), Jan, 2000
|
|
|
|
Arguments:
|
|
|
|
cstrTiffLocation [out] - Name of TIFF file
|
|
|
|
Return Value:
|
|
|
|
Standard Win32 error code
|
|
|
|
--*/
|
|
{
|
|
DWORD dwRes = ERROR_SUCCESS;
|
|
DBG_ENTER(TEXT("CJob::GetTiff"), dwRes);
|
|
|
|
dwRes = CopyTiffFromServer (m_pServer,
|
|
m_dwlMessageId,
|
|
FAX_MESSAGE_FOLDER_QUEUE,
|
|
cstrTiffLocation);
|
|
if (ERROR_SUCCESS != dwRes)
|
|
{
|
|
CALL_FAIL (GENERAL_ERR, TEXT("CopyTiffFromServer"), dwRes);
|
|
}
|
|
return dwRes;
|
|
} // CJob::GetTiff
|
|
|
|
DWORD
|
|
CJob::DoJobOperation (
|
|
DWORD dwJobOp
|
|
)
|
|
/*++
|
|
|
|
Routine name : CJob::DoJobOperation
|
|
|
|
Routine description:
|
|
|
|
Performs an operation on the job
|
|
|
|
Author:
|
|
|
|
Eran Yariv (EranY), Jan, 2000
|
|
|
|
Arguments:
|
|
|
|
dwJobOp [in] - Operation.
|
|
Supported operations are:
|
|
FAX_JOB_OP_PAUSE, FAX_JOB_OP_RESUME,
|
|
FAX_JOB_OP_RESTART, and FAX_JOB_OP_DELETE.
|
|
|
|
Return Value:
|
|
|
|
Standard Win32 error code
|
|
|
|
--*/
|
|
{
|
|
DWORD dwRes = ERROR_SUCCESS;
|
|
DBG_ENTER(TEXT("CJob::DoJobOperation"), dwRes);
|
|
DWORD dwJobCommand;
|
|
switch (dwJobOp)
|
|
{
|
|
case FAX_JOB_OP_PAUSE:
|
|
dwJobCommand = JC_PAUSE;
|
|
break;
|
|
|
|
case FAX_JOB_OP_RESUME:
|
|
dwJobCommand = JC_RESUME;
|
|
break;
|
|
|
|
case FAX_JOB_OP_RESTART:
|
|
dwJobCommand = JC_RESTART;
|
|
break;
|
|
|
|
case FAX_JOB_OP_DELETE:
|
|
dwJobCommand = JC_DELETE;
|
|
break;
|
|
|
|
default:
|
|
ASSERTION_FAILURE;
|
|
dwRes = ERROR_CAN_NOT_COMPLETE;
|
|
return dwRes;
|
|
}
|
|
if (!(dwJobOp & GetPossibleOperations()))
|
|
{
|
|
VERBOSE (DBG_MSG, TEXT("Job can no longer do operation"));
|
|
dwRes = ERROR_CAN_NOT_COMPLETE;
|
|
return dwRes;
|
|
}
|
|
HANDLE hFax;
|
|
dwRes = m_pServer->GetConnectionHandle (hFax);
|
|
if (ERROR_SUCCESS != dwRes)
|
|
{
|
|
CALL_FAIL (GENERAL_ERR, TEXT("CServerNode::GetConnectionHandle"), dwRes);
|
|
return dwRes;
|
|
}
|
|
|
|
FAX_JOB_ENTRY fje = {0};
|
|
fje.SizeOfStruct = sizeof(FAX_JOB_ENTRY);
|
|
|
|
START_RPC_TIME(TEXT("FaxSetJob"));
|
|
if (!FaxSetJob (hFax,
|
|
m_dwJobID,
|
|
dwJobCommand,
|
|
&fje))
|
|
{
|
|
dwRes = GetLastError ();
|
|
END_RPC_TIME(TEXT("FaxSetJob"));
|
|
m_pServer->SetLastRPCError (dwRes);
|
|
CALL_FAIL (RPC_ERR, TEXT("FaxSetJob"), dwRes);
|
|
return dwRes;
|
|
}
|
|
END_RPC_TIME(TEXT("FaxSetJob"));
|
|
|
|
//
|
|
// Update job status and possible operations
|
|
//
|
|
switch (dwJobOp)
|
|
{
|
|
case FAX_JOB_OP_PAUSE:
|
|
m_dwQueueStatus |= JS_PAUSED;
|
|
m_dwPossibleOperations &= ~FAX_JOB_OP_PAUSE;
|
|
m_dwPossibleOperations |= FAX_JOB_OP_RESUME;
|
|
break;
|
|
|
|
case FAX_JOB_OP_RESUME:
|
|
m_dwQueueStatus &= ~JS_PAUSED;
|
|
m_dwPossibleOperations &= ~FAX_JOB_OP_RESUME;
|
|
m_dwPossibleOperations |= FAX_JOB_OP_PAUSE;
|
|
break;
|
|
|
|
case FAX_JOB_OP_RESTART:
|
|
m_dwQueueStatus = JS_PENDING;
|
|
m_dwPossibleOperations &= ~FAX_JOB_OP_RESTART;
|
|
m_dwPossibleOperations |= FAX_JOB_OP_PAUSE;
|
|
break;
|
|
|
|
case FAX_JOB_OP_DELETE:
|
|
m_dwPossibleOperations &= ~FAX_JOB_OP_DELETE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
ASSERTION (ERROR_SUCCESS == dwRes);
|
|
return dwRes;
|
|
} // CJob::DoJobOperation
|
|
|
|
|
|
DWORD
|
|
CJob::Copy(
|
|
const CJob& other
|
|
)
|
|
{
|
|
DWORD dwRes = ERROR_SUCCESS;
|
|
DBG_ENTER(TEXT("CJob::Copy"), dwRes);
|
|
|
|
try
|
|
{
|
|
m_dwlMessageId = other.m_dwlMessageId;
|
|
m_dwlBroadcastId = other.m_dwlBroadcastId;
|
|
m_dwValidityMask = other.m_dwValidityMask;
|
|
m_dwJobOnlyValidityMask = other.m_dwJobOnlyValidityMask;
|
|
m_dwJobID = other.m_dwJobID;
|
|
m_dwJobType = other.m_dwJobType;
|
|
m_dwQueueStatus = other.m_dwQueueStatus;
|
|
m_dwExtendedStatus = other.m_dwExtendedStatus;
|
|
m_dwSize = other.m_dwSize;
|
|
m_dwPageCount = other.m_dwPageCount;
|
|
m_dwCurrentPage = other.m_dwCurrentPage;
|
|
m_dwDeviceID = other.m_dwDeviceID;
|
|
m_dwRetries = other.m_dwRetries;
|
|
m_cstrRecipientNumber = other.m_cstrRecipientNumber;
|
|
m_cstrRecipientName = other.m_cstrRecipientName;
|
|
m_cstrSenderUserName = other.m_cstrSenderUserName;
|
|
m_cstrBillingCode = other.m_cstrBillingCode;
|
|
m_cstrDocumentName = other.m_cstrDocumentName;
|
|
m_cstrSubject = other.m_cstrSubject;
|
|
m_cstrExtendedStatus = other.m_cstrExtendedStatus;
|
|
m_cstrTsid = other.m_cstrTsid;
|
|
m_cstrCsid = other.m_cstrCsid;
|
|
m_cstrDeviceName = other.m_cstrDeviceName;
|
|
m_cstrCallerID = other.m_cstrCallerID;
|
|
m_cstrRoutingInfo = other.m_cstrRoutingInfo;
|
|
m_tmOriginalScheduleTime = other.m_tmOriginalScheduleTime;
|
|
m_tmSubmissionTime = other.m_tmSubmissionTime;
|
|
m_tmScheduleTime = other.m_tmScheduleTime;
|
|
m_tmTransmissionStartTime = other.m_tmTransmissionStartTime;
|
|
m_tmTransmissionEndTime = other.m_tmTransmissionEndTime;
|
|
m_Priority = other.m_Priority;
|
|
m_dwPossibleOperations = other.m_dwPossibleOperations;
|
|
m_cstrServerName = other.m_cstrServerName;
|
|
|
|
m_bValid = other.m_bValid;
|
|
}
|
|
catch(...)
|
|
{
|
|
dwRes = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
|
|
return dwRes;
|
|
|
|
} // CJob::Copy
|
|
|