12ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson/* 22ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * Copyright (C) 2011 The Android Open Source Project 32ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * 42ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * Licensed under the Apache License, Version 2.0 (the "License"); 52ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * you may not use this file except in compliance with the License. 62ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * You may obtain a copy of the License at 72ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * 82ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * http://www.apache.org/licenses/LICENSE-2.0 92ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * 102ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * Unless required by applicable law or agreed to in writing, software 112ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * distributed under the License is distributed on an "AS IS" BASIS, 122ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * See the License for the specific language governing permissions and 142ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * limitations under the License. 152ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson */ 162ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 172ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonpackage com.android.nfc; 182ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 194a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamiltonimport android.util.Log; 204a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 212ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport java.io.IOException; 222ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport java.util.LinkedList; 232ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport java.util.List; 242ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 254a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamiltonpublic class MockLlcpSocket implements DeviceHost.LlcpSocket { 262ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private static final String TAG = "mockLlcpSocket"; 272ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private MockLlcpSocket mPairedSocket; 282ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private List<byte[]> mReceivedPackets = new LinkedList<byte[]>(); 292ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private boolean mClosed = false; 302ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 312ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 322ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void close() throws IOException { 332ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson mClosed = true; 342ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson mPairedSocket.mClosed = true; 352ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 362ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 372ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 384a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public void connectToSap(int sap) throws IOException { 392ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new UnsupportedOperationException("Use MockLlcpSocket.bind(client, server)"); 402ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 412ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 422ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 432ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void send(byte[] data) throws IOException { 442ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson if (mClosed || mPairedSocket == null) { 452ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Socket not connected"); 462ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 472ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson synchronized (mPairedSocket.mReceivedPackets) { 482ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.d(TAG, "sending packet"); 492ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson mPairedSocket.mReceivedPackets.add(data); 502ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson mPairedSocket.mReceivedPackets.notify(); 512ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 522ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 532ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 542ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 552ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public int receive(byte[] receiveBuffer) throws IOException { 562ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson synchronized (mReceivedPackets) { 572ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson while (!mClosed && mReceivedPackets.size() == 0) { 582ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 592ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson mReceivedPackets.wait(1000); 602ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (InterruptedException e) {} 612ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 622ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson if (mClosed) { 632ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Socket closed."); 642ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 652ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson byte[] arr = mReceivedPackets.remove(0); 662ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson System.arraycopy(arr, 0, receiveBuffer, 0, arr.length); 672ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return arr.length; 682ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 692ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 702ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 712ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public static void bind(MockLlcpSocket client, MockLlcpSocket server) { 722ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.mPairedSocket = server; 732ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson server.mPairedSocket = client; 742ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 754a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 764a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 774a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public void connectToService(String serviceName) throws IOException { 784a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 794a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 804a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 814a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 824a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public int getRemoteMiu() { 834a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 844a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 854a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 864a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 874a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public int getRemoteRw() { 884a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 894a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 904a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 914a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 924a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public int getLocalSap() { 934a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 944a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 954a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 964a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 974a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public int getLocalMiu() { 984a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 994a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 1004a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton 1014a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 1024a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton public int getLocalRw() { 1034a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton throw new UnsupportedOperationException(); 1044a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton } 1052ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson}