📄 phuser.h
字号:
}
else
{
switch(pResponseQueue->GetType())
{
case QUEUE_FORMAT_TYPE_PUBLIC:
//
// GUID Queue that is not the same as admin queue.
//
m_bfRQT = qtGUID;
*(GUID*)pQueue = pResponseQueue->PublicID();
pQueue += sizeof(GUID);
break;
case QUEUE_FORMAT_TYPE_PRIVATE:
if(pResponseQueue->PrivateID().Lineage == *pSourceQM)
{
//
// Private Queue in source QM
//
m_bfRQT = qtSourceQM;
*(PULONG)pQueue = pResponseQueue->PrivateID().Uniquifier;
pQueue += sizeof(ULONG);
}
else if(
(pDestinationQueue->GetType() != QUEUE_FORMAT_TYPE_DIRECT) &&
(pResponseQueue->PrivateID().Lineage == *pDestinationQM))
{
//
// Private Queue in Destination QM
//
m_bfRQT = qtDestQM;
*(PULONG)pQueue = pResponseQueue->PrivateID().Uniquifier;
pQueue += sizeof(ULONG);
}
else if((pAdminQueue !=0) &&
(pAdminQueue->GetType() == QUEUE_FORMAT_TYPE_PRIVATE) &&
(pResponseQueue->PrivateID().Lineage == pAdminQueue->PrivateID().Lineage))
{
//
// Private Queue in Admin machine QM
//
m_bfRQT = qtAdminQM;
*(PULONG)pQueue = pResponseQueue->PrivateID().Uniquifier;
pQueue += sizeof(ULONG);
}
else
{
//
// Private Queue in some other Machine
//
m_bfRQT = qtPrivate;
*(OBJECTID*)pQueue = pResponseQueue->PrivateID();
pQueue += sizeof(OBJECTID);
}
break;
case QUEUE_FORMAT_TYPE_DIRECT:
{
//
// Destination queue is direct
//
m_bfRQT = qtDirect;
pQueue = SetDirectQueue(pQueue, pResponseQueue->DirectID());
break;
}
default:
//
// Unexpected type, assert with no Warning level 4.
//
ASSERT(pResponseQueue->GetType() == QUEUE_FORMAT_TYPE_DIRECT);
}
}
}
ASSERT(ISALIGN4(pQueue));
}
/*======================================================================
Function:
Description:
=======================================================================*/
inline
ULONG
CUserHeader::CalcSectionSize(
const GUID* pSourceQM,
const GUID* pDestinationQM,
const GUID* pgConnectorType,
const QUEUE_FORMAT* pDestinationQueue,
const QUEUE_FORMAT* pAdminQueue,
const QUEUE_FORMAT* pResponseQueue
)
{
ULONG ulSize = sizeof(CUserHeader);
//
// Destination Queue
//
switch(pDestinationQueue->GetType())
{
case QUEUE_FORMAT_TYPE_PUBLIC:
ulSize += sizeof(GUID);
break;
case QUEUE_FORMAT_TYPE_PRIVATE:
//
// Destination Queue is private
//
ulSize += sizeof(ULONG);
break;
case QUEUE_FORMAT_TYPE_DIRECT:
//
// Destination Queue is Direct
//
ulSize += ALIGNUP4(sizeof(USHORT) +
(wcslen(pDestinationQueue->DirectID()) + 1) * sizeof(WCHAR));
break;
}
//
// Admin Queue
//
if(pAdminQueue != 0)
{
switch(pAdminQueue->GetType())
{
case QUEUE_FORMAT_TYPE_PUBLIC:
//
// Admin Queue is PUBLIC
//
ulSize += sizeof(GUID);
break;
case QUEUE_FORMAT_TYPE_PRIVATE:
if(pAdminQueue->PrivateID().Lineage == *pSourceQM)
{
//
// Private Queue in source QM
//
ulSize += sizeof(ULONG);
}
else if(
(pDestinationQueue->GetType() != QUEUE_FORMAT_TYPE_DIRECT) &&
(pAdminQueue->PrivateID().Lineage == *pDestinationQM))
{
//
// Private Queue in Destination QM
//
ulSize += sizeof(ULONG);
}
else
{
//
// Private Queue in some other Machine
//
ulSize += sizeof(OBJECTID);
}
break;
case QUEUE_FORMAT_TYPE_DIRECT:
//
// Destination Queue is Direct
//
ulSize += ALIGNUP4(sizeof(USHORT) +
(wcslen(pAdminQueue->DirectID()) + 1) * sizeof(WCHAR));
break;
default:
//
// Unexpected type, assert with no Warning level 4.
//
ASSERT(pAdminQueue->GetType() == QUEUE_FORMAT_TYPE_DIRECT);
}
}
//
// Response Queue
//
if(pResponseQueue != 0)
{
if(pResponseQueue == pAdminQueue)
{
//
// Same as admin queue (private or guid)
//
}
else
{
switch(pResponseQueue->GetType())
{
case QUEUE_FORMAT_TYPE_PUBLIC:
//
// GUID Queue that is not the same as admin queue.
//
ulSize += sizeof(GUID);
break;
case QUEUE_FORMAT_TYPE_PRIVATE:
if (pResponseQueue->PrivateID().Lineage == *pSourceQM)
{
//
// Private Queue in source QM
//
ulSize += sizeof(ULONG);
}
else if(
(pDestinationQueue->GetType() != QUEUE_FORMAT_TYPE_DIRECT) &&
(pResponseQueue->PrivateID().Lineage == *pDestinationQM))
{
//
// Private Queue in Destination QM
//
ulSize += sizeof(ULONG);
}
else if((pAdminQueue != 0) &&
(pAdminQueue->GetType() == QUEUE_FORMAT_TYPE_PRIVATE) &&
(pResponseQueue->PrivateID().Lineage == pAdminQueue->PrivateID().Lineage))
{
//
// Private Queue in Admin machine QM
//
ulSize += sizeof(ULONG);
}
else
{
//
// Private Queue in some other Machine
//
ulSize += sizeof(GUID) + sizeof(ULONG);
}
break;
case QUEUE_FORMAT_TYPE_DIRECT:
//
// Destination Queue is Direct
//
ulSize += ALIGNUP4(sizeof(USHORT) +
(wcslen(pResponseQueue->DirectID()) + 1) * sizeof(WCHAR));
break;
default:
//
// Unexpected type, assert with no Warning level 4.
//
ASSERT(pResponseQueue->GetType() == QUEUE_FORMAT_TYPE_DIRECT);
}
}
}
if (pgConnectorType)
{
ulSize += sizeof(GUID);
}
return ALIGNUP4(ulSize);
}
/*======================================================================
Function:
Description:
=======================================================================*/
inline PCHAR CUserHeader::GetNextSection(void) const
{
int size = 0;
size += QueueSize(m_bfDQT, &m_abQueues[0]);
size += QueueSize(m_bfAQT, &m_abQueues[size]);
size += QueueSize(m_bfRQT, &m_abQueues[size]);
size += (m_bfConnectorType ? sizeof(GUID) : 0);
size += sizeof(*this);
return (PCHAR)this + ALIGNUP4(size);
}
/*======================================================================
Function: CUserHeader::SetSrcQMGuid
Description: Set The source QM guid
=======================================================================*/
inline void CUserHeader::SetSourceQM(const GUID* pGUID)
{
m_gSourceQM = *pGUID;
}
/*======================================================================
Function: CUserHeader::GetSourceQM
Description: returns the source QM guid
=======================================================================*/
inline const GUID* CUserHeader::GetSourceQM(void) const
{
return &m_gSourceQM;
}
/*======================================================================
Function: CUserHeader::GetAddressSourceQM
Description: returns the source QM guid
=======================================================================*/
inline const TA_ADDRESS *CUserHeader::GetAddressSourceQM(void) const
{
return &m_taSourceQM;
}
/*======================================================================
Function: CUserHeader::SetAddressSourceQM
Description: Set The source QM address
=======================================================================*/
inline void CUserHeader::SetAddressSourceQM(const TA_ADDRESS *pa)
{
ULONG ul = sizeof(TA_ADDRESS) - 1 + pa->AddressLength;
memcpy((PVOID)&m_taSourceQM,
(PVOID)pa,
(ul < sizeof(GUID) ? ul : sizeof(GUID)));
}
/*======================================================================
Function: CUserHeader::SetDstQMGuid
Description:
=======================================================================*/
inline void CUserHeader::SetDestQM(const GUID* pGUID)
{
m_gDestQM = *pGUID;
}
/*======================================================================
Function: CUserHeader::GetDstQMGuid
Description:
=======================================================================*/
inline const GUID* CUserHeader::GetDestQM(void) const
{
return &m_gDestQM;
}
/*======================================================================
Function: CUserHeader::
Description:
=======================================================================*/
inline BOOL CUserHeader::GetDestinationQueue(QUEUE_FORMAT* pqf) const
{
return GetQueue(&m_abQueues[0], m_bfDQT, pqf);
}
/*======================================================================
Function: CUserHeader::
Description:
=======================================================================*/
inline BOOL CUserHeader::GetAdminQueue(QUEUE_FORMAT* pqf) const
{
//
// Prevent infinit recursion
//
ASSERT(m_bfAQT != qtAdminQ);
int qsize = QueueSize(m_bfDQT, m_abQueues);
return GetQueue(&m_abQueues[qsize], m_bfAQT, pqf);
}
/*======================================================================
Function: CUserHeader::
Description:
=======================================================================*/
inline BOOL CUserHeader::GetResponseQueue(QUEUE_FORMAT* pqf) const
{
int qsize = QueueSize(m_bfDQT, &m_abQueues[0]);
qsize += QueueSize(m_bfAQT, &m_abQueues[qsize]);
return GetQueue(&m_abQueues[qsize], m_bfRQT, pqf);
}
/*======================================================================
Function: CUserHeader::SetTimeToLiveDelta
Description: Set The Message Time-out to live field
=======================================================================*/
inline void CUserHeader::SetTimeToLiveDelta(ULONG ulTimeout)
{
m_ulTimeToLiveDelta = ulTimeout;
}
/*======================================================================
Function: CUserHeader::GetTimeToLiveDelta
Description: Returns the message Time-Out to Live
=======================================================================*/
inline ULONG CUserHeader::GetTimeToLiveDelta(void) const
{
return m_ulTimeToLiveDelta;
}
/*======================================================================
Function: CUserHeader::SetSentTime
Description: Set The Message Sent Time field
=======================================================================*/
inline void CUserHeader::SetSentTime(ULONG ulSentTime)
{
m_ulSentTime = ulSentTime;
}
/*======================================================================
Function: CUserHeader::GetSentTime
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -