pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36652?usp=email )


Change subject: asterisk/AMI_Functions: improvements to implement PJSIPRegister
......................................................................

asterisk/AMI_Functions: improvements to implement PJSIPRegister

Change-Id: Ibc4ff6eaad84f67d33c1211dc5e39294ce1c8fac
---
M asterisk/AMI_Functions.ttcn
1 file changed, 131 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/52/36652/1

diff --git a/asterisk/AMI_Functions.ttcn b/asterisk/AMI_Functions.ttcn
index d5139f5..72420e1 100644
--- a/asterisk/AMI_Functions.ttcn
+++ b/asterisk/AMI_Functions.ttcn
@@ -25,10 +25,14 @@
 }

 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 @@
 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_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_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));
+}
+
 }

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36652?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ibc4ff6eaad84f67d33c1211dc5e39294ce1c8fac
Gerrit-Change-Number: 36652
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to