account_creator: add recover_phone_account

This commit is contained in:
Gautier Pelloux-Prayer 2016-08-05 17:11:20 +02:00
parent c6b204fc64
commit 7b2e4bd4e2
3 changed files with 60 additions and 16 deletions

View file

@ -109,6 +109,13 @@ void linphone_account_creator_cbs_set_is_account_activated(LinphoneAccountCreato
cbs->is_account_activated = cb; cbs->is_account_activated = cb;
} }
LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_get_recover_phone_account(const LinphoneAccountCreatorCbs *cbs) {
return cbs->recover_phone_account;
}
void linphone_account_creator_cbs_set_recover_phone_account(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb) {
cbs->recover_phone_account = cb;
}
static void _linphone_account_creator_destroy(LinphoneAccountCreator *creator) { static void _linphone_account_creator_destroy(LinphoneAccountCreator *creator) {
@ -465,10 +472,12 @@ static void _is_account_used_cb(LinphoneXmlRpcRequest *request) {
LinphoneAccountCreatorStatus status = LinphoneAccountCreatorReqFailed; LinphoneAccountCreatorStatus status = LinphoneAccountCreatorReqFailed;
if (linphone_xml_rpc_request_get_status(request) == LinphoneXmlRpcStatusOk) { if (linphone_xml_rpc_request_get_status(request) == LinphoneXmlRpcStatusOk) {
const char* resp = linphone_xml_rpc_request_get_string_response(request); const char* resp = linphone_xml_rpc_request_get_string_response(request);
status = (strcmp(resp, "OK") == 0) ? status = (strcmp(resp, "ERROR_ACCOUNT_DOESNT_EXIST") == 0) ? LinphoneAccountCreatorAccountNotExist : (
LinphoneAccountCreatorAccountExist : ( (strcmp(resp, "ERROR_ALIAS_DOESNT_EXIST") == 0) ? LinphoneAccountCreatorAccountExist :
(strcmp(resp, "NOK") == 0) ? LinphoneAccountCreatorAccountNotExist : LinphoneAccountCreatorAccountExistWithAlias);
LinphoneAccountCreatorReqFailed); if (status == LinphoneAccountCreatorAccountExistWithAlias) {
set_string(&creator->phone_number, resp, FALSE);
}
} }
creator->callbacks->is_account_used(creator, status); creator->callbacks->is_account_used(creator, status);
} }
@ -476,28 +485,22 @@ static void _is_account_used_cb(LinphoneXmlRpcRequest *request) {
LinphoneAccountCreatorStatus linphone_account_creator_is_account_used(LinphoneAccountCreator *creator) { LinphoneAccountCreatorStatus linphone_account_creator_is_account_used(LinphoneAccountCreator *creator) {
LinphoneXmlRpcRequest *request; LinphoneXmlRpcRequest *request;
char *identity = _get_identity(creator); if (!creator->username && !creator->phone_number) {
if (!identity) {
if (creator->callbacks->is_account_used != NULL) { if (creator->callbacks->is_account_used != NULL) {
creator->callbacks->is_account_used(creator, LinphoneAccountCreatorReqFailed); creator->callbacks->is_account_used(creator, LinphoneAccountCreatorReqFailed);
} }
return LinphoneAccountCreatorReqFailed; return LinphoneAccountCreatorReqFailed;
} }
if (creator->phone_number) { request = linphone_xml_rpc_request_new_with_args("get_phone_number_for_account", LinphoneXmlRpcArgString,
request = linphone_xml_rpc_request_new_with_args("is_phone_number_used", LinphoneXmlRpcArgString, LinphoneXmlRpcArgString, creator->username ? creator->username : creator->phone_number,
LinphoneXmlRpcArgString, creator->phone_number,
LinphoneXmlRpcArgNone); LinphoneXmlRpcArgNone);
} else {
request = linphone_xml_rpc_request_new_with_args("is_account_used", LinphoneXmlRpcArgString,
LinphoneXmlRpcArgString, creator->username,
LinphoneXmlRpcArgNone);
}
linphone_xml_rpc_request_set_user_data(request, creator); linphone_xml_rpc_request_set_user_data(request, creator);
linphone_xml_rpc_request_cbs_set_response(linphone_xml_rpc_request_get_callbacks(request), _is_account_used_cb); linphone_xml_rpc_request_cbs_set_response(linphone_xml_rpc_request_get_callbacks(request), _is_account_used_cb);
linphone_xml_rpc_session_send_request(creator->xmlrpc_session, request); linphone_xml_rpc_session_send_request(creator->xmlrpc_session, request);
linphone_xml_rpc_request_unref(request); linphone_xml_rpc_request_unref(request);
ms_free(identity);
return LinphoneAccountCreatorOK; return LinphoneAccountCreatorOK;
} }
/****************** END OF CREATE ACCOUNT USED SECTION ************************/ /****************** END OF CREATE ACCOUNT USED SECTION ************************/
@ -716,3 +719,35 @@ LinphoneAccountCreatorStatus linphone_account_creator_activate_phone_number_link
return LinphoneAccountCreatorOK; return LinphoneAccountCreatorOK;
} }
/****************** END OF ACTIVE PHONE NUMBER LINK **************************/ /****************** END OF ACTIVE PHONE NUMBER LINK **************************/
/****************** START OF ACTIVE PHONE NUMBER LINK **************************/
static void _recover_phone_account_cb(LinphoneXmlRpcRequest *request) {
LinphoneAccountCreator *creator = (LinphoneAccountCreator *)linphone_xml_rpc_request_get_user_data(request);
if (creator->callbacks->recover_phone_account != NULL) {
LinphoneAccountCreatorStatus status = LinphoneAccountCreatorReqFailed;
if (linphone_xml_rpc_request_get_status(request) == LinphoneXmlRpcStatusOk) {
const char* resp = linphone_xml_rpc_request_get_string_response(request);
status = (strstr(resp, "ERROR_") == resp) ? LinphoneAccountCreatorReqFailed : LinphoneAccountCreatorOK;
}
creator->callbacks->recover_phone_account(creator, status);
}
}
LinphoneAccountCreatorStatus linphone_account_creator_recover_phone_account(LinphoneAccountCreator *creator) {
LinphoneXmlRpcRequest *request;
if (!creator->phone_number) {
if (creator->callbacks->recover_phone_account != NULL) {
creator->callbacks->recover_phone_account(creator, LinphoneAccountCreatorReqFailed);
}
return LinphoneAccountCreatorReqFailed;
}
request = linphone_xml_rpc_request_new_with_args("recover_phone_account", LinphoneXmlRpcArgString,
LinphoneXmlRpcArgString, creator->phone_number,
LinphoneXmlRpcArgNone);
linphone_xml_rpc_request_set_user_data(request, creator);
linphone_xml_rpc_request_cbs_set_response(linphone_xml_rpc_request_get_callbacks(request), _recover_phone_account_cb);
linphone_xml_rpc_session_send_request(creator->xmlrpc_session, request);
linphone_xml_rpc_request_unref(request);
return LinphoneAccountCreatorOK;
}
/****************** END OF ACTIVE PHONE NUMBER LINK **************************/

View file

@ -42,6 +42,7 @@ typedef enum _LinphoneAccountCreatorStatus {
LinphoneAccountCreatorAccountNotCreated, LinphoneAccountCreatorAccountNotCreated,
LinphoneAccountCreatorAccountExist, LinphoneAccountCreatorAccountExist,
LinphoneAccountCreatorAccountExistWithAlias,
LinphoneAccountCreatorAccountNotExist, LinphoneAccountCreatorAccountNotExist,
LinphoneAccountCreatorAccountActivated, LinphoneAccountCreatorAccountActivated,
@ -265,6 +266,8 @@ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_is_account
**/ **/
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_create_account(LinphoneAccountCreator *creator); LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_create_account(LinphoneAccountCreator *creator);
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_recover_account(LinphoneAccountCreator *creator);
/** /**
* Send an XML-RPC request to activate a Linphone account. * Send an XML-RPC request to activate a Linphone account.
* @param[in] creator LinphoneAccountCreator object * @param[in] creator LinphoneAccountCreator object
@ -293,6 +296,8 @@ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_link_phone
**/ **/
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_activate_phone_number_link(LinphoneAccountCreator *creator); LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_activate_phone_number_link(LinphoneAccountCreator *creator);
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_recover_phone_account(LinphoneAccountCreator *creator);
/** /**
* Configure an account (create a proxy config and authentication info for it). * Configure an account (create a proxy config and authentication info for it).
* @param[in] creator LinphoneAccountCreator object * @param[in] creator LinphoneAccountCreator object
@ -411,6 +416,9 @@ LINPHONE_PUBLIC LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_g
**/ **/
LINPHONE_PUBLIC void linphone_account_creator_cbs_set_is_account_activated(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb); LINPHONE_PUBLIC void linphone_account_creator_cbs_set_is_account_activated(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb);
LINPHONE_PUBLIC void linphone_account_creator_cbs_set_recover_phone_account(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb);
LINPHONE_PUBLIC LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_get_recover_phone_account(const LinphoneAccountCreatorCbs *cbs);
/** /**
* @} * @}
*/ */

View file

@ -1287,6 +1287,7 @@ struct _LinphoneAccountCreatorCbs {
LinphoneAccountCreatorCbsStatusCb link_phone_number_with_account; LinphoneAccountCreatorCbsStatusCb link_phone_number_with_account;
LinphoneAccountCreatorCbsStatusCb activate_phone_number_link; LinphoneAccountCreatorCbsStatusCb activate_phone_number_link;
LinphoneAccountCreatorCbsStatusCb recover_phone_account;
}; };
BELLE_SIP_DECLARE_VPTR(LinphoneAccountCreatorCbs); BELLE_SIP_DECLARE_VPTR(LinphoneAccountCreatorCbs);