gcm: redesign for receive all error types