1package amf 2 3import ( 4 "io" 5) 6 7const ( 8 AMF0 = 0x00 9 AMF3 = 0x03 10) 11 12const ( 13 AMF0_NUMBER_MARKER = 0x00 14 AMF0_BOOLEAN_MARKER = 0x01 15 AMF0_STRING_MARKER = 0x02 16 AMF0_OBJECT_MARKER = 0x03 17 AMF0_MOVIECLIP_MARKER = 0x04 18 AMF0_NULL_MARKER = 0x05 19 AMF0_UNDEFINED_MARKER = 0x06 20 AMF0_REFERENCE_MARKER = 0x07 21 AMF0_ECMA_ARRAY_MARKER = 0x08 22 AMF0_OBJECT_END_MARKER = 0x09 23 AMF0_STRICT_ARRAY_MARKER = 0x0a 24 AMF0_DATE_MARKER = 0x0b 25 AMF0_LONG_STRING_MARKER = 0x0c 26 AMF0_UNSUPPORTED_MARKER = 0x0d 27 AMF0_RECORDSET_MARKER = 0x0e 28 AMF0_XML_DOCUMENT_MARKER = 0x0f 29 AMF0_TYPED_OBJECT_MARKER = 0x10 30 AMF0_ACMPLUS_OBJECT_MARKER = 0x11 31) 32 33const ( 34 AMF0_BOOLEAN_FALSE = 0x00 35 AMF0_BOOLEAN_TRUE = 0x01 36 AMF0_STRING_MAX = 65535 37 AMF3_INTEGER_MAX = 536870911 38) 39 40const ( 41 AMF3_UNDEFINED_MARKER = 0x00 42 AMF3_NULL_MARKER = 0x01 43 AMF3_FALSE_MARKER = 0x02 44 AMF3_TRUE_MARKER = 0x03 45 AMF3_INTEGER_MARKER = 0x04 46 AMF3_DOUBLE_MARKER = 0x05 47 AMF3_STRING_MARKER = 0x06 48 AMF3_XMLDOC_MARKER = 0x07 49 AMF3_DATE_MARKER = 0x08 50 AMF3_ARRAY_MARKER = 0x09 51 AMF3_OBJECT_MARKER = 0x0a 52 AMF3_XMLSTRING_MARKER = 0x0b 53 AMF3_BYTEARRAY_MARKER = 0x0c 54) 55 56type ExternalHandler func(*Decoder, io.Reader) (interface{}, error) 57 58type Decoder struct { 59 refCache []interface{} 60 stringRefs []string 61 objectRefs []interface{} 62 traitRefs []Trait 63 externalHandlers map[string]ExternalHandler 64} 65 66func NewDecoder() *Decoder { 67 return &Decoder{ 68 externalHandlers: make(map[string]ExternalHandler), 69 } 70} 71 72func (d *Decoder) RegisterExternalHandler(name string, f ExternalHandler) { 73 d.externalHandlers[name] = f 74} 75 76type Encoder struct { 77} 78 79type Version uint8 80 81type Array []interface{} 82type Object map[string]interface{} 83 84type TypedObject struct { 85 Type string 86 Object Object 87} 88 89type Trait struct { 90 Type string 91 Externalizable bool 92 Dynamic bool 93 Properties []string 94} 95 96func NewTrait() *Trait { 97 return &Trait{} 98} 99 100func NewTypedObject() *TypedObject { 101 return &TypedObject{ 102 Type: "", 103 Object: make(Object), 104 } 105} 106