Merge change I55e15bad into eclair

* changes:
  Try to reconnect twice when the rfcomm error code is Connection Refused.
This commit is contained in:
Android (Google) Code Review
2009-10-01 00:00:17 -04:00
2 changed files with 16 additions and 13 deletions

View File

@@ -211,9 +211,10 @@ public final class HeadsetBase {
*/
public boolean connectAsync() {
return connectAsyncNative();
int ret = connectAsyncNative();
return (ret == 0) ? true : false;
}
private native boolean connectAsyncNative();
private native int connectAsyncNative();
public int getRemainingAsyncConnectWaitingTimeMs() {
return mTimeoutRemainingMs;

View File

@@ -260,7 +260,7 @@ static jboolean connectNative(JNIEnv *env, jobject obj)
#endif
}
static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
static jint connectAsyncNative(JNIEnv *env, jobject obj) {
LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
struct sockaddr_rc addr;
@@ -268,7 +268,7 @@ static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
if (nat->rfcomm_connected) {
LOGV("RFCOMM socket is already connected or connection is in progress.");
return JNI_TRUE;
return 0;
}
if (nat->rfcomm_sock < 0) {
@@ -278,7 +278,7 @@ static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
if (nat->rfcomm_sock < 0) {
LOGE("%s: Could not create RFCOMM socket: %s\n", __FUNCTION__,
strerror(errno));
return JNI_FALSE;
return -1;
}
if (debug_no_encrypt()) {
@@ -291,7 +291,7 @@ static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
sizeof(lm)) < 0) {
LOGE("%s: Can't set RFCOMM link mode", __FUNCTION__);
close(nat->rfcomm_sock);
return JNI_FALSE;
return -1;
}
LOGI("Created RFCOMM socket fd %d.", nat->rfcomm_sock);
}
@@ -314,7 +314,7 @@ static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
if (rc >= 0) {
nat->rfcomm_connected = 1;
LOGI("async connect successful");
return JNI_TRUE;
return 0;
}
else if (rc < 0) {
if (errno == EINPROGRESS || errno == EAGAIN)
@@ -322,20 +322,20 @@ static jboolean connectAsyncNative(JNIEnv *env, jobject obj) {
LOGI("async connect is in progress (%s)",
strerror(errno));
nat->rfcomm_connected = -1;
return JNI_TRUE;
return 0;
}
else
{
LOGE("async connect error: %s (%d)", strerror(errno), errno);
close(nat->rfcomm_sock);
nat->rfcomm_sock = -1;
return JNI_FALSE;
return -errno;
}
}
} // fcntl(nat->rfcomm_sock ...)
} // if (nat->rfcomm_sock_flags >= 0)
#endif
return JNI_FALSE;
return -1;
}
static jint waitForAsyncConnectNative(JNIEnv *env, jobject obj,
@@ -357,9 +357,11 @@ static jint waitForAsyncConnectNative(JNIEnv *env, jobject obj,
close(nat->rfcomm_sock);
nat->rfcomm_sock = -1;
}
if (JNI_FALSE == connectAsyncNative(env, obj)) {
int ret = connectAsyncNative(env, obj);
if (ret < 0) {
LOGI("Failed to re-open RFCOMM socket!");
return -1;
return ret;
}
if (nat->rfcomm_sock >= 0) {
@@ -532,7 +534,7 @@ static JNINativeMethod sMethods[] = {
{"initializeNativeDataNative", "(I)V", (void *)initializeNativeDataNative},
{"cleanupNativeDataNative", "()V", (void *)cleanupNativeDataNative},
{"connectNative", "()Z", (void *)connectNative},
{"connectAsyncNative", "()Z", (void *)connectAsyncNative},
{"connectAsyncNative", "()I", (void *)connectAsyncNative},
{"waitForAsyncConnectNative", "(I)I", (void *)waitForAsyncConnectNative},
{"disconnectNative", "()V", (void *)disconnectNative},
{"sendURCNative", "(Ljava/lang/String;)Z", (void *)sendURCNative},