Capítulo 9: Manejo de Errores

9.1 Modelo de Manejo de Errores

El manejo de errores de DTP sigue un modelo de tres fases "Detectar-Notificar-Recuperar":

  1. Detectar: Identificar condiciones anormales
  2. Notificar: Enviar información de error al par remoto o a la capa superior
  3. Recuperar: Tomar medidas de recuperación basadas en el tipo de error

9.2 Sistema de Códigos de Error

DTP define un código de error único para cada tipo de error, dividido en ocho rangos por módulo funcional:

Categoría de ErrorRango de CódigosEstrategia de Manejo
Errores de Procesamiento de Marco1xxxDescartar marco + notificar emisor + registrar
Errores de Cifrado2xxxDescartar marco + notificar emisor + puede activar renegociación de claves
Errores de Agreement3xxxDescartar Fragment + notificar emisor + puede activar renegociación
Errores de DAG4xxxRechazar Fragment + notificar emisor, o almacenar en caché y esperar
Errores de Sesión5xxxIntentar recuperación de sesión + si falla, cerrar y notificar capa superior
Errores de Reanudación6xxxPausar envío + notificar aplicación de capa superior
Errores de Versión7xxxEnviar notificación de incompatibilidad de versión + intentar degradación
Errores de Permisos8xxxRechazar operación + notificar solicitante

9.3 Referencia de Códigos de Error

Errores de Procesamiento de Marco (1xxx)

Código de ErrorNombreDescripción
1001FRAME_DESERIALIZATION_FAILEDFallo en la deserialización del marco
1002FRAME_INVALID_FORMATFormato de marco inválido

Errores de Cifrado (2xxx)

Código de ErrorNombreDescripción
2001DECRYPTION_FAILEDFallo en el descifrado del Payload
2002KEY_NOT_READYClave no lista (CAP no completado)

Errores de Agreement (3xxx)

Código de ErrorNombreDescripción
3001AGREEMENT_NOT_FOUNDAgreement no encontrado
3002AGREEMENT_EXPIREDAgreement expirado
3003AGREEMENT_NEGOTIATION_FAILEDFallo en la negociación del Agreement

Errores de DAG (4xxx)

Código de ErrorNombreDescripción
4001DAG_CYCLE_DETECTEDCiclo detectado en el DAG
4002DAG_DEPENDENCY_UNRESOLVEDDependencia DAG no resuelta

Errores de Sesión (5xxx)

Código de ErrorNombreDescripción
5001SESSION_NOT_FOUNDSesión no encontrada
5002SESSION_TIMEOUTTimeout de sesión
5003SESSION_RESTORE_FAILEDFallo en la restauración de sesión

Errores de Reanudación (6xxx)

Código de ErrorNombreDescripción
6001BUFFER_FULLBuffer lleno
6002RETRANSMISSION_TIMEOUTTimeout de retransmisión

Errores de Versión (7xxx)

Código de ErrorNombreDescripción
7001VERSION_INCOMPATIBLEVersión incompatible

Errores de Permisos (8xxx)

Código de ErrorNombreDescripción
8001PERMISSION_DENIEDPermiso denegado
8002OBSERVER_WRITE_DENIEDOperación de escritura del Observer denegada

9.4 Mecanismo de Notificación de Errores

Las notificaciones de error se transmiten mediante Control Frames, conteniendo la siguiente información:

CampoDescripción
errorCodeCódigo de error
errorMessageMensaje de descripción del error
relatedFrameIdID del marco que activó el error (opcional)
relatedAgreementIdID del Agreement relacionado (opcional)
detailsDetalles adicionales (opcional)

9.5 Escenarios Clave de Error

Fallo de Deserialización

Cuando un Logical_Frame recibido no puede ser correctamente deserializado:

  1. Descartar el marco
  2. Enviar una notificación de error FRAME_DESERIALIZATION_FAILED (1001) al emisor

Fallo de Descifrado

Cuando el payload de un Logical_Frame recibido no puede ser correctamente descifrado:

  1. Descartar el marco
  2. Enviar una notificación de error DECRYPTION_FAILED (2001) al emisor
  3. Si los fallos consecutivos exceden el umbral, activar la renegociación de claves CAP

Detección de Ciclo en DAG

Cuando las relaciones de dependencia declaradas de un Fragment formarían un ciclo en el DAG:

  1. Rechazar el Fragment
  2. Devolver un error DAG_CYCLE_DETECTED (4001)

Agreement Desconocido

Cuando un Fragment referencia un Agreement_ID que no existe en el receptor:

  1. Descartar el Fragment
  2. Devolver un error AGREEMENT_NOT_FOUND (3001)

Clave No Lista

Cuando se intenta enviar datos pero el intercambio de claves CAP aún no se ha completado:

  1. Rechazar el envío
  2. Devolver un error KEY_NOT_READY (2002) al llamador de capa superior

Buffer Lleno

Cuando la caché de Fragments no confirmados del emisor alcanza su límite de capacidad:

  1. Pausar el envío de nuevos Fragments
  2. Enviar una notificación BUFFER_FULL (6001) a la aplicación de capa superior

Violación de Privilegios del Observer

Cuando un Observer intenta iniciar una solicitud o modificar un acuerdo:

  1. Rechazar la operación
  2. Devolver un error OBSERVER_WRITE_DENIED (8002)