/// <summary> /// /// </summary> /// <param name="isoField"></param> /// <param name="packedBytes"></param> /// <param name="index"></param> public override void UnPack(ISOComponent isoField, byte[] packedBytes, ref int index) { // reserve enough bytes to store the length !! ASUMES FOR NOW THAT IS ALWAYS BINARY !! switch (m_isoFieldDefinition.lengthCoding) { case ISOFieldCoding.BIN: index += m_isoFieldDefinition.lengthLength / 2; // 2 HEXADECIMAL DIGITS represent 1 byte break; case ISOFieldCoding.ASCII: case ISOFieldCoding.EBCDIC: index += m_isoFieldDefinition.lengthLength; // 1 ASCII Character is 1 byte break; case ISOFieldCoding.BCD: break; default: break; } ISOComponent[] isoFields = ((ISOFieldBitmapSubFields)(isoField)).GetFields(); isoFields[0] = new ISOFieldBitmap(Logger, m_fieldPackagerList[0], m_fieldPackagerList[0].GetFieldNumber()); m_fieldPackagerList[0].UnPack(isoFields[0], packedBytes, ref index); var bitmap = isoFields[0] as ISOFieldBitmap; int[] setFields = bitmap.GetSetFields(); for (int k = 0; k < setFields.Length; k++) { int fieldNumber = setFields[k]; if (fieldNumber != 0) { isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index); } } //int totFields = bitmap.GetLengthInBits(); //for (int fieldNumber = 1; fieldNumber <= totFields; fieldNumber++) //{ // if (bitmap.BitIsSet(fieldNumber)) // { // isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); // m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index); // } //} }
/// <summary> /// /// </summary> /// <param name="logger"></param> /// <param name="totalFields"></param> public ISOMsgTypePackager(ILogger logger, int totalFields) { _logger = logger; m_totalFields = totalFields; m_manBitmap = new ISOFieldBitmap(Logger); m_conBitmap = new ISOFieldBitmap(Logger); m_optBitmap = new ISOFieldBitmap(Logger); }
/// <summary> /// /// </summary> /// <param name="bitMapField"></param> /// <param name="msgType"></param> /// <returns></returns> public bool ValidateBitmap(ISOFieldBitmap bitMapField, string msgType) { if (m_msgTypes.ContainsKey(msgType)) { return(m_msgTypes[msgType].ValidateBitmap(bitMapField)); } else { if (Logger.IsEnabled(LogLevel.Critical)) { Logger.LogCritical("Message Type [" + msgType + "] not supported by packager!"); } return(false); } }
public void BitmapIsSameAsField_1() { ISOFieldBitmap bitmapOnly = new ISOFieldBitmap(new Microsoft.Extensions.Logging.Abstractions.NullLogger <BitmapTests>()); bitmapOnly.SetBit(0); bitmapOnly.SetBit(2); bitmapOnly.SetBit(3); bitmapOnly.SetBit(4); bitmapOnly.SetBit(7); bitmapOnly.SetBit(11); bitmapOnly.SetBit(12); bitmapOnly.SetBit(14); bitmapOnly.SetBit(18); bitmapOnly.SetBit(19); bitmapOnly.SetBit(22); bitmapOnly.SetBit(25); bitmapOnly.SetBit(37); var mPackager = new ISOMessagePackager(logger); // initialize from default visa packager that is embeded as a resource in the library var m = new ISOMessage(logger, mPackager); m.Set(0, "0100"); m.Set(2, "40004000400040001"); m.Set(3, "000000"); m.Set(4, "000000002900"); m.Set(7, "1231231233"); m.Set(11, "123123"); m.Set(12, "193012"); m.Set(14, "1219"); m.Set(18, "5999"); m.Set(19, "196"); m.Set(22, "9010"); m.Set(25, "23"); m.Set(37, "123123123123"); var bitmap = m.GetField(1) as ISO8583Net.Field.ISOFieldBitmap; var bmOnlybytes = bitmapOnly.GetByteArray(); var bmBytes = bitmap.GetByteArray(); for (int i = 0; i < bmOnlybytes.Length; i++) { Assert.Equal(bmBytes[i], bmOnlybytes[i]); } }
public void GetSetFieldsWorks() { ISOFieldBitmap bitmap = new ISOFieldBitmap(new Microsoft.Extensions.Logging.Abstractions.NullLogger <BitmapTests>()); bitmap.SetBit(0); bitmap.SetBit(2); bitmap.SetBit(3); bitmap.SetBit(4); bitmap.SetBit(7); bitmap.SetBit(11); bitmap.SetBit(12); bitmap.SetBit(14); bitmap.SetBit(18); bitmap.SetBit(19); bitmap.SetBit(22); bitmap.SetBit(25); bitmap.SetBit(37); //Collect status of all fields using BitIsSet bool[] fieldsOld = new bool[196]; int length = bitmap.GetByteArray().Length * 8; for (int i = 0; i < length; i++) { if (i != 1 && i != 65) { fieldsOld[i] = bitmap.BitIsSet(i); } } //Collect status of all fields using GetSetFields bool[] fields = new bool[196]; var setFields = bitmap.GetSetFields(); for (int i = 0; i < setFields.Length; i++) { fields[setFields[i]] = true; } //Check if same for (int i = 1; i < 196; i++) { Assert.Equal(fieldsOld[i], fields[i]); } }
public void BitmapEnumeratorWorks() { ISOFieldBitmap bitmap = new ISOFieldBitmap(new Microsoft.Extensions.Logging.Abstractions.NullLogger <BitmapTests>()); bitmap.SetBit(0); bitmap.SetBit(1); bitmap.SetBit(2); bitmap.SetBit(8); bitmap.SetBit(12); bitmap.SetBit(34); bitmap.SetBit(62); int i = 0; foreach (var item in bitmap.GetByteArray().GetBitEnumerator()) { if (i != 1 && i != 65) { Assert.Equal(bitmap.BitIsSet(i), item); } i++; } }
public void BitIsSetWorks() { ISOFieldBitmap bitmap = new ISOFieldBitmap(new Microsoft.Extensions.Logging.Abstractions.NullLogger <BitmapTests>()); bitmap.SetBit(0); bitmap.SetBit(1); bitmap.SetBit(2); bitmap.SetBit(8); bitmap.SetBit(12); bitmap.SetBit(34); bitmap.SetBit(62); for (int i = 0; i < 128; i++) { if (i == 0 || i == 1 || i == 2 || i == 8 || i == 12 || i == 34 || i == 62) { Assert.True(bitmap.BitIsSet(i)); } else { Assert.False(bitmap.BitIsSet(i)); } } }
public void BitmapFieldEnumeratorWorks() { ISOFieldBitmap bitmap = new ISOFieldBitmap(new Microsoft.Extensions.Logging.Abstractions.NullLogger <BitmapTests>()); bitmap.SetBit(0); bitmap.SetBit(1); bitmap.SetBit(2); bitmap.SetBit(8); bitmap.SetBit(12); bitmap.SetBit(34); bitmap.SetBit(62); var setFields = bitmap.GetByteArray().GetFieldIdEnumerator().ToList(); int length = bitmap.GetByteArray().Length; for (int i = 0; i < length; i++) { if (i != 1 && i != 65) { bool fieldExists = setFields.Exists(field => field == i); Assert.Equal(bitmap.BitIsSet(i), fieldExists); } } }
/// <summary> /// /// </summary> /// <param name="isoField"></param> /// <param name="packedBytes"></param> /// <param name="index"></param> public override void UnPack(ISOComponent isoField, byte[] packedBytes, ref int index) { bool allMandatoryExist = true; ISOComponent[] isoFields = ((ISOMessageFields)(isoField)).GetFields(); // Unpack the message type from the byteArray for transmission isoFields[0] = new ISOField(Logger, m_fieldPackagerList[0], m_fieldPackagerList[0].GetFieldNumber()); m_fieldPackagerList[0].UnPack(isoFields[0], packedBytes, ref index); string msgType = isoFields[0].value; // Unpack the Bitmap from the byteArray for transmission isoFields[1] = new ISOFieldBitmap(Logger, m_fieldPackagerList[1], m_fieldPackagerList[1].GetFieldNumber()); m_fieldPackagerList[1].UnPack(isoFields[1], packedBytes, ref index); var bitmap = isoFields[1] as ISOFieldBitmap; int[] setFields = bitmap.GetSetFields(); for (int k = 0; k < setFields.Length; k++) { // special bit fields indicating existance of third and fourth bitmap should not try to pack them int fieldNumber = setFields[k]; if (fieldNumber >= 2 && fieldNumber != 65 && fieldNumber != 129) { if (m_fieldPackagerList[fieldNumber].IsComposite()) { isoFields[fieldNumber] = new ISOFieldBitmapSubFields(Logger, (ISOFieldBitmapSubFieldsPackager)m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); } else { isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); } m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index); } } //int totFields = bitmap.GetLengthInBits(); //for (int fieldNumber = 2; fieldNumber <= totFields; fieldNumber++) //{ // // special bit fields indicating existance of third and fourth bitmap should not try to pack them // if (fieldNumber != 65 && fieldNumber != 129) // { // // check if current field number is present on message bitmap // if (bitmap.BitIsSet(fieldNumber)) // { // if (m_fieldPackagerList[fieldNumber].IsComposite()) // { // //if (m_fieldPackagerList[fieldNumber].GetStorageClass() == "ISO8583Net.ISOMessageSubFields") // //{ // isoFields[fieldNumber] = new ISOFieldBitmapSubFields(Logger, (ISOFieldBitmapSubFieldsPackager)m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); // //} // } // else // { // isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber()); // } // m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index); // } // } //} }
/// <summary> /// /// </summary> /// <param name="isoMsgBitmap"></param> /// <returns></returns> public bool ValidateBitmap(ISOFieldBitmap isoMsgBitmap) { // copmare iso message bitmap with packagerSupportedFields bitmap and log the findings return(false); }