1525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* 2525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project 3525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 4525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * you may not use this file except in compliance with the License. 6525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * You may obtain a copy of the License at 7525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 8525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 10525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * See the License for the specific language governing permissions and 14525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * limitations under the License. 15525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 16525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 17525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpackage com.android.nfc.dhimpl; 18525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectimport com.android.nfc.DeviceHost; 20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectimport java.io.IOException; 22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/** 24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * LlcpClientSocket represents a LLCP Connection-Oriented client to be used in a 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * connection-oriented communication 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpublic class NativeLlcpSocket implements DeviceHost.LlcpSocket { 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private int mHandle; 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private int mSap; 30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private int mLocalMiu; 31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private int mLocalRw; 32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public NativeLlcpSocket(){ } 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native boolean doConnect(int nSap); 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public void connectToSap(int sap) throws IOException { 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!doConnect(sap)) { 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project throw new IOException(); 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native boolean doConnectBy(String sn); 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public void connectToService(String serviceName) throws IOException { 46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!doConnectBy(serviceName)) { 47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project throw new IOException(); 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native boolean doClose(); 52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public void close() throws IOException { 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!doClose()) { 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project throw new IOException(); 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native boolean doSend(byte[] data); 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public void send(byte[] data) throws IOException { 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (!doSend(data)) { 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project throw new IOException(); 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native int doReceive(byte[] recvBuff); 68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int receive(byte[] recvBuff) throws IOException { 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project int receiveLength = doReceive(recvBuff); 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project if (receiveLength == -1) { 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project throw new IOException(); 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return receiveLength; 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native int doGetRemoteSocketMiu(); 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int getRemoteMiu() { return doGetRemoteSocketMiu(); } 80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project private native int doGetRemoteSocketRw(); 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int getRemoteRw() { return doGetRemoteSocketRw(); } 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 86525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int getLocalSap(){ 87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return mSap; 88525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int getLocalMiu(){ 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return mLocalMiu; 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project @Override 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project public int getLocalRw(){ 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return mLocalRw; 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project} 100