📄 srmpmsg.cxx
字号:
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandlePropsExpiresAt(void) {
PropsCheckAndSet(SRMP_ST_PROPERTIES_EXPIRESAT);
if (IsEmpty())
return E_FAIL;
SYSTEMTIME SysTime;
if (! UtlIso8601TimeToSystemTime(GetBuffer(),GetNumChars(),&SysTime))
return E_FAIL;
if (! UtlSystemTimeToCrtTime(&SysTime,(time_t*)&cMsgProps.absoluteTimeToLive))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandlePropsDuration(void) {
PropsCheckAndSet(SRMP_ST_PROPERTIES_DURATION);
if (IsEmpty())
return E_FAIL;
DWORD dwRelativeTimeOut;
if (!UtlIso8601TimeDuration(GetBuffer(),GetNumChars(),(time_t*)&dwRelativeTimeOut))
return E_FAIL;
DWORD dwAbsoluteTimeout = scutil_now() + dwRelativeTimeOut;
if (dwAbsoluteTimeout < dwRelativeTimeOut)
cMsgProps.absoluteTimeToLive = INFINITE;
else
cMsgProps.absoluteTimeToLive = dwAbsoluteTimeout;
return S_OK;
}
HRESULT CSrmpToMsmq::HandlePropsSentAt(void) {
PropsCheckAndSet(SRMP_ST_PROPERTIES_SENTAT);
if (IsEmpty())
return E_FAIL;
SYSTEMTIME SysTime;
if (! UtlIso8601TimeToSystemTime(GetBuffer(),GetNumChars(),&SysTime))
return E_FAIL;
if (! UtlSystemTimeToCrtTime(&SysTime,(time_t*)&cMsgProps.sentTime))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandlePropsInReplyTo(void) {
PropsCheckAndSet(SRMP_ST_PROPERTIES_INREPLYTO); // empty by design.
return S_OK;
}
//
// <Stream>
//
HRESULT CSrmpToMsmq::HandleStream(void) {
if (IsHeaderSet(SRMP_ST_STREAM))
return E_FAIL;
SetHeader(SRMP_ST_STREAM);
if (! IsSetSrmp(cMsgProps.dwStreamSet,SRMP_ST_STREAM_STREAMID) ||
! IsSetSrmp(cMsgProps.dwStreamSet,SRMP_ST_STREAM_CURRENT))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamStreamID(void) {
StreamCheckAndSet(SRMP_ST_STREAM_STREAMID);
if (IsEmpty())
return E_FAIL;
// Only allocate for now. How we process depends on whether on not
// MSMQ information is in this packet, which we may not know at time of parse.
if (NULL == (cMsgProps.szStreamIdBuf = AllocCharData()))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamCurrent(void) {
StreamCheckAndSet(SRMP_ST_STREAM_CURRENT);
if (IsEmpty())
return E_FAIL;
cMsgProps.EodSeqNo = _wtoi((WCHAR*) m_Chars.pBuffer);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamPrevious(void) {
StreamCheckAndSet(SRMP_ST_STREAM_PREVIOUS);
if (IsEmpty())
return E_FAIL;
cMsgProps.EodPrevSeqNo = _wtoi((WCHAR*) m_Chars.pBuffer);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamEnd(void) {
StreamCheckAndSet(SRMP_ST_STREAM_END);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamStreamRcptRequest(void) {
StreamCheckAndSet(SRMP_ST_STREAM_STREAMRECEIPTREQUEST);
return S_OK;
}
// <Stream><start>
HRESULT CSrmpToMsmq::HandleStreamStart(void) {
StreamCheckAndSet(SRMP_ST_STREAM_START);
if (! IsSetSrmp(cMsgProps.dwStreamSet,SRMP_ST_STREAM_START_SENDRECEIPTSTO))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamStartSendRcptTo(void) {
StreamCheckAndSet(SRMP_ST_STREAM_START_SENDRECEIPTSTO);
if (IsEmpty())
return E_FAIL;
if (NULL == (cMsgProps.szOrderQueue = (WCHAR*) g_funcAlloc((GetNumChars()+FN_DIRECT_TOKEN_LEN+2)*sizeof(WCHAR),g_pvAllocData))) {
SetInternalError();
return E_FAIL;
}
wsprintf(cMsgProps.szOrderQueue,L"%s=%s",FN_DIRECT_TOKEN,GetBuffer());
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamStartExpiresAt(void) {
StreamCheckAndSet(SRMP_ST_STREAM_START_EXPIRESAT);
return S_OK;
}
//
// <streamReceipt>
//
HRESULT CSrmpToMsmq::HandleStreamRcpt(void) {
if (IsHeaderSet(SRMP_ST_STREAMRCPT))
return E_FAIL;
SetHeader(SRMP_ST_STREAMRCPT);
if (! IsSetSrmp(cMsgProps.dwStreamRcptSet,SRMP_ST_STREAMRCPT_ID) ||
! IsSetSrmp(cMsgProps.dwStreamRcptSet,SRMP_ST_STREAMRCPT_LASTORDINAL))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamRcptRecvdAt(void) {
StreamRcptCheckAndSet(SRMP_ST_STREAMRCPT_RECEIVEDAT);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamRcptStreamId(void) {
StreamRcptCheckAndSet(SRMP_ST_STREAMRCPT_ID);
if (IsEmpty())
return E_FAIL;
if (NULL == (cMsgProps.EodAckStreamId = AllocCharData()))
return E_FAIL;
if (! BreakMsmqStreamId(cMsgProps.EodAckStreamId,&cMsgProps.EodAckSeqId))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamRcptLastOrdinal(void) {
StreamRcptCheckAndSet(SRMP_ST_STREAMRCPT_LASTORDINAL);
if (IsEmpty())
return E_FAIL;
if (0 == (cMsgProps.EodAckSeqNo = _wtoi64(GetBuffer())))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleStreamRcptId(void) {
StreamRcptCheckAndSet(SRMP_ST_STREAMRCPT_ID); // do nothing
return S_OK;
}
//
// <deliveryReceipt>
//
// Delivery receipt information is ignored.
HRESULT CSrmpToMsmq::HandleDeliveryRcpt(void) {
if (IsHeaderSet(SRMP_ST_DELIVERYRCPT))
return E_FAIL;
SetHeader(SRMP_ST_DELIVERYRCPT);
if (! IsSetSrmp(cMsgProps.dwDeliveryRcptSet,SRMP_ST_DELIVERYRCPT_RECEIVEDAT) ||
! IsSetSrmp(cMsgProps.dwDeliveryRcptSet,SRMP_ST_DELIVERYRCPT_ID))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleDeliveryRcptReceivedAt(void) {
DeliveryRcptCheckAndSet(SRMP_ST_DELIVERYRCPT_RECEIVEDAT);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleDeliveryRcptId(void) {
DeliveryRcptCheckAndSet(SRMP_ST_DELIVERYRCPT_ID);
return S_OK;
}
//
// <commiteReceipt>
//
// Commit Receipt information is ignored
HRESULT CSrmpToMsmq::HandleCommitRcpt(void) {
if (IsHeaderSet(SRMP_ST_COMMITMENTRCPT))
return E_FAIL;
SetHeader(SRMP_ST_COMMITMENTRCPT);
if (! IsSetSrmp(cMsgProps.dwCommitRcptSet,SRMP_ST_COMMITMENTRCPT_DECIDEDAT) ||
! IsSetSrmp(cMsgProps.dwCommitRcptSet,SRMP_ST_COMMITMENTRCPT_DECISION) ||
! IsSetSrmp(cMsgProps.dwCommitRcptSet,SRMP_ST_COMMITMENTRCPT_ID))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleCommitRcptDecidedAt(void) {
CommitRcptCheckAndSet(SRMP_ST_COMMITMENTRCPT_DECIDEDAT);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleCommitRcptDecision(void) {
CommitRcptCheckAndSet(SRMP_ST_COMMITMENTRCPT_DECISION);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleCommitRcptId(void) {
CommitRcptCheckAndSet(SRMP_ST_COMMITMENTRCPT_ID);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleCommitRcptCommiteCode(void) {
CommitRcptCheckAndSet(SRMP_ST_COMMITMENTRCPT_COMMITMENTCODE);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleCommitRcptXCommitDetail(void) {
CommitRcptCheckAndSet(SRMP_ST_COMMITMENTRCPT_XCOMMITMENTDETAIL);
return S_OK;
}
//
// <msmq>
//
HRESULT CSrmpToMsmq::HandleMsmq(void) {
if (IsHeaderSet(SRMP_ST_MSMQ))
return E_FAIL;
SetHeader(SRMP_ST_MSMQ);
if (! IsSetSrmp(cMsgProps.dwMsmqSet,SRMP_ST_MSMQ_CLASS) ||
! IsSetSrmp(cMsgProps.dwMsmqSet,SRMP_ST_MSMQ_PRIORITY) ||
! IsSetSrmp(cMsgProps.dwMsmqSet,SRMP_ST_MSMQ_BODYTYPE) ||
! IsSetSrmp(cMsgProps.dwMsmqSet,SRMP_ST_MSMQ_SOURCEQMGUID) ||
! IsSetSrmp(cMsgProps.dwMsmqSet,SRMP_ST_MSMQ_TTRQ))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqClass(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_CLASS);
if (IsEmpty())
return E_FAIL;
cMsgProps.classValue = (USHORT) _wtoi(GetBuffer());
if (! MQCLASS_IS_VALID(cMsgProps.classValue))
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqPrio(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_PRIORITY);
if (IsEmpty())
return E_FAIL;
cMsgProps.priority = (UCHAR)(_wtoi((WCHAR*)m_Chars.pBuffer));
if (cMsgProps.priority > MQ_MAX_PRIORITY)
return E_FAIL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqJournal(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_JOURNAL);
cMsgProps.auditing |= MQMSG_JOURNAL;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqDeadLetter(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_DEADLETTER);
cMsgProps.auditing |= MQMSG_DEADLETTER;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqCorrelation(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_CORRELATION);
if (IsEmpty())
return E_FAIL;
DWORD dwConverted;
if (NULL == (cMsgProps.pCorrelationID = Base642OctetW(GetBuffer(),GetNumChars(),&dwConverted)) ||
(dwConverted != PROPID_M_CORRELATIONID_SIZE)) {
return E_FAIL;
}
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqTrace(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_TRACE);
cMsgProps.fTrace = TRUE;
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqConnectorType(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_CONNECTORTYPE);
if (IsEmpty())
return E_FAIL;
return StringToGuid(GetBuffer(),&cMsgProps.connectorType) ? S_OK : E_FAIL;
}
HRESULT CSrmpToMsmq::HandleMsmqApp(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_APP);
if (IsEmpty())
return E_FAIL;
cMsgProps.applicationTag = _wtoi(GetBuffer());
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqBodyType(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_BODYTYPE);
if (IsEmpty())
return E_FAIL;
cMsgProps.bodyType = _wtoi(GetBuffer());
return S_OK;
}
// WinCE doesn't support security.
HRESULT CSrmpToMsmq::HandleMsmqHashAlg(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_HASHALGORITHM);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqSourceQMGuid(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_SOURCEQMGUID);
if (IsEmpty())
return E_FAIL;
return StringToGuid(GetBuffer(),&cMsgProps.SourceQmGuid) ? S_OK: E_FAIL;
}
// DestinationMQF, AdminMQF, and ResponseMQF all relate to Multi-queue format
// that WinCE doesn't support.
HRESULT CSrmpToMsmq::HandleMsmqDestinationMQF(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_DESTINATIONMQF);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqAdminMQF(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_ADMINMQF);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqResponseMQF(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_RESPONSEMQF);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqTTRQ(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_TTRQ);
if (IsEmpty())
return E_FAIL;
SYSTEMTIME SysTime;
if (! UtlIso8601TimeToSystemTime(GetBuffer(),GetNumChars(),&SysTime))
return E_FAIL;
if (! UtlSystemTimeToCrtTime(&SysTime,(time_t*)&cMsgProps.absoluteTimeToQueue))
return E_FAIL;
return S_OK;
}
// <msmq><eod>
HRESULT CSrmpToMsmq::HandleMsmqEod(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_EOD);
return S_OK;
}
HRESULT CSrmpToMsmq::HandleMsmqEodFirst(void) {
MsmqRcptCheckAndSet(SRMP_ST_MSMQ_EOD_FIRST);
cMsgProps.fFirst = TRUE;
return S_OK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -