///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2017 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
///////////////////////////////////////////////////////////////////////////////
//  File:               IoT_FT_Framework_Definitions.ttcn
//  Description:
//  Rev:                R1A
//  Prodnr:             LPA 108 661
//  Updated:            2017-09-01
//  Contact:            http://ttcn.ericsson.se
///////////////////////////////////////////////////////////////////////////////
module IoT_FT_Framework_Definitions
{
    import from IFW_Common all;
	import from IFW_CoAP_Peer_Definitions all;
	import from IFW_HTTP_Client_Definitions all;
	import from IFW_MQTT_Client_Definitions all;

	type component IFW_MAIN_CT
	extends IFW_BASE_CT
	{
		var IFW_COAP_CT_List coapPeers := {};
		var IFW_HTTP_Client_CT_List httpClients := {};
		var IFW_MQTT_Client_CT_List mqttClients := {};
		
		var integer mid := 0;
	}
	
	type record of IFW_COAP_CT IFW_COAP_CT_List;
	type record of IFW_HTTP_Client_CT IFW_HTTP_Client_CT_List;
	type record of IFW_MQTT_Client_CT IFW_MQTT_Client_CT_List;
	
	type enumerated IFW_ComponentTypes
	{
	  COAP_PEER,
	  HTTP_CLIENT,
	  MQTT_CLIENT
	}
}
