| /////////////////////////////////////////////////////////////////////////////// |
| // Copyright (c) 2000-2019 Ericsson Telecom AB |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v2.0 |
| // which accompanies this distribution, and is available at |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html |
| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // File: STUN_Demo.ttcn |
| // Description: Demo for STUN Protocol module |
| // Rev: <RnXnn> |
| // Prodnr: CNL 113 644 |
| // Updated: 2009-05-21 |
| // Contact: http://ttcn.ericsson.se |
| // Reference: RFC 3489 |
| /////////////////////////////////////////////// |
| module STUN_Demo { |
| |
| import from STUN_Types all; |
| import from STUN_Functions all; |
| |
| modulepar charstring tsp_STUN_ip_address := "127.0.0.1" |
| |
| type port STUN_PT message { |
| inout octetstring; |
| } |
| with |
| { extension "internal"} |
| |
| type component STUN_CT { |
| port STUN_PT STUN_PCO |
| var octetstring v_temp_msg; |
| var PDU_STUN v_msg_lasd_decoded, v_msg_to_send; |
| } |
| |
| function f_STUN_sendMsg(PDU_STUN pl_msg, in octetstring pl_password := ''O) runs on STUN_CT { |
| v_temp_msg := f_STUN_Enc(pl_msg,pl_password); |
| log("f_STUN_sendMsg"); |
| STUN_PCO.send(v_temp_msg); |
| } |
| |
| function f_STUN_Demo_Orig_behavior() runs on STUN_CT |
| { |
| f_STUN_createMsgHeader(v_msg_to_send, Binding_Request); |
| f_STUN_appendResponseAddress(v_msg_to_send, {IP4, 1234,f_STUN_IP2oct("127.0.0.1")}); |
| f_STUN_appendChangeRequest(v_msg_to_send, NO_CHANGE); |
| f_STUN_appendUsername(v_msg_to_send, "demo"); |
| //f_STUN_appendMessageIntegrity(v_msg_to_send); |
| |
| f_STUN_sendMsg(v_msg_to_send, '1234'O); |
| as_STUN_msgHandler(); |
| log("v_msg_lasd_decoded", v_msg_lasd_decoded); |
| |
| setverdict(pass); |
| self.stop; |
| } |
| |
| function f_STUN_Demo_Term_behavior() runs on STUN_CT |
| { |
| as_STUN_msgHandler(); |
| log("v_msg_lasd_decoded", v_msg_lasd_decoded); |
| f_STUN_createMsgHeader(v_msg_to_send, Binding_Response, v_msg_lasd_decoded.header.trans_id); |
| f_STUN_appendMappedAddress(v_msg_to_send, {IP4, 1234,f_STUN_IP2oct("127.0.0.1")}); |
| f_STUN_appendSourceAddress(v_msg_to_send, {IP4, 1234,f_STUN_IP2oct("127.0.0.1")}); |
| f_STUN_appendChangedAddress(v_msg_to_send, {IP4, 1234,f_STUN_IP2oct("127.0.0.1")}); |
| f_STUN_appendMessageIntegrity(v_msg_to_send); |
| f_STUN_sendMsg(v_msg_to_send, '1234'O); |
| setverdict(pass); |
| self.stop; |
| } |
| |
| altstep as_STUN_msgHandler() runs on STUN_CT { |
| |
| |
| [] STUN_PCO.receive(octetstring:?) -> value v_temp_msg |
| { |
| if (f_STUN_checkMessageIntegrity(v_temp_msg,'1234'O)) { |
| log("Good HMAC"); |
| } else { |
| log("Bad HMAC"); |
| } |
| |
| v_msg_lasd_decoded := f_STUN_Dec(v_temp_msg); |
| } |
| } |
| |
| testcase t_STUN_demo() runs on STUN_CT { |
| |
| var STUN_CT c_STUN_orig; |
| var STUN_CT c_STUN_term; |
| |
| c_STUN_orig := STUN_CT.create; |
| c_STUN_term := STUN_CT.create; |
| |
| connect(c_STUN_orig:STUN_PCO,c_STUN_term:STUN_PCO); |
| |
| c_STUN_term.start(f_STUN_Demo_Term_behavior()); |
| c_STUN_orig.start(f_STUN_Demo_Orig_behavior()); |
| |
| all component.done |
| disconnect(c_STUN_orig:STUN_PCO,c_STUN_term:STUN_PCO); |
| |
| mtc.kill; |
| } |
| control { |
| execute(t_STUN_demo()); |
| } |
| } |