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; }
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); }
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); } }
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); } }
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);
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);
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);
public MQMessageDescriptor() { this.mqmd = new MQBase.MQMD(); base.TrConstructor("%Z% %W% %I% %E% %U%"); this.ClearInvalidFields(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);
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);
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);
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); } }