Beispiel #1
0
	def unpack(cls, data):
		amqp, data = eat(data, 4)
		if amqp != "AMQP":
			raise ValueError('Invalid data: Data did not begin with "AMQP"')
		proto_id, data = eat(data, 1)
		proto_version, data = eat(data, 3)
		return cls(proto_id, proto_version), data
Beispiel #2
0
 def unpack(cls, data):
     header, data = FrameHeader.unpack(data)
     payload, data = eat(data, header.size)
     frame_end, data = eat(data, 1)
     if frame_end != cls.FRAME_END:
         raise ValueError("Framing error: Frame ended with {!r}, not {!r}".format(frame_end, cls.FRAME_END))
     payload_type = cls.payload_types[header.type]
     try:
         payload, leftover = payload_type.unpack(payload)
     except Incomplete:
         _, _, tb = sys.exc_info()
         ex = ValueError("Frame payload reported Incomplete")
         raise type(ex), ex, tb
     if leftover:
         raise ValueError("Payload had excess bytes: {!r}".format(leftover))
     return cls(header.type, header.channel, payload), data
Beispiel #3
0
	def pack(self):
		first, rest = eat(self.value, 1)
		if first not in self.FIRSTCHARS:
			raise ValueError("Illegal character {} as first character of field name".format(first))
		for c in rest:
			if c not in self.CHARS:
				raise ValueError("Illegal character {} in field name".format(c))
		return super(FieldName, self).pack()
Beispiel #4
0
	def unpack(cls, data):
		payload, data = LongString.unpack(data)
		payload = payload.value
		values = []
		try:
			while payload:
				type_specifier, payload = eat(payload, 1)
				field_type = FIELD_TYPES[type_specifier]
				value, payload = field_type.unpack(payload)
				values.append(value)
		except Incomplete:
			_, _, tb = sys.exc_info()
			ex = ValueError("FieldArray payload reported Incomplete")
			raise type(ex), ex, tb
		return cls(values), data
Beispiel #5
0
	def unpack(cls, data):
		payload, data = LongString.unpack(data)
		payload = payload.value
		values = {}
		try:
			while payload:
				name, payload = FieldName.unpack(payload)
				name = name.value
				type_specifier, payload = eat(payload, 1)
				field_type = FIELD_TYPES[type_specifier]
				value, payload = field_type.unpack(payload)
				values[name] = value
		except Incomplete:
			_, _, tb = sys.exc_info()
			ex = ValueError("FieldTable payload reported Incomplete")
			raise type(ex), ex, tb
		return cls(values), data
Beispiel #6
0
	def unpack(cls, data):
		length, data = cls.len_type.unpack(data)
		string, data = eat(data, length.value)
		return cls(string), data
Beispiel #7
0
	def unpack(cls, data):
		data, leftover = eat(data, cls.len())
		value, = struct.unpack(cls.struct_fmt(), data)
		return cls(value), leftover
Beispiel #8
0
	def decode(cls, data):
		"""Decode message from data and return (message_type, payload, remaining data),
		or raise Incomplete if more data is needed to complete a message."""
		(length, message_type), data = unpack('IB', data)
		payload, data = eat(data, length)
		return message_type, payload, data