2009-09-30 7 views
5

Adobe의 documentation for the AMF format은 실제로 전체 AMF 메시지의 구조를 지정하지 않는 것 같습니다. 개별 데이터 형식의 형식 만 지정합니다. 나는 그 다섯 가지를 읽었고, 실제 AMF 메시지가 포함해야 할 내용이 완전히 누락되었거나 거기에 없다. 누구든지 실제 전체 메시지 구조에 대한 문서를 알고 있습니까?AMF 메시지 구조?

답변

9

사양을 "간결한"것으로 설명 할 수 있습니다.

AMF 인코딩은 "유형 표시 자"라고하는 바이트를 사용합니다. 정수의 유형 마커는 값 4입니다. 정수 데이터는이 태그 바로 뒤에 오며 1-4 바이트 길이입니다. 길이는 정수 유형이 "압축"되어 0-127 값은 1 바이트 만 필요하므로 더 큰 값은 더 많은 바이트가 필요하기 때문에 다릅니다. 이 정수 형식은 사양에서 "U29"라고합니다. 우리는 단순히 정수를 통과한다면 예를 들어

, "5", 유효한 AMF 패킷이이 두 바이트 것 : 웹에서 발견 응용 프로그램에서
04 05

의 AMF 데이터는 때때로 앞에 네트워크 바이트 순서로 부호 없음 long으로 인코딩 된 길이만큼. 이러한 응용 프로그램을 관찰 한 경우
00 00 00 02 04 05을 볼 수 있습니다. 여기에서 00 00 00 02은 다음 AMF 데이터가 2 바이트 길이임을 나타냅니다.

 
    this.ui = "button_press"; 
    this.param = 5; 


그런 다음 우리는 AMF의 데이터를 다음 볼 수 있습니다 :

지금, 그것은 다음과 같은 생성자 한 후 우리는 객체를 전송 가정 - 객체 태그
2B

0A을 - u29o-val : 봉인 된 멤버 2 개, 특성 및 데이터가있는 객체, 가능하면 동적 멤버
01 - 빈 문자열 - 익명 객체
,515,05 - 스트링 값에 의한 문자열의 길이 : 2
75 69 - 'UI'
0B - 문자열 별 값 문자열 길이 : 5
70 61 72 61 6D - 'PARAM'
19 - 스트링 값에 의한 문자열 길이 : 12
62 75 74 74 6F 6E 5F 70 72 65 73 73 - 'button_press'
04 - 정수
05 - 정수 값 : 5
01 - 빈 이름은 동적 빈 목록을 종료 나 이 객체를 처리합니다.

해당 패킷은 28 바이트를 차지하므로 접두어는 야생에서 발생하면 00 00 00 1C입니다.

또 다른 가능성은 zlib에서 사용 가능한 "압축"압축을 사용하여 AMF 통신이 압축 될 수 있다는 것입니다.

이 정보가 도움이 되었기를 바랍니다. 궁금한 점이 있으면 대답 해 보겠습니다.

+0

감사합니다. 매우 유용합니다. 실제로 헤더와 겹 따옴표를 포함하여 전체 유효한 AMF 메시지에 대한 BNF 설명이있는 곳에서 실제로 사용되기를 바랬습니다. 나는 디코딩 할 때 AMFPHP가 무엇을하는지 알아보기 위해 코드를 작성했다. 거기에는 많은 내용이 실세계에 암시되지 않았다. – dirtside

1

당신은이 AMF0 spec의 끝에 추가됩니다 메시지 구조를 리모팅을 찾고 있다면 - 제 4