@@ -478,181 +478,74 @@ def _read_header(self):
478478 obj = False
479479 elif b == 0xC3 :
480480 obj = True
481- elif b == 0xC4 :
482- typ = TYPE_BIN
483- self ._reserve (1 )
484- n = self ._buffer [self ._buff_i ]
485- self ._buff_i += 1
486- if n > self ._max_bin_len :
487- raise ValueError ("%s exceeds max_bin_len(%s)" % (n , self ._max_bin_len ))
488- obj = self ._read (n )
489- elif b == 0xC5 :
490- typ = TYPE_BIN
491- self ._reserve (2 )
492- n = _unpack_from (">H" , self ._buffer , self ._buff_i )[0 ]
493- self ._buff_i += 2
494- if n > self ._max_bin_len :
495- raise ValueError ("%s exceeds max_bin_len(%s)" % (n , self ._max_bin_len ))
496- obj = self ._read (n )
497- elif b == 0xC6 :
498- typ = TYPE_BIN
499- self ._reserve (4 )
500- n = _unpack_from (">I" , self ._buffer , self ._buff_i )[0 ]
501- self ._buff_i += 4
481+ elif 0xC4 <= b <= 0xC6 :
482+ message_pack = MESSAGE_PACK_DICT [b ]
483+ typ = message_pack .type
484+ self ._reserve (message_pack .size )
485+ if len (message_pack .format ) > 0 :
486+ n = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )[0 ]
487+ else :
488+ n = self ._buffer [self ._buff_i ]
489+ self ._buff_i += message_pack .size
502490 if n > self ._max_bin_len :
503491 raise ValueError ("%s exceeds max_bin_len(%s)" % (n , self ._max_bin_len ))
504492 obj = self ._read (n )
505- elif b == 0xC7 : # ext 8
506- typ = TYPE_EXT
507- self ._reserve (2 )
508- L , n = _unpack_from ("Bb" , self ._buffer , self ._buff_i )
509- self ._buff_i += 2
493+ elif 0xC7 <= b <= 0xC9 :
494+ message_pack = MESSAGE_PACK_DICT [b ]
495+ typ = message_pack .type
496+ self ._reserve (message_pack .size )
497+ L , n = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )
498+ self ._buff_i += message_pack .size
510499 if L > self ._max_ext_len :
511500 raise ValueError ("%s exceeds max_ext_len(%s)" % (L , self ._max_ext_len ))
512501 obj = self ._read (L )
513- elif b == 0xC8 : # ext 16
514- typ = TYPE_EXT
515- self ._reserve (3 )
516- L , n = _unpack_from (">Hb" , self ._buffer , self ._buff_i )
517- self ._buff_i += 3
518- if L > self ._max_ext_len :
519- raise ValueError ("%s exceeds max_ext_len(%s)" % (L , self ._max_ext_len ))
520- obj = self ._read (L )
521- elif b == 0xC9 : # ext 32
522- typ = TYPE_EXT
523- self ._reserve (5 )
524- L , n = _unpack_from (">Ib" , self ._buffer , self ._buff_i )
525- self ._buff_i += 5
526- if L > self ._max_ext_len :
527- raise ValueError ("%s exceeds max_ext_len(%s)" % (L , self ._max_ext_len ))
528- obj = self ._read (L )
529- elif b == 0xCA :
530- self ._reserve (4 )
531- obj = _unpack_from (">f" , self ._buffer , self ._buff_i )[0 ]
532- self ._buff_i += 4
533- elif b == 0xCB :
534- self ._reserve (8 )
535- obj = _unpack_from (">d" , self ._buffer , self ._buff_i )[0 ]
536- self ._buff_i += 8
537- elif b == 0xCC :
538- self ._reserve (1 )
539- obj = self ._buffer [self ._buff_i ]
540- self ._buff_i += 1
541- elif b == 0xCD :
542- self ._reserve (2 )
543- obj = _unpack_from (">H" , self ._buffer , self ._buff_i )[0 ]
544- self ._buff_i += 2
545- elif b == 0xCE :
546- self ._reserve (4 )
547- obj = _unpack_from (">I" , self ._buffer , self ._buff_i )[0 ]
548- self ._buff_i += 4
549- elif b == 0xCF :
550- self ._reserve (8 )
551- obj = _unpack_from (">Q" , self ._buffer , self ._buff_i )[0 ]
552- self ._buff_i += 8
553- elif b == 0xD0 :
554- self ._reserve (1 )
555- obj = _unpack_from ("b" , self ._buffer , self ._buff_i )[0 ]
556- self ._buff_i += 1
557- elif b == 0xD1 :
558- self ._reserve (2 )
559- obj = _unpack_from (">h" , self ._buffer , self ._buff_i )[0 ]
560- self ._buff_i += 2
561- elif b == 0xD2 :
562- self ._reserve (4 )
563- obj = _unpack_from (">i" , self ._buffer , self ._buff_i )[0 ]
564- self ._buff_i += 4
565- elif b == 0xD3 :
566- self ._reserve (8 )
567- obj = _unpack_from (">q" , self ._buffer , self ._buff_i )[0 ]
568- self ._buff_i += 8
569- elif b == 0xD4 : # fixext 1
570- typ = TYPE_EXT
571- if self ._max_ext_len < 1 :
572- raise ValueError ("%s exceeds max_ext_len(%s)" % (1 , self ._max_ext_len ))
573- self ._reserve (2 )
574- n , obj = _unpack_from ("b1s" , self ._buffer , self ._buff_i )
575- self ._buff_i += 2
576- elif b == 0xD5 : # fixext 2
577- typ = TYPE_EXT
578- if self ._max_ext_len < 2 :
579- raise ValueError ("%s exceeds max_ext_len(%s)" % (2 , self ._max_ext_len ))
580- self ._reserve (3 )
581- n , obj = _unpack_from ("b2s" , self ._buffer , self ._buff_i )
582- self ._buff_i += 3
583- elif b == 0xD6 : # fixext 4
584- typ = TYPE_EXT
585- if self ._max_ext_len < 4 :
586- raise ValueError ("%s exceeds max_ext_len(%s)" % (4 , self ._max_ext_len ))
587- self ._reserve (5 )
588- n , obj = _unpack_from ("b4s" , self ._buffer , self ._buff_i )
589- self ._buff_i += 5
590- elif b == 0xD7 : # fixext 8
591- typ = TYPE_EXT
592- if self ._max_ext_len < 8 :
593- raise ValueError ("%s exceeds max_ext_len(%s)" % (8 , self ._max_ext_len ))
594- self ._reserve (9 )
595- n , obj = _unpack_from ("b8s" , self ._buffer , self ._buff_i )
596- self ._buff_i += 9
597- elif b == 0xD8 : # fixext 16
598- typ = TYPE_EXT
599- if self ._max_ext_len < 16 :
600- raise ValueError ("%s exceeds max_ext_len(%s)" % (16 , self ._max_ext_len ))
601- self ._reserve (17 )
602- n , obj = _unpack_from ("b16s" , self ._buffer , self ._buff_i )
603- self ._buff_i += 17
604- elif b == 0xD9 :
605- typ = TYPE_RAW
606- self ._reserve (1 )
607- n = self ._buffer [self ._buff_i ]
608- self ._buff_i += 1
609- if n > self ._max_str_len :
610- raise ValueError ("%s exceeds max_str_len(%s)" , n , self ._max_str_len )
611- obj = self ._read (n )
612- elif b == 0xDA :
613- typ = TYPE_RAW
614- self ._reserve (2 )
615- (n ,) = _unpack_from (">H" , self ._buffer , self ._buff_i )
616- self ._buff_i += 2
617- if n > self ._max_str_len :
618- raise ValueError ("%s exceeds max_str_len(%s)" , n , self ._max_str_len )
619- obj = self ._read (n )
620- elif b == 0xDB :
621- typ = TYPE_RAW
622- self ._reserve (4 )
623- (n ,) = _unpack_from (">I" , self ._buffer , self ._buff_i )
624- self ._buff_i += 4
502+ elif 0xCA <= b <= 0xD3 :
503+ message_pack = MESSAGE_PACK_DICT [b ]
504+ self ._reserve (message_pack .size )
505+ if len (message_pack .format ) > 0 :
506+ obj = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )[0 ]
507+ else :
508+ obj = self ._buffer [self ._buff_i ]
509+ self ._buff_i += message_pack .size
510+ elif 0xD4 <= b <= 0xD8 :
511+ message_pack = MESSAGE_PACK_DICT [b ]
512+ typ = message_pack .type
513+ if self ._max_ext_len < message_pack .size :
514+ raise ValueError (
515+ "%s exceeds max_ext_len(%s)"
516+ % (message_pack .size , self ._max_ext_len )
517+ )
518+ self ._reserve (message_pack .size + 1 )
519+ n , obj = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )
520+ self ._buff_i += message_pack .size + 1
521+ elif 0xD9 <= b <= 0xDB :
522+ message_pack = MESSAGE_PACK_DICT [b ]
523+ typ = message_pack .type
524+ self ._reserve (message_pack .size )
525+ if len (message_pack .format ) > 0 :
526+ (n ,) = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )
527+ else :
528+ n = self ._buffer [self ._buff_i ]
529+ self ._buff_i += message_pack .size
625530 if n > self ._max_str_len :
626531 raise ValueError ("%s exceeds max_str_len(%s)" , n , self ._max_str_len )
627532 obj = self ._read (n )
628- elif b == 0xDC :
629- typ = TYPE_ARRAY
630- self ._reserve (2 )
631- (n ,) = _unpack_from (">H" , self ._buffer , self ._buff_i )
632- self ._buff_i += 2
633- if n > self ._max_array_len :
634- raise ValueError ("%s exceeds max_array_len(%s)" , n , self ._max_array_len )
635- elif b == 0xDD :
636- typ = TYPE_ARRAY
637- self ._reserve (4 )
638- (n ,) = _unpack_from (">I" , self ._buffer , self ._buff_i )
639- self ._buff_i += 4
533+ elif 0xDC <= b <= 0xDD :
534+ message_pack = MESSAGE_PACK_DICT [b ]
535+ typ = message_pack .type
536+ self ._reserve (message_pack .size )
537+ (n ,) = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )
538+ self ._buff_i += message_pack .size
640539 if n > self ._max_array_len :
641540 raise ValueError ("%s exceeds max_array_len(%s)" , n , self ._max_array_len )
642- elif b == 0xDE :
643- self ._reserve (2 )
644- (n ,) = _unpack_from (">H" , self ._buffer , self ._buff_i )
645- self ._buff_i += 2
541+ elif 0xDE <= b <= 0xDF :
542+ message_pack = MESSAGE_PACK_DICT [b ]
543+ self ._reserve (message_pack .size )
544+ (n ,) = _unpack_from (message_pack .format , self ._buffer , self ._buff_i )
545+ self ._buff_i += message_pack .size
646546 if n > self ._max_map_len :
647547 raise ValueError ("%s exceeds max_map_len(%s)" , n , self ._max_map_len )
648- typ = TYPE_MAP
649- elif b == 0xDF :
650- self ._reserve (4 )
651- (n ,) = _unpack_from (">I" , self ._buffer , self ._buff_i )
652- self ._buff_i += 4
653- if n > self ._max_map_len :
654- raise ValueError ("%s exceeds max_map_len(%s)" , n , self ._max_map_len )
655- typ = TYPE_MAP
548+ typ = message_pack .type
656549 else :
657550 raise FormatError ("Unknown header: 0x%x" % b )
658551 return typ , n , obj
0 commit comments