summaryrefslogtreecommitdiffstats
path: root/nci/jni/NativeLlcpServiceSocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'nci/jni/NativeLlcpServiceSocket.cpp')
-rw-r--r--nci/jni/NativeLlcpServiceSocket.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/nci/jni/NativeLlcpServiceSocket.cpp b/nci/jni/NativeLlcpServiceSocket.cpp
new file mode 100644
index 0000000..e1c2bb5
--- /dev/null
+++ b/nci/jni/NativeLlcpServiceSocket.cpp
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "OverrideLog.h"
+#include "NfcJniUtil.h"
+#include "NfcAdaptation.h"
+#include "PeerToPeer.h"
+#include "JavaClassConstants.h"
+extern "C"
+{
+ #include "nfa_api.h"
+ #include "nfa_p2p_api.h"
+}
+
+
+namespace android
+{
+
+
+/*******************************************************************************
+**
+** Function: nativeLlcpServiceSocket_doAccept
+**
+** Description: Accept a connection request from a peer.
+** e: JVM environment.
+** o: Java object.
+** miu: Maximum information unit.
+** rw: Receive window.
+** linearBufferLength: Not used.
+**
+** Returns: LlcpSocket Java object.
+**
+*******************************************************************************/
+static jobject nativeLlcpServiceSocket_doAccept(JNIEnv *e, jobject o, jint miu, jint rw, jint linearBufferLength)
+{
+ jobject clientSocket = NULL;
+ jclass clsNativeLlcpSocket = NULL;
+ jfieldID f = 0;
+ PeerToPeer::tJNI_HANDLE serverHandle; //handle of the local server
+ bool stat = false;
+ PeerToPeer::tJNI_HANDLE connHandle = PeerToPeer::getInstance().getNewJniHandle ();
+
+ ALOGD ("%s: enter", __FUNCTION__);
+
+ serverHandle = (PeerToPeer::tJNI_HANDLE) nfc_jni_get_nfc_socket_handle (e, o);
+
+ stat = PeerToPeer::getInstance().accept (serverHandle, connHandle, miu, rw);
+
+ if (! stat)
+ {
+ ALOGE ("%s: fail accept", __FUNCTION__);
+ goto TheEnd;
+ }
+
+ /* Create new LlcpSocket object */
+ if (nfc_jni_cache_object(e, gNativeLlcpSocketClassName, &(clientSocket)) == -1)
+ {
+ ALOGE ("%s: fail create NativeLlcpSocket", __FUNCTION__);
+ goto TheEnd;
+ }
+
+ /* Get NativeConnectionOriented class object */
+ clsNativeLlcpSocket = e->GetObjectClass (clientSocket);
+ if (e->ExceptionCheck())
+ {
+ e->ExceptionClear();
+ ALOGE ("%s: get class object error", __FUNCTION__);
+ goto TheEnd;
+ }
+
+ /* Set socket handle */
+ f = e->GetFieldID (clsNativeLlcpSocket, "mHandle", "I");
+ e->SetIntField (clientSocket, f, (jint) connHandle);
+
+ /* Set socket MIU */
+ f = e->GetFieldID (clsNativeLlcpSocket, "mLocalMiu", "I");
+ e->SetIntField (clientSocket, f, (jint)miu);
+
+ /* Set socket RW */
+ f = e->GetFieldID (clsNativeLlcpSocket, "mLocalRw", "I");
+ e->SetIntField (clientSocket, f, (jint)rw);
+
+TheEnd:
+ ALOGD ("%s: exit", __FUNCTION__);
+ return clientSocket;
+}
+
+
+/*******************************************************************************
+**
+** Function: nativeLlcpServiceSocket_doClose
+**
+** Description: Close a server socket.
+** e: JVM environment.
+** o: Java object.
+**
+** Returns: True if ok.
+**
+*******************************************************************************/
+static jboolean nativeLlcpServiceSocket_doClose(JNIEnv *e, jobject o)
+{
+ ALOGD ("%s: enter", __FUNCTION__);
+ PeerToPeer::tJNI_HANDLE jniServerHandle = 0;
+ bool stat = false;
+
+ jniServerHandle = nfc_jni_get_nfc_socket_handle (e, o);
+
+ stat = PeerToPeer::getInstance().deregisterServer (jniServerHandle);
+
+ ALOGD ("%s: exit", __FUNCTION__);
+ return JNI_TRUE;
+}
+
+
+/*****************************************************************************
+**
+** Description: JNI functions
+**
+*****************************************************************************/
+static JNINativeMethod gMethods[] =
+{
+ {"doAccept", "(III)Lcom/android/nfc/dhimpl/NativeLlcpSocket;", (void*) nativeLlcpServiceSocket_doAccept},
+ {"doClose", "()Z", (void*) nativeLlcpServiceSocket_doClose},
+};
+
+
+/*******************************************************************************
+**
+** Function: register_com_android_nfc_NativeLlcpServiceSocket
+**
+** Description: Regisgter JNI functions with Java Virtual Machine.
+** e: Environment of JVM.
+**
+** Returns: Status of registration.
+**
+*******************************************************************************/
+int register_com_android_nfc_NativeLlcpServiceSocket (JNIEnv* e)
+{
+ return jniRegisterNativeMethods (e, gNativeLlcpServiceSocketClassName,
+ gMethods, NELEM(gMethods));
+}
+
+
+} //namespace android
+