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