am 8ad6d524: Merge change I55e15bad into eclair
Merge commit '8ad6d524e48d88ff9d5606cea0df56b4c1dafe28' into eclair-plus-aosp * commit '8ad6d524e48d88ff9d5606cea0df56b4c1dafe28': Try to reconnect twice when the rfcomm error code is Connection Refused.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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},
|
||||
|
||||
Reference in New Issue
Block a user