@@ -57,52 +57,67 @@ typesTable[DataTypes.double] = function (value) {
57
57
} ;
58
58
59
59
typesTable [ DataTypes . string ] = function ( value ) {
60
- /*var length;
61
- length = buffer.writeUInt16BE(pointer.offset);
62
- pointer.offset += 2;
63
- buffer.toString('utf8', pointer.offset, pointer.offset + length);
64
- pointer.offset += length;*/
60
+ var buffer = new Buffer ( value ) ;
61
+ var length = buffer . length ;
62
+ if ( length > 0xFFFF ) {
63
+ throw Error ( 'String too long' ) ;
64
+ }
65
+
66
+ var res = new Buffer ( 2 + length ) ;
67
+ res . writeUInt16BE ( length , 0 ) ;
68
+ buffer . copy ( res , 2 ) ;
69
+
70
+ return res ;
65
71
} ;
66
72
67
73
typesTable [ DataTypes . shortBuffer ] = function ( value ) {
68
- /*var length;
69
- length = buffer.writeUInt16BE(pointer.offset);
70
- pointer.offset += 2;
71
- buffer.slice(pointer.offset, pointer.offset + length);
72
- pointer.offset += length;*/
74
+ var length = value . length ;
75
+ if ( length > 0xFFFF ) {
76
+ throw Error ( 'Buffer too long' ) ;
77
+ }
78
+
79
+ var res = new Buffer ( 2 + length ) ;
80
+ res . writeUInt16BE ( length , 0 ) ;
81
+ value . copy ( res , 2 ) ;
82
+
83
+ return res ;
73
84
} ;
74
85
75
86
typesTable [ DataTypes . buffer ] = function ( value ) {
76
- /* var length;
77
- length = buffer.writeUInt32BE(pointer.offset);
78
- pointer.offset += 4;
79
- buffer.slice(pointer.offset, pointer.offset + length);
80
- pointer.offset += length;*/
81
- } ;
87
+ var length = value . length ;
82
88
83
- typesTable [ DataTypes . struct ] = function ( pointer , buffer , scheme ) {
84
- //return structureWriter(pointer, buffer, scheme);
85
- } ;
89
+ if ( length > 0xFFFFFFFF ) {
90
+ throw Error ( 'Buffer too long' ) ;
91
+ }
92
+
93
+ var res = new Buffer ( 4 + length ) ;
94
+ res . writeUInt32BE ( length , 0 ) ;
95
+ value . copy ( res , 4 ) ;
86
96
87
- typesTable [ DataTypes . list ] = function ( pointer , buffer , scheme ) {
88
- /* var length = buffer.writeUInt16BE(pointer.offset);
89
- pointer.offset += 2;
97
+ return res ;
98
+ } ;
90
99
91
- [];
92
- while (length--) {
93
- res.push(structureWriter(pointer, buffer, scheme));
94
- }*/
100
+ typesTable [ DataTypes . struct ] = function ( value , scheme ) {
101
+ return structureWriter ( value , scheme ) ;
95
102
} ;
96
103
97
- var structureWriter = function ( pointer , object , scheme ) {
98
- if ( arguments . length === 2 ) {
99
- scheme = object ;
100
- object = pointer ;
101
- pointer = {
102
- offset : 0
103
- } ;
104
+ typesTable [ DataTypes . list ] = function ( value , scheme ) {
105
+ if ( Object . prototype . toString . call ( value ) !== '[object Array]' ) {
106
+ throw Error ( 'Value is not array.' )
104
107
}
105
108
109
+ var res = [ ] ;
110
+ var lenBuf = new Buffer ( 2 ) ;
111
+ var length = value . length ;
112
+ lenBuf . writeUInt16BE ( length , 0 ) ;
113
+ res . push ( lenBuf ) ;
114
+ for ( var i = 0 ; i < length ; i ++ ) {
115
+ res . push ( structureWriter ( value [ i ] , scheme ) ) ;
116
+ }
117
+ return Buffer . concat ( res ) ;
118
+ } ;
119
+
120
+ var structureWriter = function ( object , scheme ) {
106
121
var res = [ ] ;
107
122
if ( typeof scheme === 'number' ) {
108
123
res . push ( typesTable [ scheme ] ( object ) ) ;
0 commit comments