diff --git a/coreapi/account_creator.c b/coreapi/account_creator.c index fa9d3b579..05f0722d8 100644 --- a/coreapi/account_creator.c +++ b/coreapi/account_creator.c @@ -123,6 +123,7 @@ static void _linphone_account_creator_destroy(LinphoneAccountCreator *creator) { linphone_account_creator_cbs_unref(creator->callbacks); if (creator->username) ms_free(creator->username); if (creator->password) ms_free(creator->password); + if (creator->ha1) ms_free(creator->ha1); if (creator->domain) ms_free(creator->domain); if (creator->route) ms_free(creator->route); if (creator->email) ms_free(creator->email); @@ -336,6 +337,15 @@ const char * linphone_account_creator_get_password(const LinphoneAccountCreator return creator->password; } +LinphoneAccountCreatorStatus linphone_account_creator_set_ha1(LinphoneAccountCreator *creator, const char *ha1){ + set_string(&creator->ha1, ha1, FALSE); + return LinphoneAccountCreatorOK; +} + +const char * linphone_account_creator_get_ha1(const LinphoneAccountCreator *creator) { + return creator->ha1; +} + LinphoneAccountCreatorStatus linphone_account_creator_set_activation_code(LinphoneAccountCreator *creator, const char *activation_code){ set_string(&creator->activation_code, activation_code, FALSE); return LinphoneAccountCreatorOK; @@ -700,7 +710,7 @@ static void _activate_phone_number_link_cb(LinphoneXmlRpcRequest *request) { LinphoneAccountCreatorStatus linphone_account_creator_activate_phone_number_link(LinphoneAccountCreator *creator) { LinphoneXmlRpcRequest *request; - if (!creator->phone_number || !creator->username || !creator->activation_code || !creator->password || !creator->domain) { + if (!creator->phone_number || !creator->username || !creator->activation_code || (!creator->password && !creator->ha1) || !creator->domain) { if (creator->callbacks->activate_phone_number_link != NULL) { creator->callbacks->activate_phone_number_link(creator, LinphoneAccountCreatorReqFailed, "Missing required parameters"); } @@ -710,7 +720,7 @@ LinphoneAccountCreatorStatus linphone_account_creator_activate_phone_number_link LinphoneXmlRpcArgString, creator->phone_number, LinphoneXmlRpcArgString, creator->username, LinphoneXmlRpcArgString, creator->activation_code, - LinphoneXmlRpcArgString, ha1_for_passwd(creator->username, creator->domain, creator->password), + LinphoneXmlRpcArgString, creator->ha1 ? creator->ha1 : ha1_for_passwd(creator->username, creator->domain, creator->password), LinphoneXmlRpcArgNone); linphone_xml_rpc_request_set_user_data(request, creator); linphone_xml_rpc_request_cbs_set_response(linphone_xml_rpc_request_get_callbacks(request), _activate_phone_number_link_cb); diff --git a/coreapi/account_creator.h b/coreapi/account_creator.h index d5203c044..32a4cd9ad 100644 --- a/coreapi/account_creator.h +++ b/coreapi/account_creator.h @@ -163,6 +163,21 @@ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_set_passwo **/ LINPHONE_PUBLIC const char * linphone_account_creator_get_password(const LinphoneAccountCreator *creator); +/** + * Set the ha1. + * @param[in] creator LinphoneAccountCreator object + * @param[in] password The ha1 to set + * @return LinphoneAccountCreatorOk if everything is OK, or a specific error otherwise. +**/ +LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_set_ha1(LinphoneAccountCreator *creator, const char *ha1); + +/** + * Get the ha1. + * @param[in] creator LinphoneAccountCreator object + * @return The ha1 of the LinphoneAccountCreator +**/ +LINPHONE_PUBLIC const char * linphone_account_creator_get_ha1(const LinphoneAccountCreator *creator); + /** * Set the activation code. * @param[in] creator LinphoneAccountCreator object diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index c9c28d275..32ed49fda 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -8040,6 +8040,20 @@ extern "C" jstring Java_org_linphone_core_LinphoneAccountCreatorImpl_getPassword return password ? env->NewStringUTF(password) : NULL; } +extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_setHa1(JNIEnv *env, jobject thiz, jlong ptr, jstring jha1) { + const char *ha1 = GetStringUTFChars(env, jha1); + LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr; + LinphoneAccountCreatorStatus status = linphone_account_creator_set_ha1(account_creator, ha1); + ReleaseStringUTFChars(env, jha1, ha1); + return (jint) status; +} + +extern "C" jstring Java_org_linphone_core_LinphoneAccountCreatorImpl_getHa1(JNIEnv *env, jobject thiz, jlong ptr) { + LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr; + const char *ha1 = linphone_account_creator_get_ha1(account_creator); + return ha1 ? env->NewStringUTF(ha1) : NULL; +} + extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_setActivationCode(JNIEnv *env, jobject thiz, jlong ptr, jstring jcode) { const char *activation_code = GetStringUTFChars(env, jcode); LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr; diff --git a/java/common/org/linphone/core/LinphoneAccountCreator.java b/java/common/org/linphone/core/LinphoneAccountCreator.java index 90be9a04f..9bf198658 100644 --- a/java/common/org/linphone/core/LinphoneAccountCreator.java +++ b/java/common/org/linphone/core/LinphoneAccountCreator.java @@ -99,6 +99,10 @@ public interface LinphoneAccountCreator { Status setPassword(String password); String getPassword(); + + Status setHa1(String ha1); + + String getHa1(); Status setActivationCode(String activationCode); diff --git a/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java b/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java index 026c54d0c..45ecacd01 100644 --- a/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java +++ b/java/impl/org/linphone/core/LinphoneAccountCreatorImpl.java @@ -82,6 +82,18 @@ public class LinphoneAccountCreatorImpl implements LinphoneAccountCreator { return getPassword(nativePtr); } + private native int setHa1(long ptr, String ha1); + @Override + public Status setHa1(String ha1) { + return Status.fromInt(setHa1(nativePtr, ha1)); + } + + private native String getHa1(long ptr); + @Override + public String getHa1() { + return null; + } + private native int setActivationCode(long ptr, String activationCode); @Override public Status setActivationCode(String activationCode) {