asn.1 소스 파일 (예 : test.asn1)에서 하나의 구조를 정의하는 동안 문제가 발생했습니다.하나의 asn.1 파일에서 구조 정의의 두 버전을 지원하는 방법
그것은 프로토콜 버전 1에 대해 다음과 같이 정의되어있다 :
PolicyControlDiagnostics ::= ENUMERATED
{
policy (1),
policyControl (2),
policyControlResumed (3)
}
그런 다음 우리는 프로토콜 버전 2에서 버전 2를 지원하기위한 요구 사항이 일부 필드는 변경되었지만 구조 이름은 변경되지 않고 유지합니다. 예를 들어 변수 정책이
mytestpolicy
으로 변경되고 policyControl이
mytestpolicyControl
으로 변경되었습니다. 한편 구조 이름
PolicyControlDiagnostics
이었다 동일한 버전 1과 버전 2에서
PolicyControlDiagnostics ::= ENUMERATED
{
mytestpolicy (1),
mytestpolicyControl (2),
policyControlResumed (3)
}
내가 사용 SNAC를 디코딩, BER 인코딩 C 루틴을 생산하려고, 그것은 불평 모두 :
file "test.asn1", line 632: ERROR - type PolicyControlDiagnostics is multiply defined.
당신은 할 수 이 오류를 해결하는 데 도움을 주시겠습니까? 감사.
폴 감사합니다! 정말 내 질문에 대답했다. 이제 서로 다른 사양을 위해 두 개의 ASN.1 모듈을 정의했습니다. 버전 6의 경우 R6.asn1, 버전 8의 경우 R8.asn1이라고 말하십시오. 그런 다음 BER 인 코드/디코드 용 R6.c 및 R6.h가 컴파일러 snacc를 사용하여 생성되었습니다. R8과 동일합니다. 두 개의 ASN.1 모듈이 시스템과 통합 된 경우 상호 운용성 문제가 있습니다. 시스템이 2 개의 버전 R6과 R8을 지원하기 때문에. 그러나 한 번에 하나의 버전 만 사용되었습니다. 그렇다면 어떤 인코딩/디코드 버전을 사용해야합니까? 이 문제를 어떻게 처리해야할지 모르겠다. 의견이 있으십니까? 감사합니다. – user2641335
프로토콜이 잘 설계된 경우 ASN.1 확장 성을 활용하여 두 가지 사양 중 하나를 사용하여 메시지를 디코딩 할 수 있습니다. 그러나 스펙이 이전 버전과의 호환성을 염두에두고 잘 설계되지 않은 경우, 최선의 제안은 하나의 디코딩으로 해보는 것이고, 실패하면 다른 디코딩으로 해독을 시도하는 것입니다. –