///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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 internal"} //!!ethlel

    // 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
//----------------------------
/*
ethlel

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
