Merge change 23335 into eclair

* changes:
  Set RFCOMM SO_SNDBUF size to 70 KB for large RFCOMM writes.
This commit is contained in:
Android (Google) Code Review
2009-08-31 14:44:03 -07:00

View File

@@ -54,6 +54,8 @@ static const int TYPE_RFCOMM = 1;
static const int TYPE_SCO = 2; static const int TYPE_SCO = 2;
static const int TYPE_L2CAP = 3; // TODO: Test l2cap code paths 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) { static struct asocket *get_socketData(JNIEnv *env, jobject obj) {
struct asocket *s = struct asocket *s =
(struct asocket *) env->GetIntField(obj, field_mSocketData); (struct asocket *) env->GetIntField(obj, field_mSocketData);
@@ -87,6 +89,7 @@ static void initSocketNative(JNIEnv *env, jobject obj) {
int fd; int fd;
int lm = 0; int lm = 0;
int sndbuf;
jboolean auth; jboolean auth;
jboolean encrypt; jboolean encrypt;
jint type; jint type;
@@ -131,7 +134,16 @@ static void initSocketNative(JNIEnv *env, jobject obj) {
if (lm) { if (lm) {
if (setsockopt(fd, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(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); jniThrowIOException(env, errno);
return; return;
} }
@@ -274,16 +286,21 @@ static void bindListenNative(JNIEnv *env, jobject obj) {
} }
if (bind(s->fd, addr, addr_sz)) { if (bind(s->fd, addr, addr_sz)) {
LOGV("...bind(%d) gave errno %d", s->fd, errno);
jniThrowIOException(env, errno); jniThrowIOException(env, errno);
return; return;
} }
if (listen(s->fd, 1)) { if (listen(s->fd, 1)) {
LOGV("...listen(%d) gave errno %d", s->fd, errno);
jniThrowIOException(env, errno); jniThrowIOException(env, errno);
return; return;
} }
LOGV("...bindListenNative(%d) success", s->fd);
return; return;
#endif #endif
jniThrowIOException(env, ENOSYS); jniThrowIOException(env, ENOSYS);
} }