diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-08-31 14:44:03 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-08-31 14:44:03 -0700 |
commit | 3e59cf7ede6d6c66cbb0b1e1f345cf132972a713 (patch) | |
tree | d83ca92db03204738a4bc5ac84c9b2a5abae2762 /core | |
parent | 550d48f3342f01ccf6c310845e8c0b986ab7b506 (diff) | |
parent | 41a0a4a850184c8c936818dc0f2ac4d3ecd9a1c6 (diff) | |
download | frameworks_base-3e59cf7ede6d6c66cbb0b1e1f345cf132972a713.zip frameworks_base-3e59cf7ede6d6c66cbb0b1e1f345cf132972a713.tar.gz frameworks_base-3e59cf7ede6d6c66cbb0b1e1f345cf132972a713.tar.bz2 |
Merge change 23335 into eclair
* changes:
Set RFCOMM SO_SNDBUF size to 70 KB for large RFCOMM writes.
Diffstat (limited to 'core')
-rw-r--r-- | core/jni/android_bluetooth_BluetoothSocket.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/core/jni/android_bluetooth_BluetoothSocket.cpp b/core/jni/android_bluetooth_BluetoothSocket.cpp index 9c4f7c7..0aeaadc 100644 --- a/core/jni/android_bluetooth_BluetoothSocket.cpp +++ b/core/jni/android_bluetooth_BluetoothSocket.cpp @@ -54,6 +54,8 @@ static const int TYPE_RFCOMM = 1; static const int TYPE_SCO = 2; static const int TYPE_L2CAP = 3; // TODO: Test l2cap code paths +static const int RFCOMM_SO_SNDBUF = 70 * 1024; // 70 KB send buffer + static struct asocket *get_socketData(JNIEnv *env, jobject obj) { struct asocket *s = (struct asocket *) env->GetIntField(obj, field_mSocketData); @@ -87,6 +89,7 @@ static void initSocketNative(JNIEnv *env, jobject obj) { int fd; int lm = 0; + int sndbuf; jboolean auth; jboolean encrypt; jint type; @@ -131,7 +134,16 @@ static void initSocketNative(JNIEnv *env, jobject obj) { if (lm) { if (setsockopt(fd, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(lm))) { - LOGV("setsockopt() failed, throwing"); + LOGV("setsockopt(RFCOMM_LM) failed, throwing"); + jniThrowIOException(env, errno); + return; + } + } + + if (type == TYPE_RFCOMM) { + sndbuf = RFCOMM_SO_SNDBUF; + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf))) { + LOGV("setsockopt(SO_SNDBUF) failed, throwing"); jniThrowIOException(env, errno); return; } @@ -274,16 +286,21 @@ static void bindListenNative(JNIEnv *env, jobject obj) { } if (bind(s->fd, addr, addr_sz)) { + LOGV("...bind(%d) gave errno %d", s->fd, errno); jniThrowIOException(env, errno); return; } if (listen(s->fd, 1)) { + LOGV("...listen(%d) gave errno %d", s->fd, errno); jniThrowIOException(env, errno); return; } + LOGV("...bindListenNative(%d) success", s->fd); + return; + #endif jniThrowIOException(env, ENOSYS); } |