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.snep; 182ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 192ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport com.android.nfc.MockLlcpSocket; 202ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 212ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport android.nfc.NdefMessage; 222ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport android.nfc.NdefRecord; 232ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport android.test.AndroidTestCase; 242ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonimport android.util.Log; 252ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 264a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamiltonimport java.io.IOException; 272ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 282ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson/** 292ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * Tests the SNEP cleint/server interfaces using a mock LLCP socket. 302ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson */ 312ef360deaff9f17aa72d5749ceee283cc80897afBen Dodsonpublic class SnepBasicTests extends AndroidTestCase { 322ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private static final String TAG = "snepBasicTests"; 332ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private static final int MIU = 250; 342ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private static final int ACCEPTABLE_LENGTH = 2*1024; 352ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 362ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testGetSmallNdef() throws IOException { 372ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 382ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 392ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 402ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 412ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 422ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 432ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 442ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 454a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 462ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 472ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 482ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 492ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 502ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 512ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 522ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 532ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 542ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 552ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 562ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 572ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(SnepMessage.getGetRequest(ACCEPTABLE_LENGTH, getSmallNdef())); 582ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 592ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 602ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 612ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 622ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 632ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 642ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_SUCCESS, response.getField()); 652ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 662ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 672ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testGetLargeNdef() throws IOException { 682ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 692ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 702ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 712ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 722ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 732ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 742ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 752ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 764a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 772ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 782ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 792ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 802ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 812ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 822ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 832ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 842ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 852ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 862ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 872ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 882ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(SnepMessage.getGetRequest(ACCEPTABLE_LENGTH, getNdef(900))); 892ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 902ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 912ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 922ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 932ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 942ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 952ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_SUCCESS, response.getField()); 962ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 972ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 982ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testGetExcessiveNdef() throws IOException { 992ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 1002ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 1012ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 1022ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1032ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 1042ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 1052ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1062ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 1074a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 1082ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 1092ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1102ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 1112ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 1122ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 1132ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1142ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 1152ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 1162ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1172ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 1182ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1192ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(SnepMessage.getGetRequest(10, getSmallNdef())); 1202ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 1212ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 1222ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 1232ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1242ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1252ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 1262ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_EXCESS_DATA, response.getField()); 1272ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1282ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1292ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testPutSmallNdef() throws IOException { 1302ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 1312ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 1322ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 1332ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1342ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 1352ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 1362ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1372ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 1384a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 1392ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 1402ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1412ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 1422ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 1432ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 1442ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1452ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 1462ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 1472ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1482ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 1492ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1502ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(SnepMessage.getPutRequest(getSmallNdef())); 1512ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 1522ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 1532ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 1542ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1552ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1562ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 1572ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_SUCCESS, response.getField()); 1582ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1592ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1602ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testPutLargeNdef() throws IOException { 1612ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 1622ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 1632ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 1642ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1652ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 1662ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 1672ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1682ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 1694a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 1702ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 1712ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1722ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 1732ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 1742ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 1752ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1762ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 1772ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 1782ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1792ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 1802ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 1812ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(SnepMessage.getPutRequest(getNdef(900))); 1822ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 1832ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 1842ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 1852ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1862ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1872ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 1882ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_SUCCESS, response.getField()); 1892ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 1902ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1912ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testUnsupportedVersion() throws IOException { 1922ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 1932ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 1942ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 1952ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1962ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 1972ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 1982ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 1992ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 2004a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 2012ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 2022ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 2032ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 2042ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 2052ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 2062ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2072ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 2082ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 2092ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2102ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 2112ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 2122ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson NdefMessage ndef = getSmallNdef(); 2132ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage request = new SnepMessage( 2142ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson (byte)2, SnepMessage.REQUEST_PUT, ndef.toByteArray().length, 0, ndef); 2152ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(request); 2162ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 2172ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 2182ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 2192ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2202ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2212ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 2222ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_UNSUPPORTED_VERSION, response.getField()); 2232ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2242ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2252ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void testDifferentMinorVersion() throws IOException { 2262ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket clientSocket = new MockLlcpSocket(); 2272ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket serverSocket = new MockLlcpSocket(); 2282ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson MockLlcpSocket.bind(clientSocket, serverSocket); 2292ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2302ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger client = new SnepMessenger(true, clientSocket, MIU); 2312ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepMessenger server = new SnepMessenger(false, serverSocket, MIU); 2322ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2332ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new Thread() { 2344a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton @Override 2352ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public void run() { 2362ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 2372ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepServer.handleRequest(server, mCallback); 2382ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (Exception e) { 2392ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson Log.e(TAG, "error getting message", e); 2402ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2412ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 2422ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }.start(); 2432ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2442ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson byte version = (0xF0 & (SnepMessage.VERSION_MAJOR << 4)) | 2452ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson (0x0F & (SnepMessage.VERSION_MINOR + 1)); 2462ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage response = null; 2472ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson try { 2482ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson NdefMessage ndef = getSmallNdef(); 2492ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson SnepMessage request = new SnepMessage( 2502ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson version, SnepMessage.REQUEST_PUT, ndef.toByteArray().length, 0, ndef); 2512ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson client.sendMessage(request); 2522ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson response = client.getMessage(); 2532ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } catch (SnepException e) { 2542ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson throw new IOException("Failed to retrieve SNEP message", e); 2552ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2562ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2572ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertNotNull(response); 2582ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson assertEquals(SnepMessage.RESPONSE_SUCCESS, response.getField()); 2592ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2602ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2614a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton NdefMessage getSmallNdef() { 2622ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson NdefRecord rec = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, NdefRecord.RTD_URI, 2632ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new byte[0], "http://android.com".getBytes()); 2642ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return new NdefMessage(new NdefRecord[] { rec }); 2652ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2662ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2674a61d3b45e81c0070538f94747a70a49c78f12faJeff Hamilton NdefMessage getNdef(int size) { 2682ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson StringBuffer string = new StringBuffer(size); 2692ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson for (int i = 0; i < size; i++) { 2702ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson string.append('A' + (i % 26)); 2712ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2722ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson NdefRecord rec = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "text/plain".getBytes(), 2732ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson new byte[0], string.toString().getBytes()); 2742ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return new NdefMessage(new NdefRecord[] { rec }); 2752ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2762ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2772ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson /** 2782ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * A SNEP Server implementation that accepts PUT requests for all ndef 2792ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * messages and responds to GET requests with acceptable length greater 2802ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson * than or equal to 1024. 2812ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson */ 2822ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson final SnepServer.Callback mCallback = new SnepServer.Callback() { 2832ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson private static final int GET_LENGTH = 1024; 2842ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2852ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 2862ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public SnepMessage doPut(NdefMessage msg) { 2872ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return SnepMessage.getSuccessResponse(null); 2882ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2892ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson 2902ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson @Override 2912ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson public SnepMessage doGet(int acceptableLength, NdefMessage msg) { 2922ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson if (GET_LENGTH <= acceptableLength) { 2932ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return SnepMessage.getSuccessResponse(getSmallNdef()); 2942ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } else { 2952ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson return SnepMessage.getMessage(SnepMessage.RESPONSE_EXCESS_DATA); 2962ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2972ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson } 2982ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson }; 2992ef360deaff9f17aa72d5749ceee283cc80897afBen Dodson}