예제 #1
0
        //----
        public Structs.SPP_Event_Data CreateOpenConfirmation(uint portId,
                                                             StackConsts.SPP_OPEN_PORT_STATUS connConfStatusCode)
        {
            var data = new Structs.SPP_Open_Port_Confirmation_Data(
                portId, connConfStatusCode);

            return(Create(StackConsts.SPP_Event_Type.Port_Open_Confirmation, ref data));
        }
예제 #2
0
        internal static StuffClientBluetopia DoOpen(StuffClientBluetopia stuff, Action beforeEndConnect)
        {
            var cli       = stuff.DutClient;
            var cli2      = (BluetopiaClient)cli;
            var conn      = (BluetopiaRfcommStream)cli2.Testing_GetConn();
            var behaviour = stuff.Behaviour;
            //
            BluetoothEndPoint remote;

            if (behaviour.ToPortNumber)
            {
                remote = new BluetoothEndPoint(Addr1, BluetoothService.Empty, Port5);
            }
            else
            {
                remote = new BluetoothEndPoint(Addr1, BluetoothService.VideoSource);
            }
            //
            bool ourCallbackCalled = false;
            var  ourCallback       = (AsyncCallback) delegate { ourCallbackCalled = true; };
            //
            var ar = cli.BeginConnect(remote, ourCallback, null);

            Assert_IsConnected(
                IsConnectedState.Closed,
                conn, cli, "BB");
            stuff.Mockery_VerifyAllExpectationsHaveBeenMet();
            //
            Assert_IsConnected(
                IsConnectedState.Closed,
                conn, cli, "CC0");
            if (behaviour.SdpQueryResultPort.HasValue)
            {
                var listAllocs = new List <IntPtr>();
                IntPtr /*"SDP_Response_Data *"*/ pSdp = BluetopiaSdpParseTests
                                                        .ProtoDListMake_InSDPResponse_Data(listAllocs, behaviour.SdpQueryResultPort.Value);
                var  sdpQuery          = cli2.Testing_GetSdpQuery();
                uint SDPRequestID      = 0;
                uint CallbackParameter = 0;
                //
                stuff.AddExpectOpenRemotePort(null, null);
                // TODO raise callback on thread pool
                sdpQuery.HandleSDP_Response_Callback(stuff.StackId, SDPRequestID,
                                                     pSdp, CallbackParameter);
                BluetopiaSdpParseTests.Free(listAllocs);
                Thread.Sleep(2000);//HACK
            }
            //
            Assert_IsConnected(
                IsConnectedState.Closed,
                conn, cli, "CC");
            stuff.Mockery_VerifyAllExpectationsHaveBeenMet();
            var openConfData = new Structs.SPP_Open_Port_Confirmation_Data(
                conn.Testing_GetPortId(), behaviour.ConnConfStatusCode);

            using (var ctor = new SppEventCreator()) {
                Structs.SPP_Event_Data eventData = ctor.CreateOpenConfirmation(
                    conn.Testing_GetPortId(), behaviour.ConnConfStatusCode);
                RaiseSppEvent(stuff, eventData);
            }
            SafeWait(ar); //NEW
            Assert_IsConnected(
                behaviour.EndConnectSuccess ? IsConnectedState.Connected : IsConnectedState.Closed,
                conn, cli, "DD");
            Assert.IsTrue(ar.IsCompleted, "ar.IsCompleted before");
            if (beforeEndConnect != null)
            {
                beforeEndConnect();
            }
            if (behaviour.EndConnectSuccess)
            {
                Debug.Assert(!behaviour.SocketError.HasValue, "Behaviour settings: Success BUT errorCode!!");
                cli.EndConnect(ar);
            }
            else
            {
                Debug.Assert(behaviour.SocketError.HasValue, "Behaviour settings: not Success BUT NO errorCode!!");
                try {
                    cli.EndConnect(ar);
                    Assert.Fail("should have thrown!");
                } catch (SocketException ex) {
                    //TODO Assert.AreEqual(SocketError.ConnectionRefused, ex.SocketErrorCode, "SocketErrorCode");
                    Assert.AreEqual(behaviour.SocketError ?? 0, ex.ErrorCode, "(Socket)ErrorCode");
                }
            }
            Thread.Sleep(200); // let the async async-callback run
            Assert.IsTrue(ourCallbackCalled, "ourCallbackCalled");
            //
            if (behaviour.EndConnectSuccess)
            {
                Assert_IsConnected(
                    IsConnectedState.Connected,
                    conn, cli, "DD2");
                BluetoothEndPoint expectedRemote = new BluetoothEndPoint(Addr1, BluetoothService.Empty, Port5);
                Assert.AreEqual(expectedRemote, cli.RemoteEndPoint, "cli.RemoteEndPoint");
            }
            //
            stuff.Mockery_VerifyAllExpectationsHaveBeenMet();
            return(stuff);
        }