-- FTPProtError.mesa, Edit: HGM October 13, 1980  7:49 PM  

-- Copyright  Xerox Corporation 1979, 1980

DIRECTORY
  FTPDefs,
  FTPPrivateDefs;

FTPProtError: PROGRAM IMPORTS FTPPrivateDefs EXPORTS FTPPrivateDefs SHARES FTPDefs
  =
  BEGIN OPEN FTPDefs, FTPPrivateDefs;



  SignalToCode: PUBLIC PROCEDURE [ftpError: FtpError] RETURNS [code: Byte] =
    BEGIN
    code ←
      SELECT ftpError FROM
        -- communication errors
        -- IN CommunicationError	=> codeUnidentifiedPermanentError,
        -- credential errors

        credentialsMissing => codeMissingUserName,
        noSuchPrimaryUser => codeIllegalUserName,
        noSuchSecondaryUser => codeIllegalConnectName,
        incorrectPrimaryPassword => codeBadUserPassword,
        incorrectSecondaryPassword => codeBadConnectPassword,
        requestedAccessDenied => codeRequestedAccessDenied,
        -- file errors

        illegalFilename => codeIllegalServerFilename,
        noSuchFile => codeFileNotFound,
        fileAlreadyExists => codeFileAlreadyExists,
        fileBusy => codeFileBusy,
        noRoomForFile => codeStorageExhausted,
        fileDataError => codeFileDataError,
        -- dump errors

        IN DumpError => codeFileDataError,
        -- mail errors

        noValidRecipients => codeNoValidMailbox,
        noSuchMailbox => codeIllegalMailbox,
        -- client errors
        -- IN ClientError		=> codeUnidentifiedPermanentError,
        -- protocol errors

        IN UndefinedFunctionError => codeCommandUndefined,
        IN ProtocolSequenceError => codeCommandIllegal,
        IN IllegalParameterListError => codeMalformedPropertyList,
        illegalFileType => codeIllegalType,
        -- IN ProtocolError		=> codeUnidentifiedPermanentError,
        -- internal errors
        -- IN InternalError		=> codeUnidentifiedPermanentError,
        -- unidentified errors

        unidentifiedTransientError => codeUnidentifiedTransientError,
        ENDCASE => codeUnidentifiedPermanentError;
    END;

  CodeToSignal: PUBLIC PROCEDURE [code: Byte] RETURNS [ftpError: FtpError] =
    BEGIN
    ftpError ←
      SELECT code FROM
        0 => unidentifiedError,
        codeCommandUndefined => functionNotImplemented,
        codeMissingUserName => credentialsMissing,
        codeCommandIllegal => illegalProtocolSequence,
        codeMalformedPropertyList => illegalProtocolParameterList,
        IN [codeIllegalServerFilename..codeIllegalVersion] => illegalFilename,
        codeIllegalType => illegalFileType,
        IN [codeIllegalByteSize..codeIllegalEndOfLineConvention] =>
          illegalFileAttribute,
        codeIllegalUserName => noSuchPrimaryUser,
        codeBadUserPassword => incorrectPrimaryPassword,
        codeBadUserAccount => unidentifiedPermanentError,
        codeIllegalConnectName => noSuchSecondaryUser,
        codeBadConnectPassword => incorrectSecondaryPassword,
        IN [codeIllegalCreationDate..codeIllegalAuthor] => illegalFileAttribute,
        codeIllegalDevice => illegalFilename,
        codeNoValidMailbox => noValidRecipients,
        codeIllegalMailbox => noSuchMailbox,
        codeFileNotFound => noSuchFile,
        codeRequestedAccessDenied => requestedAccessDenied,
        codeTransferParametersInconsistent => illegalProtocolSequence,
        codeFileDataError => fileDataError,
        codeStorageExhausted => noRoomForFile,
        -- codeDontSendFile,
        -- codeStoreNotCompleted	=> unidentifiedError,

        codeUnidentifiedTransientError => unidentifiedTransientError,
        codeUnidentifiedPermanentError => unidentifiedPermanentError,
        codeFileBusy => fileBusy,
        codeFileAlreadyExists => fileAlreadyExists,
        ENDCASE => unrecognizedProtocolErrorCode;
    END;

  RecipientErrorToExceptionCode: PUBLIC PROCEDURE [recipientError: RecipientError]
    RETURNS [exceptionCode: Byte] =
    BEGIN
    exceptionCode ←
      SELECT recipientError FROM
        noSuchMailbox => excpCannotLocateMailbox,
        noForwardingProvided => excpNoForwardingProvided,
        unspecifiedTransientError => excpTransientError,
        unspecifiedPermanentError => excpPermanentError,
        ENDCASE => excpUnspecifiedFailure;
    END;

  ExceptionCodeToRecipientError: PUBLIC PROCEDURE [exceptionCode: Byte]
    RETURNS [recipientError: RecipientError] =
    BEGIN
    IF exceptionCode ~IN [excpMinimum..excpMaximum] THEN
      Abort[unrecognizedMailboxExceptionErrorCode];
    recipientError ←
      SELECT exceptionCode FROM
        -- excpUnspecifiedFailure	=> unspecifiedError,

        excpCannotLocateMailbox => noSuchMailbox,
        excpNoForwardingProvided => noForwardingProvided,
        excpTransientError => unspecifiedTransientError,
        excpPermanentError => unspecifiedPermanentError,
        ENDCASE => unspecifiedError;
    END;

  END..  -- FTPProtError