Exemplo n.º 1
0
 internal MQMessageDescriptor(MQMessageDescriptor md)
 {
     this.mqmd = new MQBase.MQMD();
     base.TrConstructor("%Z% %W%  %I% %E% %U%", new object[] { md });
     MQBase.MQMD mqmd = md.mqmd;
     this.mqmd.StrucId             = (byte[])this.mqmd.StrucId.Clone();
     this.mqmd.Version             = mqmd.Version;
     this.mqmd.Report              = mqmd.Report;
     this.mqmd.MsgType             = mqmd.MsgType;
     this.mqmd.Expiry              = mqmd.Expiry;
     this.mqmd.Feedback            = mqmd.Feedback;
     this.mqmd.Encoding            = mqmd.Encoding;
     this.mqmd.CodedCharacterSetId = mqmd.CodedCharacterSetId;
     this.mqmd.Format              = (byte[])mqmd.Format.Clone();
     this.mqmd.Priority            = mqmd.Priority;
     this.mqmd.Persistence         = mqmd.Persistence;
     this.mqmd.MsgId             = (byte[])mqmd.MsgId.Clone();
     this.mqmd.CorrelId          = (byte[])mqmd.CorrelId.Clone();
     this.mqmd.BackoutCount      = mqmd.BackoutCount;
     this.mqmd.ReplyToQ          = (byte[])mqmd.ReplyToQ.Clone();
     this.mqmd.ReplyToQMgr       = (byte[])mqmd.ReplyToQMgr.Clone();
     this.mqmd.UserId            = (byte[])mqmd.UserId.Clone();
     this.mqmd.AccountingToken   = (byte[])mqmd.AccountingToken.Clone();
     this.mqmd.ApplIdentityData  = (byte[])mqmd.ApplIdentityData.Clone();
     this.mqmd.PutApplType       = mqmd.PutApplType;
     this.mqmd.PutApplName       = (byte[])mqmd.PutApplName.Clone();
     this.mqmd.PutDate           = (byte[])mqmd.PutDate.Clone();
     this.mqmd.PutTime           = (byte[])mqmd.PutTime.Clone();
     this.mqmd.ApplOriginData    = (byte[])mqmd.ApplOriginData.Clone();
     this.mqmd.GroupId           = (byte[])mqmd.GroupId.Clone();
     this.mqmd.MsgSequenceNumber = mqmd.MsgSequenceNumber;
     this.mqmd.Offset            = mqmd.Offset;
     this.mqmd.MsgFlags          = mqmd.MsgFlags;
     this.mqmd.OriginalLength    = mqmd.OriginalLength;
 }
Exemplo n.º 2
0
        internal int ReadStruct(byte[] b, int Offset)
        {
            uint method = 0x19f;

            this.TrEntry(method, new object[] { b, Offset });
            IntPtr zero   = IntPtr.Zero;
            int    length = this.GetLength();
            int    result = 0;

            try
            {
                zero = Marshal.AllocCoTaskMem(length);
                if (length > (b.Length - Offset))
                {
                    length = b.Length - Offset;
                }
                Marshal.Copy(b, Offset, zero, length);
                this.mqmd = (MQBase.MQMD)Marshal.PtrToStructure(zero, typeof(MQBase.MQMD));
                this.ClearInvalidFields(this.mqmd.Version);
                Marshal.FreeCoTaskMem(zero);
                result = Offset + this.GetVersionLength();
            }
            finally
            {
                base.TrExit(method, result);
            }
            return(result);
        }
Exemplo n.º 3
0
        internal void CopyMQMD(MQBase.MQMD sourceMqmd, ref MQBase.MQMD targetMqmd)
        {
            uint method = 0x7b;

            this.TrEntry(method, new object[] { sourceMqmd, (MQBase.MQMD)targetMqmd });
            try
            {
                targetMqmd.StrucId             = (byte[])sourceMqmd.StrucId.Clone();
                targetMqmd.Version             = sourceMqmd.Version;
                targetMqmd.Report              = sourceMqmd.Report;
                targetMqmd.MsgType             = sourceMqmd.MsgType;
                targetMqmd.Expiry              = sourceMqmd.Expiry;
                targetMqmd.Feedback            = sourceMqmd.Feedback;
                targetMqmd.Encoding            = sourceMqmd.Encoding;
                targetMqmd.CodedCharacterSetId = sourceMqmd.CodedCharacterSetId;
                targetMqmd.Format              = (byte[])sourceMqmd.Format.Clone();
                targetMqmd.Priority            = sourceMqmd.Priority;
                targetMqmd.Persistence         = sourceMqmd.Persistence;
                targetMqmd.MsgId             = (byte[])sourceMqmd.MsgId.Clone();
                targetMqmd.CorrelId          = (byte[])sourceMqmd.CorrelId.Clone();
                targetMqmd.BackoutCount      = sourceMqmd.BackoutCount;
                targetMqmd.ReplyToQ          = (byte[])sourceMqmd.ReplyToQ.Clone();
                targetMqmd.ReplyToQMgr       = (byte[])sourceMqmd.ReplyToQMgr.Clone();
                targetMqmd.UserId            = (byte[])sourceMqmd.UserId.Clone();
                targetMqmd.AccountingToken   = (byte[])sourceMqmd.AccountingToken.Clone();
                targetMqmd.ApplIdentityData  = (byte[])sourceMqmd.ApplIdentityData.Clone();
                targetMqmd.PutApplType       = sourceMqmd.PutApplType;
                targetMqmd.PutApplName       = (byte[])sourceMqmd.PutApplName.Clone();
                targetMqmd.PutDate           = (byte[])sourceMqmd.PutDate.Clone();
                targetMqmd.PutTime           = (byte[])sourceMqmd.PutTime.Clone();
                targetMqmd.ApplOriginData    = (byte[])sourceMqmd.ApplOriginData.Clone();
                targetMqmd.GroupId           = (byte[])sourceMqmd.GroupId.Clone();
                targetMqmd.MsgSequenceNumber = sourceMqmd.MsgSequenceNumber;
                targetMqmd.Offset            = sourceMqmd.Offset;
                targetMqmd.MsgFlags          = sourceMqmd.MsgFlags;
                targetMqmd.OriginalLength    = sourceMqmd.OriginalLength;
            }
            finally
            {
                base.TrExit(method);
            }
        }
Exemplo n.º 4
0
        public void Get(MQMessage message, MQGetMessageOptions gmo, int maxMsgSize)
        {
            uint method = 0x7a;

            this.TrEntry(method, new object[] { message, gmo, maxMsgSize });
            int dataLength = 0;

            byte[] buffer   = null;
            int    options  = -1;
            bool   flag     = true;
            int    compCode = 0;
            int    reason   = 0;

            try
            {
                if (message == null)
                {
                    base.throwNewMQException(2, 0x7ea);
                }
                if (gmo == null)
                {
                    base.throwNewMQException(2, 0x88a);
                }
                if (maxMsgSize < 0)
                {
                    base.throwNewMQException(2, 0x7d5);
                }
                options = gmo.Options;
                if ((gmo.Options & 0x1006) == 0)
                {
                    base.TrText(method, "Setting explicit NO_SYNCPOINT");
                    gmo.Options |= 4;
                }
                if (base.qMgr.CommandLevel >= 700)
                {
                    flag = (options & 0x1e000000) == 0;
                    if (((options & 0x8000000) != 0) || flag)
                    {
                        gmo.Options &= -134217729;
                        gmo.Options |= 0x2000000;
                    }
                }
                if ((Transaction.Current != null) && !base.qMgr.IsXAEnabled)
                {
                    base.qMgr.IsXAEnabled = true;
                }
                int characterSet = message.CharacterSet;
                if (!base.qMgr.IsHconnValid)
                {
                    base.throwNewMQException(2, 0x7e2);
                }
                message.ClearMessage();
                if (maxMsgSize == 0)
                {
                    int         num7       = gmo.Options;
                    MQBase.MQMD targetMqmd = new MQBase.MQMD();
                    this.CopyMQMD(message.md.StructMQMD, ref targetMqmd);
                    maxMsgSize   = defaultMaxMsgSize;
                    buffer       = new byte[maxMsgSize];
                    gmo.Options &= -65;
                    if ((num7 & 0x4000) == 0x4000)
                    {
                        MQLPIGetOpts lpiGetOpts = new MQLPIGetOpts();
                        lpiGetOpts.SetOptions(lpiGetOpts.GetOptions() | MQLPIGetOpts.lpiGETOPT_FULL_MESSAGE);
                        ((NmqiSP)base.qMgr.nmqiConnector).zstMQGET(base.qMgr.hConn, base.objectHandle.HOBJ, ref message.md, ref gmo, maxMsgSize, buffer, out dataLength, lpiGetOpts, out compCode, out reason);
                    }
                    else
                    {
                        base.qMgr.nmqiConnector.MQGET(base.qMgr.hConn, base.hObj, message.md, gmo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                    }
                    if (0x7da == reason)
                    {
                        maxMsgSize = dataLength;
                        buffer     = new byte[maxMsgSize];
                        base.qMgr.nmqiConnector.MQGET(base.qMgr.hConn, base.hObj, message.md, gmo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                    }
                    while ((compCode != 0) && (0x820 == reason))
                    {
                        gmo.Options = num7;
                        MQBase.MQMD structMQMD = message.md.StructMQMD;
                        this.CopyMQMD(targetMqmd, ref structMQMD);
                        message.md.StructMQMD = structMQMD;
                        maxMsgSize            = dataLength;
                        buffer       = new byte[maxMsgSize];
                        gmo.Options &= -65;
                        base.qMgr.nmqiConnector.MQGET(base.qMgr.hConn, base.hObj, message.md, gmo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                    }
                    if ((0x848 == reason) || (0x88e == reason))
                    {
                        string objectId       = "Server Binding convert message";
                        byte[] outString      = null;
                        int    outLength      = 0;
                        uint   bytesConverted = 0;
                        if (CommonServices.ConvertString(objectId, message.md.StructMQMD.CodedCharacterSetId, characterSet, buffer, dataLength, out outString, ref outLength, 0, out bytesConverted) == 0)
                        {
                            buffer     = outString;
                            maxMsgSize = outLength;
                            dataLength = outLength;
                            compCode   = 0;
                            reason     = 0;
                        }
                    }
                }
                else
                {
                    buffer = new byte[maxMsgSize];
                    base.qMgr.nmqiConnector.MQGET(base.qMgr.hConn, base.hObj, message.md, gmo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                }
                byte[] b = buffer;
                if (compCode == 0)
                {
                    bool flag2 = false;
                    if (base.qMgr.CommandLevel >= 700)
                    {
                        if (flag)
                        {
                            if (this.propControl != 3)
                            {
                                flag2 = true;
                            }
                        }
                        else if ((options & 0x8000000) != 0)
                        {
                            flag2 = true;
                        }
                        if (flag2 && (dataLength > 0x24))
                        {
                            b          = this.PerformMsgProcessingAfterGet(ref message, buffer, (dataLength > buffer.Length) ? buffer.Length : dataLength);
                            dataLength = b.Length;
                        }
                    }
                }
                message.totalMessageLength = dataLength;
                if (dataLength > 0)
                {
                    message.Write(b, 0, (dataLength < maxMsgSize) ? dataLength : maxMsgSize);
                    message.Seek(0);
                }
                if (compCode != 0)
                {
                    base.qMgr.CheckHConnHealth(reason);
                    base.throwNewMQException(compCode, reason);
                }
            }
            catch (MQException exception)
            {
                compCode = exception.CompCode;
                reason   = exception.Reason;
                throw exception;
            }
            catch (Exception exception2)
            {
                base.TrException(method, exception2);
                compCode = 2;
                reason   = 0x893;
                throw exception2;
            }
            finally
            {
                base.unsafe_compCode = compCode;
                base.unsafe_reason   = reason;
                gmo.Options          = options;
                base.TrExit(method);
            }
        }
Exemplo n.º 5
0
 public static extern void zstMQGET(int hConn, int hObj, ref MQBase.MQMD md, ref MQBase.MQGMO gmo, int bufferLength, byte[] buffer, out int dataLength, ref MQBase.lpiGETOPT lpiGetOpts, out int compCode, out int reason);
Exemplo n.º 6
0
 public static extern void MQPUT1(int hConn, IntPtr mqodPtr, ref MQBase.MQMD mqmd, ref MQBase.MQPMO mqpmo, int length, [In] byte[] buffer, out int compCode, out int reason);
Exemplo n.º 7
0
 public static extern void MQGET(int hConn, int hObj, ref MQBase.MQMD mqmd, ref MQBase.MQGMO mqgmo, int bufferLength, [Out] byte[] buffer, out int dataLength, out int compCode, out int reason);
Exemplo n.º 8
0
 public MQMessageDescriptor()
 {
     this.mqmd = new MQBase.MQMD();
     base.TrConstructor("%Z% %W%  %I% %E% %U%");
     this.ClearInvalidFields(0);
 }
Exemplo n.º 9
0
 public static extern void lpiSPIPut(int hConn, int hObj, ref MQBase.MQMD mqmd, ref MQBase.MQPMO mqpmo, int bufferLength, [In] byte[] buffer, ref LPIPUTOPTS PutOptsIn, out int compCode, out int reason);
Exemplo n.º 10
0
 public static extern void lpiSPIGet(int hConn, int hObj, ref MQBase.MQMD mqmd, ref MQBase.MQGMO mqgmo, int bufferLength, [Out] byte[] buffer, out int dataLength, ref LPIGETOPT GetData, out int compCode, out int reason);
Exemplo n.º 11
0
 public static extern void nmqiMultiBufMQPut1(int hConn, ref MQBase.MQOD mqod, ref MQBase.MQMD mqmd, ref MQBase.MQPMO mqpmo, int numBuffers, [In] byte[] buffer1, int length1, [In] byte[] buffer2, int length2, [In] byte[] buffer3, int length3, [In] byte[] buffer4, int length4, [In] byte[] buffer5, int length5, [In] byte[] buffer6, int length6, out int compCode, out int reason);
Exemplo n.º 12
0
        public void Get(MQMessage message, MQGetMessageOptions gmo, int maxMsgSize, int spigmo)
        {
            uint method = 550;

            this.TrEntry(method, new object[] { message, gmo, maxMsgSize, spigmo });
            int  num2       = 0;
            bool flag       = false;
            int  dataLength = 0;

            byte[] buffer   = null;
            int    compCode = 0;
            int    reason   = 0;

            try
            {
                NmqiSP nmqiConnector = (NmqiSP)base.qMgr.nmqiConnector;
                if (message == null)
                {
                    base.throwNewMQException(2, 0x7ea);
                }
                if (gmo == null)
                {
                    base.throwNewMQException(2, 0x88a);
                }
                if (maxMsgSize < 0)
                {
                    base.throwNewMQException(2, 0x7d5);
                }
                MQSPIGetOpts spigo        = new MQSPIGetOpts(spigmo);
                int          options      = gmo.Options;
                int          characterSet = message.CharacterSet;
                int          num7         = gmo.Options;
                if ((num7 & 0x8000000) != 0)
                {
                    gmo.Options &= -134217729;
                    gmo.Options |= 0x2000000;
                }
                else if ((((num7 & 0x10000000) == 0) && ((num7 & 0x2000000) == 0)) && ((num7 & 0x4000000) == 0))
                {
                    gmo.Options |= 0x2000000;
                }
                message.ClearMessage();
                num2 = gmo.Options;
                flag = true;
                if ((gmo.Options & 0x1006) == 0)
                {
                    gmo.Options |= 4;
                }
                if (maxMsgSize == 0)
                {
                    int         num8       = gmo.Options;
                    MQBase.MQMD targetMqmd = new MQBase.MQMD();
                    base.CopyMQMD(message.md.StructMQMD, ref targetMqmd);
                    maxMsgSize   = MQDestination.defaultMaxMsgSize;
                    buffer       = new byte[maxMsgSize];
                    gmo.Options &= -65;
                    nmqiConnector.SPIGet(base.qMgr.hConn, base.objectHandle.HOBJ, ref message.md, ref gmo, ref spigo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                    while ((1 == compCode) && (0x820 == reason))
                    {
                        gmo.Options = num8;
                        MQBase.MQMD structMQMD = message.md.StructMQMD;
                        base.CopyMQMD(targetMqmd, ref structMQMD);
                        message.md.StructMQMD = structMQMD;
                        maxMsgSize            = dataLength;
                        buffer       = new byte[maxMsgSize];
                        gmo.Options &= -65;
                        nmqiConnector.SPIGet(base.qMgr.hConn, base.objectHandle.HOBJ, ref message.md, ref gmo, ref spigo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                    }
                    gmo.Options = num8;
                }
                else
                {
                    buffer = new byte[maxMsgSize];
                    nmqiConnector.SPIGet(base.qMgr.hConn, base.objectHandle.HOBJ, ref message.md, ref gmo, ref spigo, maxMsgSize, buffer, out dataLength, out compCode, out reason);
                }
                if (compCode != 2)
                {
                    this.spiQueueEmpty   = spigo.QueueEmpty != 0;
                    message.spiInherited = spigo.Inherited != 0;
                    message.spiQTime     = spigo.QTime;
                }
                else
                {
                    this.spiQueueEmpty   = false;
                    message.spiInherited = false;
                    message.spiQTime     = 0L;
                }
                byte[] b = null;
                if (compCode != 2)
                {
                    if ((options & 0x2000000) == 0)
                    {
                        b = base.PerformMsgProcessingAfterGet(ref message, buffer, (dataLength > buffer.Length) ? buffer.Length : dataLength);
                    }
                    else
                    {
                        b = buffer;
                    }
                    dataLength = b.Length;
                }
                gmo.Options = options;
                message.totalMessageLength = dataLength;
                if (dataLength > 0)
                {
                    message.Write(b, 0, (dataLength < maxMsgSize) ? dataLength : maxMsgSize);
                    message.Seek(0);
                }
                if (compCode != 0)
                {
                    base.qMgr.CheckHConnHealth(reason);
                    base.throwNewMQException(compCode, reason);
                }
            }
            catch (MQException exception)
            {
                compCode = exception.CompCode;
                reason   = exception.Reason;
                throw exception;
            }
            finally
            {
                if (flag)
                {
                    gmo.Options = num2;
                }
                base.unsafe_compCode = compCode;
                base.unsafe_reason   = reason;
                base.TrExit(method);
            }
        }