// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package conn

import "v.io/v23/security"

// These messages are constructed so as to avoid embedding a component/method name
// and are thus more suitable for inclusion in other verrors.
// This practice of omitting {1}{2} should be used throughout the flow implementations
// since all of their errors are intended to be used as arguments to higher level errors.
// TODO(suharshs,toddw): Allow skipping of {1}{2} in vdl generated errors.
error (
  MissingSetupOption(option string) {
    "en": "missing required setup option{:option}."}
  UnexpectedMsg(typ string) {"en": "unexpected message type{:typ}."}
  ConnectionClosed() {"en": "connection closed."}
  ConnClosedRemotely(msg string) {"en": "connection closed remotely{:msg}."}
  FlowClosedRemotely() {"en": "flow closed remotely."}
  Send(typ, dest string, err error) {"en": "failure sending {typ} message to {dest}{:err}."}
  Recv(src string, err error) {"en": "error reading from {src}{:err}"}
  CounterOverflow() {"en": "A remote process has sent more data than allowed."}
  BlessingsFlowClosed(err error) {"en": "The blessings flow was closed with error{:err}."}
  InvalidChannelBinding() {"en": "The channel binding was invalid."}
  NoPublicKey() {"en": "No public key was received by the remote end."}
  DialingNonServer() {"en": "You are attempting to dial on a connection with no remote server."}
  AcceptorBlessingsMissing() {"en": "The acceptor did not send blessings."}
  BlessingsNotBound() {"en": "blessings not bound to connection remote public key"}
  NoBlessingsForPeer(peerNames []string, rejected []security.RejectedBlessing, err error) {"en": "no blessings tagged for peer {peerNames}, rejected:{rejected}{:err}"}
  InvalidPeerFlow() {"en": "peer has chosen flow id from local domain."}
  ChannelTimeout() {"en": "the channel has become unresponsive."}
  CannotDecryptBlessings(err error) {"en": "cannot decrypt the encrypted blessings sent by peer{:err}"}
  CannotDecryptDischarges(err error) {"en": "cannot decrypt the encrypted discharges sent by peer{:err}"}
  CannotEncryptBlessings(peers []security.BlessingPattern, err error) {"en": "cannot encyrpt blessings for peer {peers}{:err}"}
  CannotEncryptDischarges(peers []security.BlessingPattern, err error) {"en": "cannot encrypt discharges for peers {peers}{:err}"}
  NoCrypter() {"en": "no blessings-based crypter available"}
  NoPrivateKey() {"en": "no blessings private key available for decryption"}
)
