{  NLT$CC_PROTOCOL_DATA_UNIT }

CONST
  nlc$cc_max_user_data_pad = 0ffffffffffffff(16),
  nlc$cc_max_user_data_pad_size = 7;

TYPE

{  NLT$CC_PROTOCOL_HEADER defines the fixed size portion of the Channel
{  Connection PDU header (i.e., does not include the variable sized user
{  data pad.

  nlt$cc_protocol_header = record
    kind: nlt$cc_pdu_kind,
    pad_to_32_bit_offset: 0 .. 0ffffff(16),
    length: nlt$cc_pdu_size,
    CASE nlt$cc_pdu_kind OF
    = nlc$cc_connect_request =
      connect_request: nlt$cc_connect_request,

    = nlc$cc_connect_confirm =
      connect_confirm: nlt$cc_connect_confirm,

    = nlc$cc_disconnect_request =
      disconnect_request: nlt$cc_disconnect_request,

    = nlc$cc_disconnect_confirm =
      disconnect_confirm: nlt$cc_disconnect_confirm,

    = nlc$cc_credit_allocation =
      credit_allocation: nlt$cc_credit_allocation,

    = nlc$cc_data =
      data: nlt$cc_data,

    = nlc$cc_expedited_data =
      expedited_data: nlt$cc_expedited_data,

    = nlc$cc_global_window =
      global_window: nlt$cc_global_window,
    CASEND,
  recend,

{  NLT$CC_PROTOCOL_HEADER_WITH_PAD defines the Channel Connection PDU header
{  including up to seven bytes of user data pad.

  nlt$cc_protocol_header_with_pad = record
    kind: nlt$cc_pdu_kind,
    pad_to_32_bit_offset: 0 .. 0ffffff(16),
    length: nlt$cc_pdu_size,
    CASE nlt$cc_pdu_kind OF
    = nlc$cc_connect_request =
    connect_request: nlt$cc_connect_request,
    connect_request_user_data_pad: 0 .. nlc$cc_max_user_data_pad,

    = nlc$cc_connect_confirm =
    connect_confirm: nlt$cc_connect_confirm,
    connect_confirm_user_data_pad: 0 .. nlc$cc_max_user_data_pad,

    = nlc$cc_disconnect_request =
    disconnect_request: nlt$cc_disconnect_request,
    disconnect_req_user_data_pad: 0 .. nlc$cc_max_user_data_pad,

    = nlc$cc_disconnect_confirm =
    disconnect_confirm: nlt$cc_disconnect_confirm,

    = nlc$cc_credit_allocation =
    credit_allocation: nlt$cc_credit_allocation,

    = nlc$cc_data =
    data: nlt$cc_data,
    data_request_user_data_pad: 0 .. nlc$cc_max_user_data_pad,

    = nlc$cc_expedited_data =
    expedited_data: nlt$cc_expedited_data,
    expedited_request_user_data_pad: 0 .. nlc$cc_max_user_data_pad,

    = nlc$cc_global_window =
    global_window: nlt$cc_global_window,
    CASEND,
  recend;

TYPE
  nlt$cc_connect_request = record
    destination_address: nlt$cc_address,
    initial_credit_allocation: nlt$cc_credits,
    source_reference: nlt$cl_reference_number,
    user_data_pad_size: nlt$cc_user_data_pad_size,
    header_pad: 0 .. 0ffff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_connect_confirm = record
    destination_reference: nlt$cl_reference_number,
    source_reference: nlt$cl_reference_number,
    initial_credit_allocation: 0 .. 0ff(16),
    user_data_pad_size: nlt$cc_user_data_pad_size,
    header_pad: 0 .. 0ff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_disconnect_request = record
    destination_reference: nlt$cl_reference_number,
    source_reference: nlt$cl_reference_number,
    reason: nlt$cc_disconnect_reason,
    user_data_pad_size: nlt$cc_user_data_pad_size,
    header_pad: 0 .. 0ff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_disconnect_confirm = record
    destination_reference: nlt$cl_reference_number,
    source_reference: nlt$cl_reference_number,
    header_pad: 0 .. 0ffffff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_credit_allocation = record
    destination_reference: nlt$cl_reference_number,
    credits_granted: nlt$cc_credits,
    header_pad: 0 .. 0ffffffff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_data = record
    destination_reference: nlt$cl_reference_number,
    credits_granted: nlt$cc_credits,
    user_data_pad_size: nlt$cc_user_data_pad_size,
    header_pad: 0 .. 0ffffff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_expedited_data = record
    destination_reference: nlt$cl_reference_number,
    user_data_pad_size: nlt$cc_user_data_pad_size,
    header_pad: 0 .. 0ffffffff(16),
    class: nlt$cc_connection_class,
  recend,

  nlt$cc_global_window = record
    window_open: boolean,
    header_pad: 0 .. 0ffffffffffff(16),
    class: nlt$cc_connection_class,
  recend;

*copyc nlt$cc_address
*copyc nlt$cc_connection_class
*copyc nlt$cc_credits
*copyc nlt$cc_disconnect_reason
*copyc nlt$cc_pdu_kind
*copyc nlt$cc_pdu_size
*copyc nlt$cc_user_data_pad_size
*copyc nlt$cl_reference_number
