예제 #1
0
        public void Test1()
        {
            var aleData1 = new AleConnectionRequest()
            {
                InitiatorID = 10, ResponderID = 20, @ServiceType = ServiceType.D
            };

            var aleFrame1 = new AleFrame(1, 111, false, aleData1);

            aleFrame1.Version         = 1;
            aleFrame1.ApplicationType = 22;
            aleFrame1.SequenceNo      = 300;

            Assert.AreEqual(AleFrameType.ConnectionRequest, aleFrame1.FrameType);

            var bytes = aleFrame1.GetBytes();

            var aleFrame2 = new AleFrame();

            aleFrame2.ParseBytes(bytes);

            Assert.AreEqual(aleFrame2.Version, aleFrame1.Version);
            Assert.AreEqual(aleFrame2.ApplicationType, aleFrame1.ApplicationType);
            Assert.AreEqual(aleFrame2.SequenceNo, aleFrame1.SequenceNo);
            Assert.AreEqual(aleFrame2.IsNormal, aleFrame1.IsNormal);

            var aleData2 = aleFrame2.UserData as AleConnectionRequest;

            Assert.NotNull(aleData2);
            Assert.AreEqual(aleData1.InitiatorID, aleData2.InitiatorID);
            Assert.AreEqual(aleData1.ResponderID, aleData2.ResponderID);
            Assert.AreEqual(aleData1.ServiceType, aleData2.ServiceType);
        }
예제 #2
0
        protected void CheckCrFrame(AleConnectionRequest crData, AleTunnel theTunnel)
        {
            if (crData.ServiceType == ServiceType.A)
            {
                throw new Exception(string.Format("收到CR帧,请求A类服务,不支持此类型,断开连接。"));
            }

            if (crData.ResponderID != this.Context.RsspEP.LocalID)
            {
                throw new Exception(string.Format("CR帧中的被动方编号({0})与本地编号({1})不一致,断开此连接。",
                                                  crData.ResponderID, this.Context.RsspEP.LocalID));
            }

            if (crData.InitiatorID == this.Context.RsspEP.LocalID)
            {
                throw new Exception(string.Format("CR帧中的主动方编号({0})与本地编号({1})相同,断开此连接。",
                                                  crData.InitiatorID, this.Context.RsspEP.LocalID));
            }

            if (!this.Context.RsspEP.IsClientAcceptable(crData.InitiatorID, theTunnel.RemoteEndPoint))
            {
                throw new Exception(string.Format("CR帧中的主动方编号({0})或终结点({1})不在可接受的范围内,断开此连接。",
                                                  crData.InitiatorID, theTunnel.RemoteEndPoint));
            }
        }
예제 #3
0
        public void Test1()
        {
            var data1 = new AleConnectionRequest();

            data1.InitiatorID = 11;
            data1.ResponderID = 12;
            data1.UserData    = new byte[] { 100, 200 };

            var bytes = data1.GetBytes();

            var data2 = new AleConnectionRequest();

            data2.ParseBytes(bytes, 0, bytes.Length - 1);

            Assert.AreEqual(AleFrameType.ConnectionRequest, data2.FrameType);
            Assert.AreEqual(11, data2.InitiatorID);
            Assert.AreEqual(12, data2.ResponderID);
            Assert.AreEqual(100, data2.UserData[0]);
            Assert.AreEqual(200, data2.UserData[1]);
        }
예제 #4
0
        protected void SendConnectionRequestFrame(AleClientTunnel theConnection)
        {
            var au1Packet = this.Context.AuMsgBuilder.BuildAu1Packet();

            var crData = new AleConnectionRequest(this.Context.RsspEP.LocalID, this.Context.RsspEP.RemoteID,
                                                  this.Context.RsspEP.ServiceType, au1Packet);

            // 构建AleFrame。
            ushort seqNo   = 0;
            var    appType = this.Context.RsspEP.ApplicatinType;
            var    crFrame = new AleFrame(appType, seqNo, theConnection.IsNormal, crData);

            // 发送。
            var bytes = crFrame.GetBytes();

            theConnection.Send(bytes);

            LogUtility.Info(string.Format("{0}: Send CR frame via tcp connection(LEP = {1}, REP={2}).",
                                          this.Context.RsspEP.ID, theConnection.LocalEndPoint, theConnection.RemoteEndPoint));
        }