///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright Test Competence Center (TCC) ETH 2008                           //
//                                                                           //
// The copyright to the computer  program(s) herein  is the property of TCC. //
// The program(s) may be used and/or copied only with the written permission //
// of TCC or in accordance with  the terms and conditions  stipulated in the //
// agreement/contract under which the program(s) have been supplied          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////
//
//  File:         MTP3asp_PortType.ttcn
//  Reference:    ITU-T Recommendation Q.704, RFC3332 
//  Rev:          R11A01
//  Prodnr:       CNL 113 337
//  Updated:      2008-02-07
//  Contact:      http://ttcn.ericsson.se

module MTP3asp_PortType
{

  import from MTP3asp_Types all;
// *************************************************************************
// *  MTP3 port type definitions                                           *
// *************************************************************************

    // MTP3 port type used by the component up to the MTP3 SAP
    // (eg. any component connected to the MTP3 test port)
    type port MTP3asp_PT message
     {
      in  ASP_MTP3_TRANSFERind;
      in  ASP_MTP3_PAUSE;
      in  ASP_MTP3_RESUME;
      in  ASP_MTP3_STATUS;
      out ASP_MTP3_TRANSFERreq;
     } with {extension "provider"}

    // MTP3 port type used by the component up to the MTP3 SAP
    // (e.g. the distribution component)
    type port MTP3asp_SP_PT message
     {
      in  ASP_MTP3_TRANSFERreq;
      out ASP_MTP3_TRANSFERind;
     }
      with {extension "internal"}

//Connecting functions
//----------------------------
external function f_MTP3_SEA_connect
 ( inout MTP3asp_PT  portRef, 
   in charstring  Hostname,
   in integer     Port,
   in charstring  EntityName,
   in boolean     Http //or MPH Port is provided  
 )return boolean;

external function f_MTP3_SEA_disconnect
 ( inout MTP3asp_PT  portRef
 )return boolean;

}//eof module
