Example #1
0
        /// <summary>
        /// Expands the byte array into a CommonPacket
        /// </summary>
        /// <param name="DataArray">Array with the Common Packet</param>
        /// <param name="Offset">Place in the array the Common Packet begins</param>
        /// <param name="NewOffset">Place where the Common Packet ends</param>
        public void Expand(byte[] DataArray, int Offset, out int NewOffset)
        {
            //First get the count...
            ushort count = BitConverter.ToUInt16(DataArray, Offset);

            Offset += 2;

            if (count < 2)
            {
                throw new ArgumentOutOfRangeException("Invalid number of items, must be at least 2, value was " + count.ToString());
            }

            AddressItem = new CommonPacketItem();
            AddressItem.Expand(DataArray, Offset, out Offset);
            //Offset += 2;
            DataItem = new CommonPacketItem();
            DataItem.Expand(DataArray, Offset, out Offset);

            if (count > 2)
            {
                for (int i = 2; i < count; i++)
                {
                    Offset += 1;
                    CommonPacketItem cpi = new CommonPacketItem();
                    cpi.Expand(DataArray, Offset, out Offset);
                }
            }

            NewOffset = Offset;
        }
Example #2
0
        /// <summary>
        /// Returns an Unconnected Data Item
        /// </summary>
        /// <param name="RequestPath">Request Path</param>
        /// <param name="Message">Message to encapsulate</param>
        /// <returns>Unconnected Data Item for the Common Packet Format</returns>
        public static CommonPacketItem GetUnconnectedDataItem(byte[] Message)
        {
            CommonPacketItem cpi = new CommonPacketItem();

            cpi.TypeId = (ushort)CommonPacketTypeId.UnconnectedMessage;
            cpi.Length = (ushort)(Message == null ? 0 : Message.Length);
            cpi.Data   = Message;
            return(cpi);
        }
Example #3
0
        /// <summary>
        /// Returns a Connected Address Item
        /// </summary>
        /// <param name="ConnectionId">Connection Id</param>
        /// <returns>Address Item for the Common Packet Format</returns>
        public static CommonPacketItem GetConnectedAddressItem(uint ConnectionId)
        {
            CommonPacketItem cpi = new CommonPacketItem();

            cpi.TypeId = (ushort)CommonPacketTypeId.ConnectionBased;
            cpi.Length = 4;
            cpi.Data   = BitConverter.GetBytes(ConnectionId);

            return(cpi);
        }
Example #4
0
        /// <summary>
        /// Returns a Connected Data Item
        /// </summary>
        /// <param name="Message">Message to encapsulate</param>
        /// <param name="SequenceNumber">Sequence Number</param>
        /// <returns>Connected Data Item for the Common Packet Format</returns>
        public static CommonPacketItem GetConnectedDataItem(byte[] Message, ushort SequenceNumber)
        {
            CommonPacketItem cpi = new CommonPacketItem();

            cpi.TypeId = (ushort)CommonPacketTypeId.ConnectedTransportPacket;
            cpi.Length = (ushort)(Message == null ? 0 : Message.Length);
            byte[] fullMessage = new byte[2 + Message.Length];
            Buffer.BlockCopy(BitConverter.GetBytes(SequenceNumber), 0, fullMessage, 0, 2);
            Buffer.BlockCopy(Message, 0, fullMessage, 2, Message.Length);
            cpi.Data = fullMessage;
            return(cpi);
        }
Example #5
0
        public EncapsReply SendUnitData(CommonPacketItem AddressItem, CommonPacketItem DataItem, CommonPacketItem[] AdditionalItems = null)
#endif
        {
            if (OnPreOperation != null)
            {
                OnPreOperation();
            }

            if ((CommonPacketTypeId)AddressItem.TypeId == CommonPacketTypeId.ConnectionBased)
            {
                //The connection ID may have changed, so we have to reset it
                AddressItem.Data = BitConverter.GetBytes(ConnectionParameters.O2T_CID);
            }

            EncapsRRData rrData = new EncapsRRData();

            rrData.CPF             = new CommonPacket();
            rrData.Timeout         = (ushort)MillisecondTimeout;
            rrData.CPF.AddressItem = AddressItem;
            rrData.CPF.DataItem    = DataItem;

            if (AdditionalItems != null)
            {
                for (int i = 0; i < AdditionalItems.Length; i++)
                {
                    rrData.CPF.AddItem(AdditionalItems[i]);
                }
            }

            EncapsPacket request = EncapsPacketFactory.CreateSendUnitData(SessionHandle, SenderContext, rrData.Pack());

            byte[] rawRequest = request.Pack();

            byte[] rawReply = SendData_WaitReply(rawRequest);

            if (OnPostOperation != null)
            {
                OnPostOperation();
            }

            if (rawReply == null)
            {
                return(null);
            }

            EncapsReply reply = new EncapsReply();
            int         temp  = 0;

            reply.Expand(rawReply, 0, out temp);

            return(reply);
        }
Example #6
0
        /// <summary>
        /// Returns a Sequenced Address Item
        /// </summary>
        /// <param name="ConnectionId">Connection Id</param>
        /// <param name="SequenceNumber">Sequence Number</param>
        /// <returns>Sequenced Address Item for the Common Packet Format</returns>
        public static CommonPacketItem GetSequencedAddressItem(uint ConnectionId, uint SequenceNumber)
        {
            CommonPacketItem cpi = new CommonPacketItem();

            cpi.TypeId = (ushort)CommonPacketTypeId.SequencedAddressItem;
            cpi.Length = 8;
            byte[] temp = new byte[8];
            Buffer.BlockCopy(BitConverter.GetBytes(ConnectionId), 0, temp, 0, 4);
            Buffer.BlockCopy(BitConverter.GetBytes(SequenceNumber), 0, temp, 4, 4);
            cpi.Data = temp;

            return(cpi);
        }
Example #7
0
        internal void Expand(byte[] sourceArray)
        {
            ItemCount = BitConverter.ToUInt16(sourceArray, 0);

            if (ItemCount == 0)
            {
                return;
            }

            Items = new CommonPacketItem[ItemCount];
            int offset = 1;

            for (int i = 0; i < ItemCount; i++)
            {
                offset += 1;
                CommonPacketItem cpi = new CommonPacketItem();
                cpi.Expand(sourceArray, offset, out offset);
                Items[i] = cpi;
            }
        }
Example #8
0
 /// <summary>
 /// Adds an item to the optional items
 /// </summary>
 /// <param name="cpi"></param>
 public void AddItem(CommonPacketItem cpi)
 {
     _items.Add(cpi);
 }
Example #9
0
 /// <summary>
 /// Creates a new CommonPacketItem using a Null Address Item and an Unconnected Data Item with a NULL message
 /// </summary>
 public CommonPacket()
 {
     AddressItem = CommonPacketItem.GetNullAddressItem();
     DataItem    = CommonPacketItem.GetUnconnectedDataItem(null);
 }
Example #10
0
 public EncapsReply SendUnitData(CommonPacketItem AddressItem, CommonPacketItem DataItem, CommonPacketItem[] AdditionalItems)
Example #11
0
 public EncapsReply SendUnitData(CommonPacketItem AddressItem, CommonPacketItem DataItem)
 {
     return(SendUnitData(AddressItem, DataItem, null));
 }