⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transporterinternaldefinitions.hpp

📁 mysql-5.0.22.tar.gz源码包
💻 HPP
字号:
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef TransporterInternalDefinitions_H#define TransporterInternalDefinitions_H#if defined DEBUG_TRANSPORTER || defined VM_TRACE#include <NdbOut.hpp>#endif#define NDB_TCP_TRANSPORTER#ifdef HAVE_NDB_SHM#define NDB_SHM_TRANSPORTER#endif#ifdef HAVE_NDB_SCI#define NDB_SCI_TRANSPORTER#endif#ifdef HAVE_NDB_OSE#define NDB_OSE_TRANSPORTER#endif#ifdef DEBUG_TRANSPORTER#define DEBUG(x) ndbout << x << endl#else#define DEBUG(x)#endif#if defined VM_TRACE || defined DEBUG_TRANSPORTER#define WARNING(X) ndbout << X << endl;#else#define WARNING(X)#endif// Calculate a checksuminlineUint32computeChecksum(const Uint32 * const startOfData, int nWords) {  Uint32 chksum = startOfData[0];  for (int i=1; i < nWords; i++)    chksum ^= startOfData[i];  return chksum;}struct Protocol6 {  Uint32 word1;  Uint32 word2;  Uint32 word3;  /** * * b = Byte order           -  4 Bits (Note 1 significant bit) * g = GSN                  - 16 Bits * p = Prio                 -  2 Bits * c = Checksum included    -  1 Bit * z = Compression          -  1 Bit * v = Version id           -  4 Bits * i = Signal id included   -  1 Bit * m = Message length       - 16 Bits (0-65536) (In word -> 0-256k bytes) * d = Signal data length   -  5 Bits (0-31) * t = trace                -  6 Bits (0-63) * r = Recievers block no   - 16 Bits * s = Senders block no     - 16 Bits * u = Unused               -  7 Bits * f = FragmentInfo1        -  1 Bit * h = FragmentInfo2        -  1 bit * n = No of segments       -  2 Bits * Word 1 * * *           1111111111222222222233 * 01234567890123456789012345678901 * bfizcppbmmmmmmmmmmmmmmmmbhdddddb ** * Word 2 * *           1111111111222222222233 * 01234567890123456789012345678901 * ggggggggggggggggvvvvttttttnn    ** * Word 3 * *           1111111111222222222233 * 01234567890123456789012345678901 * rrrrrrrrrrrrrrrrssssssssssssssss ** * Word 4 (Optional Signal Id) */    /**   * 0 = Big endian (Sparc), 1 = Little endian (Intel)   */  static Uint32 getByteOrder       (const Uint32 & word1);  static Uint32 getCompressed      (const Uint32 & word1);  static Uint32 getSignalIdIncluded(const Uint32 & word1);  static Uint32 getCheckSumIncluded(const Uint32 & word1);  static Uint32 getPrio            (const Uint32 & word1);  static Uint32 getMessageLength   (const Uint32 & word1);  static void setByteOrder       (Uint32 & word1, Uint32 byteOrder);  static void setCompressed      (Uint32 & word1, Uint32 compressed);  static void setSignalIdIncluded(Uint32 & word1, Uint32 signalId);  static void setCheckSumIncluded(Uint32 & word1, Uint32 checkSum);  static void setPrio            (Uint32 & word1, Uint32 prio);  static void setMessageLength   (Uint32 & word1, Uint32 messageLen);    static void createSignalHeader(SignalHeader * const dst,				 const Uint32 & word1, 				 const Uint32 & word2, 				 const Uint32 & word3);    static void createProtocol6Header(Uint32 & word1, 				    Uint32 & word2, 				    Uint32 & word3,				    const SignalHeader * const src);};  #define WORD1_BYTEORDER_MASK   (0x81000081)#define WORD1_SIGNALID_MASK    (0x00000004)#define WORD1_COMPRESSED_MASK  (0x00000008)#define WORD1_CHECKSUM_MASK    (0x00000010)#define WORD1_PRIO_MASK        (0x00000060)#define WORD1_MESSAGELEN_MASK  (0x00FFFF00)#define WORD1_SIGNAL_LEN_MASK  (0x7C000000)#define WORD1_FRAG_INF_MASK    (0x00000002)#define WORD1_FRAG_INF2_MASK   (0x02000000)#define WORD1_FRAG_INF_SHIFT   (1)#define WORD1_SIGNALID_SHIFT   (2)#define WORD1_COMPRESSED_SHIFT (3)#define WORD1_CHECKSUM_SHIFT   (4)#define WORD1_PRIO_SHIFT       (5)#define WORD1_MESSAGELEN_SHIFT (8)#define WORD1_FRAG_INF2_SHIFT  (25)#define WORD1_SIGNAL_LEN_SHIFT (26)#define WORD2_VERID_GSN_MASK   (0x000FFFFF)#define WORD2_TRACE_MASK       (0x03f00000)#define WORD2_SEC_COUNT_MASK   (0x0c000000)#define WORD2_TRACE_SHIFT      (20)#define WORD2_SEC_COUNT_SHIFT  (26)#define WORD3_SENDER_MASK      (0x0000FFFF)#define WORD3_RECEIVER_MASK    (0xFFFF0000)#define WORD3_RECEIVER_SHIFT   (16)inlineUint32Protocol6::getByteOrder(const Uint32 & word1){  return word1 & 1;}inlineUint32Protocol6::getCompressed(const Uint32 & word1){  return (word1 & WORD1_COMPRESSED_MASK) >> WORD1_COMPRESSED_SHIFT;}inlineUint32Protocol6::getSignalIdIncluded(const Uint32 & word1){  return (word1 & WORD1_SIGNALID_MASK) >> WORD1_SIGNALID_SHIFT;}inlineUint32Protocol6::getCheckSumIncluded(const Uint32 & word1){  return (word1 & WORD1_CHECKSUM_MASK) >> WORD1_CHECKSUM_SHIFT;}inlineUint32Protocol6::getMessageLength(const Uint32 & word1){  return (word1 & WORD1_MESSAGELEN_MASK) >> WORD1_MESSAGELEN_SHIFT;}inlineUint32Protocol6::getPrio(const Uint32 & word1){  return (word1 & WORD1_PRIO_MASK) >> WORD1_PRIO_SHIFT;}inlinevoidProtocol6::setByteOrder(Uint32 & word1, Uint32 byteOrder){  Uint32 tmp = byteOrder;  tmp |= (tmp << 7);  tmp |= (tmp << 24);  word1 |= (tmp & WORD1_BYTEORDER_MASK);}inlinevoidProtocol6::setCompressed(Uint32 & word1, Uint32 compressed){  word1 |= ((compressed << WORD1_COMPRESSED_SHIFT) & WORD1_COMPRESSED_MASK);}inlinevoidProtocol6::setSignalIdIncluded(Uint32 & word1, Uint32 signalId){  word1 |= ((signalId << WORD1_SIGNALID_SHIFT) & WORD1_SIGNALID_MASK);}inlinevoidProtocol6::setCheckSumIncluded(Uint32 & word1, Uint32 checkSum){  word1 |= ((checkSum << WORD1_CHECKSUM_SHIFT) & WORD1_CHECKSUM_MASK);}inlinevoidProtocol6::setMessageLength(Uint32 & word1, Uint32 messageLen){  word1 |= ((messageLen << WORD1_MESSAGELEN_SHIFT) & WORD1_MESSAGELEN_MASK);}inlinevoidProtocol6::setPrio(Uint32 & word1, Uint32 prio){  word1 |= ((prio << WORD1_PRIO_SHIFT) & WORD1_PRIO_MASK);}inlinevoidProtocol6::createSignalHeader(SignalHeader * const dst,			      const Uint32 & word1, 			      const Uint32 & word2, 			      const Uint32 & word3){    Uint32 signal_len = (word1 & WORD1_SIGNAL_LEN_MASK)>> WORD1_SIGNAL_LEN_SHIFT;  Uint32 fragInfo1  = (word1 & WORD1_FRAG_INF_MASK) >> (WORD1_FRAG_INF_SHIFT-1);  Uint32 fragInfo2  = (word1 & WORD1_FRAG_INF2_MASK) >> (WORD1_FRAG_INF2_SHIFT);  Uint32 trace      = (word2 & WORD2_TRACE_MASK) >> WORD2_TRACE_SHIFT;  Uint32 verid_gsn  = (word2 & WORD2_VERID_GSN_MASK);  Uint32 secCount   = (word2 & WORD2_SEC_COUNT_MASK) >> WORD2_SEC_COUNT_SHIFT;    dst->theTrace              = trace;  dst->m_noOfSections        = secCount;  dst->m_fragmentInfo        = fragInfo1 | fragInfo2;    dst->theLength             = signal_len;  dst->theVerId_signalNumber = verid_gsn;    Uint32 sBlockNum  = (word3 & WORD3_SENDER_MASK);  Uint32 rBlockNum  = (word3 & WORD3_RECEIVER_MASK) >> WORD3_RECEIVER_SHIFT;    dst->theSendersBlockRef      = sBlockNum;  dst->theReceiversBlockNumber = rBlockNum;}inlinevoidProtocol6::createProtocol6Header(Uint32 & word1, 				 Uint32 & word2, 				 Uint32 & word3,				 const SignalHeader * const src){  const Uint32 signal_len = src->theLength;  const Uint32 fragInfo   = src->m_fragmentInfo;  const Uint32 fragInfo1 = (fragInfo & 2);  const Uint32 fragInfo2 = (fragInfo & 1);    const Uint32 trace      = src->theTrace;  const Uint32 verid_gsn  = src->theVerId_signalNumber;  const Uint32 secCount   = src->m_noOfSections;    word1 |= ((signal_len << WORD1_SIGNAL_LEN_SHIFT) & WORD1_SIGNAL_LEN_MASK);  word1 |= ((fragInfo1 << (WORD1_FRAG_INF_SHIFT-1)) & WORD1_FRAG_INF_MASK);  word1 |= ((fragInfo2 << WORD1_FRAG_INF2_SHIFT) & WORD1_FRAG_INF2_MASK);  word2 |= ((trace << WORD2_TRACE_SHIFT) & WORD2_TRACE_MASK);  word2 |= (verid_gsn & WORD2_VERID_GSN_MASK);  word2 |= ((secCount << WORD2_SEC_COUNT_SHIFT) & WORD2_SEC_COUNT_MASK);    Uint32 sBlockNum  = src->theSendersBlockRef ;  Uint32 rBlockNum  = src->theReceiversBlockNumber ;    word3 |= (sBlockNum & WORD3_SENDER_MASK);  word3 |= ((rBlockNum << WORD3_RECEIVER_SHIFT) & WORD3_RECEIVER_MASK);}// Define of TransporterInternalDefinitions_H#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -