///////////////////////////////////////////////////////////////////////////////
//
// 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:               IFW_HTTP_Client_Definitions.ttcn
//  Description:
//  Rev:                R1A
//  Prodnr:             LPA 108 661
//  Updated:            2017-09-01
//  Contact:            http://ttcn.ericsson.se
///////////////////////////////////////////////////////////////////////////////
module IFW_HTTP_Client_Definitions
{

	import from HTTPmsg_Types all;
	import from IPL4asp_PortType all;
	import from IFW_Common all;
	
	type component IFW_HTTP_Client_CT extends IFW_BASE_CT
	{
	    var HttpClientContext ctx := c_HttpClientContext_empty; 
	    
		var HTTPMessage msgToSend := c_HTTPMessage_empty;
		var HTTPMessage lastReceived := c_HTTPMessage_empty;
	  
    	port IPL4asp_PT IPL4_PCO;
	}

	type record HttpClientContext
	{
		integer connId,
		charstring remoteHost,
		integer remotePort,
		charstring localHost,
		integer localPort,
		HeaderLines requestHeaders
	}	
	with { extension "done" }

	const HttpClientContext c_HttpClientContext_empty :=
	{
		connId := -1,
		remoteHost := "",
		remotePort := -1,
		localHost := "",
		localPort := -1,
		requestHeaders := {}
	}
	
	const HTTPMessage c_HTTPMessage_empty :=
	{
	  erronous_msg :=
	  {
	    client_id := omit,
	    msg := ""
	  }
	}
}
