asterisk/AMI_Functions: improvements to implement PJSIPRegister
Change-Id: Ibc4ff6eaad84f67d33c1211dc5e39294ce1c8fac
This commit is contained in:
parent
f0862ed483
commit
4362dbd088
|
@ -25,10 +25,14 @@ modulepar {
|
|||
}
|
||||
|
||||
const charstring AMI_FIELD_ACTION := "Action";
|
||||
const charstring AMI_FIELD_ACTION_ID := "ActionId";
|
||||
const charstring AMI_FIELD_USERNAME := "Username";
|
||||
const charstring AMI_FIELD_SECRET := "Secret";
|
||||
const charstring AMI_FIELD_RESPONSE := "Response";
|
||||
|
||||
/* Extensions: */
|
||||
const charstring AMI_FIELD_REGISTRATION := "Registration";
|
||||
|
||||
type record AMI_Field {
|
||||
charstring key,
|
||||
charstring val
|
||||
|
@ -69,28 +73,46 @@ tr_AMI_Field(template (present) charstring key := ?,
|
|||
template (value) AMI_Field
|
||||
ts_AMI_Field_Action(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_ACTION, val);
|
||||
template (value) AMI_Field
|
||||
ts_AMI_Field_ActionId(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_ACTION_ID, val);
|
||||
template (value) AMI_Field
|
||||
ts_AMI_Field_Username(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_USERNAME, val);
|
||||
template (value) AMI_Field
|
||||
ts_AMI_Field_Secret(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_SECRET, val);
|
||||
/* Extensions: */
|
||||
template (value) AMI_Field
|
||||
ts_AMI_Field_Registration(template (value) charstring val) := ts_AMI_Field(AMI_FIELD_REGISTRATION, val);
|
||||
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_Action(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_ACTION, val);
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_ActionId(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_ACTION_ID, val);
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_Username(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_USERNAME, val);
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_Secret(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_SECRET, val);
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_Response(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_RESPONSE, val);
|
||||
/* Extensions: */
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_Registration(template (present) charstring val := ?) := tr_AMI_Field(AMI_FIELD_REGISTRATION, val);
|
||||
|
||||
|
||||
template (present) AMI_Field
|
||||
tr_AMI_Field_ResponseSuccess := tr_AMI_Field(AMI_FIELD_RESPONSE, "Success");
|
||||
|
||||
|
||||
/*
|
||||
/***********************
|
||||
* Message Templates:
|
||||
***********************/
|
||||
|
||||
/*
|
||||
* ACTIONS
|
||||
*/
|
||||
|
||||
/* Action: Login
|
||||
* Username: <value>
|
||||
* Secret: <value>
|
||||
*/
|
||||
template (value) AMI_Msg
|
||||
ts_AMI_Action_Login(charstring username, charstring secret) := {
|
||||
ts_AMI_Field_Action("Login"),
|
||||
|
@ -106,15 +128,101 @@ tr_AMI_Action_Login(template(present) charstring username := ?,
|
|||
tr_AMI_Field_Secret(secret)
|
||||
);
|
||||
|
||||
/* Action: PJSIPRegister
|
||||
* ActionID: <value>
|
||||
* Registration: volte_ims
|
||||
*/
|
||||
template (value) AMI_Msg
|
||||
ts_AMI_Action_PJSIPRegister(template (value) charstring registration := "volte_ims",
|
||||
template (value) charstring action_id := "0001") := {
|
||||
ts_AMI_Field_Action("PJSIPRegister"),
|
||||
ts_AMI_Field_ActionId(action_id),
|
||||
ts_AMI_Field_Registration(registration)
|
||||
};
|
||||
template (present) AMI_Msg
|
||||
tr_AMI_Action_PJSIPRegister(template (present) charstring registration := ?,
|
||||
template (present) charstring action_id := ?) := {
|
||||
tr_AMI_Field_Action("PJSIPRegister"),
|
||||
tr_AMI_Field_ActionId(action_id),
|
||||
tr_AMI_Field_Registration(registration)
|
||||
};
|
||||
|
||||
/*
|
||||
* RESPONSES
|
||||
*/
|
||||
|
||||
/* Response: Success
|
||||
*/
|
||||
template (present) AMI_Msg
|
||||
tr_AMI_Response_Success := superset(
|
||||
tr_AMI_Field_ResponseSuccess
|
||||
);
|
||||
|
||||
/* Response: Success
|
||||
* ActionId: <value>
|
||||
*/
|
||||
template (present) AMI_Msg
|
||||
tr_AMI_Response_Success_ActionId(template (present) charstring action_id := ?) := superset(
|
||||
tr_AMI_Field_ResponseSuccess,
|
||||
tr_AMI_Field_ActionId(action_id)
|
||||
);
|
||||
|
||||
/*
|
||||
* Functions:
|
||||
*/
|
||||
|
||||
/* Generate a random "ActionId" value: */
|
||||
function f_gen_action_id() return charstring {
|
||||
return hex2str(f_rnd_hexstring(16));
|
||||
}
|
||||
|
||||
function f_ami_msg_find(AMI_Msg msg,
|
||||
template (present) charstring key := ?)
|
||||
return template (omit) AMI_Field {
|
||||
var integer i;
|
||||
|
||||
for (i := 0; i < lengthof(msg); i := i + 1) {
|
||||
if (not ispresent(msg[i])) {
|
||||
continue;
|
||||
}
|
||||
if (match(msg[i].key, key)) {
|
||||
return msg[i];
|
||||
}
|
||||
}
|
||||
return omit;
|
||||
}
|
||||
|
||||
function f_ami_msg_find_or_fail(AMI_Msg msg,
|
||||
template (present) charstring key := ?)
|
||||
return AMI_Field {
|
||||
var template (omit) AMI_Field field;
|
||||
field := f_ami_msg_find(msg, key);
|
||||
if (istemplatekind(field, "omit")) {
|
||||
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
|
||||
log2str("Key ", key, " not found in ", msg));
|
||||
}
|
||||
return valueof(field);
|
||||
}
|
||||
|
||||
function f_ami_msg_get_value(AMI_Msg msg,
|
||||
template (present) charstring key := ?)
|
||||
return template (omit) charstring {
|
||||
var template (omit) AMI_Field field;
|
||||
field := f_ami_msg_find(msg, key);
|
||||
if (istemplatekind(field, "omit")) {
|
||||
return omit;
|
||||
}
|
||||
return field.val;
|
||||
}
|
||||
|
||||
function f_ami_msg_get_value_or_fail(AMI_Msg msg,
|
||||
template (present) charstring key := ?)
|
||||
return template charstring {
|
||||
var AMI_Field field;
|
||||
field := f_ami_msg_find_or_fail(msg, key);
|
||||
return field.val;
|
||||
}
|
||||
|
||||
private function f_ami_wait_for_prompt_str(TELNETasp_PT pt, charstring log_label := "(?)")
|
||||
return charstring {
|
||||
var charstring rx, buf := "";
|
||||
|
@ -172,11 +280,23 @@ function f_ami_transceive_match(TELNETasp_PT pt,
|
|||
|
||||
function f_ami_transceive_match_response_success(TELNETasp_PT pt,
|
||||
template (value) AMI_Msg tx_msg) {
|
||||
f_ami_transceive_match(pt, tx_msg, tr_AMI_Response_Success);
|
||||
var template (present) AMI_Msg exp_resp;
|
||||
var template (omit) charstring action_id := f_ami_msg_get_value(valueof(tx_msg), AMI_FIELD_ACTION_ID);
|
||||
if (isvalue(action_id)) {
|
||||
exp_resp := tr_AMI_Response_Success_ActionId(action_id);
|
||||
} else {
|
||||
exp_resp := tr_AMI_Response_Success;
|
||||
}
|
||||
f_ami_transceive_match(pt, tx_msg, exp_resp);
|
||||
}
|
||||
|
||||
function f_ami_action_login(TELNETasp_PT pt, charstring username, charstring secret) {
|
||||
f_ami_transceive_match_response_success(pt, ts_AMI_Action_Login(username, secret));
|
||||
}
|
||||
|
||||
function f_ami_action_PJSIPRegister(TELNETasp_PT pt, charstring register) {
|
||||
var charstring reg_action_id := f_gen_action_id();
|
||||
f_ami_transceive_match_response_success(pt, ts_AMI_Action_PJSIPRegister(register, reg_action_id));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue