equal
deleted
inserted
replaced
79 b'eos': FLAG_COMMAND_DATA_EOS, |
79 b'eos': FLAG_COMMAND_DATA_EOS, |
80 } |
80 } |
81 |
81 |
82 FLAG_BYTES_RESPONSE_CONTINUATION = 0x01 |
82 FLAG_BYTES_RESPONSE_CONTINUATION = 0x01 |
83 FLAG_BYTES_RESPONSE_EOS = 0x02 |
83 FLAG_BYTES_RESPONSE_EOS = 0x02 |
84 FLAG_BYTES_RESPONSE_CBOR = 0x04 |
|
85 |
84 |
86 FLAGS_BYTES_RESPONSE = { |
85 FLAGS_BYTES_RESPONSE = { |
87 b'continuation': FLAG_BYTES_RESPONSE_CONTINUATION, |
86 b'continuation': FLAG_BYTES_RESPONSE_CONTINUATION, |
88 b'eos': FLAG_BYTES_RESPONSE_EOS, |
87 b'eos': FLAG_BYTES_RESPONSE_EOS, |
89 b'cbor': FLAG_BYTES_RESPONSE_CBOR, |
|
90 } |
88 } |
91 |
89 |
92 FLAG_ERROR_RESPONSE_PROTOCOL = 0x01 |
90 FLAG_ERROR_RESPONSE_PROTOCOL = 0x01 |
93 FLAG_ERROR_RESPONSE_APPLICATION = 0x02 |
91 FLAG_ERROR_RESPONSE_APPLICATION = 0x02 |
94 |
92 |
348 payload=data) |
346 payload=data) |
349 |
347 |
350 if done: |
348 if done: |
351 break |
349 break |
352 |
350 |
353 def createbytesresponseframesfrombytes(stream, requestid, data, iscbor=False, |
351 def createbytesresponseframesfrombytes(stream, requestid, data, |
354 maxframesize=DEFAULT_MAX_FRAME_SIZE): |
352 maxframesize=DEFAULT_MAX_FRAME_SIZE): |
355 """Create a raw frame to send a bytes response from static bytes input. |
353 """Create a raw frame to send a bytes response from static bytes input. |
356 |
354 |
357 Returns a generator of bytearrays. |
355 Returns a generator of bytearrays. |
358 """ |
356 """ |
359 |
357 |
360 # Simple case of a single frame. |
358 # Simple case of a single frame. |
361 if len(data) <= maxframesize: |
359 if len(data) <= maxframesize: |
362 flags = FLAG_BYTES_RESPONSE_EOS |
360 flags = FLAG_BYTES_RESPONSE_EOS |
363 if iscbor: |
|
364 flags |= FLAG_BYTES_RESPONSE_CBOR |
|
365 |
|
366 yield stream.makeframe(requestid=requestid, |
361 yield stream.makeframe(requestid=requestid, |
367 typeid=FRAME_TYPE_BYTES_RESPONSE, |
362 typeid=FRAME_TYPE_BYTES_RESPONSE, |
368 flags=flags, |
363 flags=flags, |
369 payload=data) |
364 payload=data) |
370 return |
365 return |
377 |
372 |
378 if done: |
373 if done: |
379 flags = FLAG_BYTES_RESPONSE_EOS |
374 flags = FLAG_BYTES_RESPONSE_EOS |
380 else: |
375 else: |
381 flags = FLAG_BYTES_RESPONSE_CONTINUATION |
376 flags = FLAG_BYTES_RESPONSE_CONTINUATION |
382 |
|
383 if iscbor: |
|
384 flags |= FLAG_BYTES_RESPONSE_CBOR |
|
385 |
377 |
386 yield stream.makeframe(requestid=requestid, |
378 yield stream.makeframe(requestid=requestid, |
387 typeid=FRAME_TYPE_BYTES_RESPONSE, |
379 typeid=FRAME_TYPE_BYTES_RESPONSE, |
388 flags=flags, |
380 flags=flags, |
389 payload=chunk) |
381 payload=chunk) |
614 if not meth: |
606 if not meth: |
615 raise error.ProgrammingError('unhandled state: %s' % self._state) |
607 raise error.ProgrammingError('unhandled state: %s' % self._state) |
616 |
608 |
617 return meth(frame) |
609 return meth(frame) |
618 |
610 |
619 def onbytesresponseready(self, stream, requestid, data, iscbor=False): |
611 def onbytesresponseready(self, stream, requestid, data): |
620 """Signal that a bytes response is ready to be sent to the client. |
612 """Signal that a bytes response is ready to be sent to the client. |
621 |
613 |
622 The raw bytes response is passed as an argument. |
614 The raw bytes response is passed as an argument. |
623 """ |
615 """ |
624 ensureserverstream(stream) |
616 ensureserverstream(stream) |
625 |
617 |
626 def sendframes(): |
618 def sendframes(): |
627 for frame in createbytesresponseframesfrombytes(stream, requestid, |
619 for frame in createbytesresponseframesfrombytes(stream, requestid, |
628 data, |
620 data): |
629 iscbor=iscbor): |
|
630 yield frame |
621 yield frame |
631 |
622 |
632 self._activecommands.remove(requestid) |
623 self._activecommands.remove(requestid) |
633 |
624 |
634 result = sendframes() |
625 result = sendframes() |
1065 |
1056 |
1066 return 'responsedata', { |
1057 return 'responsedata', { |
1067 'request': request, |
1058 'request': request, |
1068 'expectmore': frame.flags & FLAG_BYTES_RESPONSE_CONTINUATION, |
1059 'expectmore': frame.flags & FLAG_BYTES_RESPONSE_CONTINUATION, |
1069 'eos': frame.flags & FLAG_BYTES_RESPONSE_EOS, |
1060 'eos': frame.flags & FLAG_BYTES_RESPONSE_EOS, |
1070 'cbor': frame.flags & FLAG_BYTES_RESPONSE_CBOR, |
|
1071 'data': frame.payload, |
1061 'data': frame.payload, |
1072 } |
1062 } |