Пример #1
0
    def write_shared_object_event(event, body_stream):
        inner_stream = pyamf.util.BufferedByteStream()
        encoder = amf0.Encoder(inner_stream)

        event_type = event['type']
        if event_type == rtmp_type.SO_USE:
            assert event['data'] == '', event['data']

        elif event_type == rtmp_type.SO_CHANGE:
            for attrib_name in event['data']:
                attrib_value = event['data'][attrib_name]
                encoder.serialiseString(attrib_name)
                encoder.writeElement(attrib_value)

        elif event['type'] == rtmp_type.SO_CLEAR:
            assert event['data'] == '', event['data']

        elif event['type'] == rtmp_type.SO_USE_SUCCESS:
            assert event['data'] == '', event['data']

        else:
            assert False, event

        body_stream.write_uchar(event_type)
        body_stream.write_ulong(len(inner_stream))
        body_stream.write(inner_stream.getvalue())
Пример #2
0
    def test_encode(self):
        stream = util.BufferedByteStream()
        encoder = amf3.Encoder(stream)

        x = flex.ArrayCollection()

        x['spam'] = 'eggs'

        encoder.writeElement(x)

        self.assertEquals(
            stream.getvalue(), '\n\x07Cflex.messaging.io.ArrayCollection'
            '\t\x01\tspam\x06\teggs\x01')

        stream = util.BufferedByteStream()
        encoder = amf0.Encoder(stream)

        x = flex.ArrayCollection()

        x['spam'] = 'eggs'

        encoder.writeElement(x)

        self.assertEquals(
            stream.getvalue(),
            '\x11\n\x07Cflex.messaging.io.ArrayCollection\t\x01\tspam\x06\x09'
            'eggs\x01')
Пример #3
0
    def write(self, message):
        log.debug('send %r', message)
        """ Encode and write the specified message into the stream. """
        datatype = message['msg']
        body_stream = pyamf.util.BufferedByteStream()
        encoder = amf0.Encoder(body_stream)

        if datatype == rtmp_type.DT_USER_CONTROL:
            body_stream.write_ushort(message['event_type'])
            body_stream.write(message['event_data'])
            self.send_msg(datatype, body_stream.getvalue())

        elif datatype == rtmp_type.DT_WINDOW_ACK_SIZE:
            body_stream.write_ulong(message['window_ack_size'])
            self.send_msg(datatype, body_stream.getvalue())

        elif datatype == rtmp_type.DT_SET_PEER_BANDWIDTH:
            body_stream.write_ulong(message['window_ack_size'])
            body_stream.write_uchar(message['limit_type'])
            self.send_msg(datatype, body_stream.getvalue())

        elif datatype == rtmp_type.DT_COMMAND:
            for command in message['command']:
                encoder.writeElement(command)
            if 'closeStream' in message['command']:
                self.send_msg(datatype,
                              body_stream.getvalue(),
                              stream_id=self.stream_id)
            elif 'deleteStream' in message['command']:
                self.send_msg(datatype,
                              body_stream.getvalue(),
                              stream_id=self.stream_id)
            elif 'publish' in message['command']:
                self.send_msg(datatype,
                              body_stream.getvalue(),
                              stream_id=self.stream_id)
            elif 'play' in message['command']:
                self.send_msg(datatype,
                              body_stream.getvalue(),
                              chunk_id=8,
                              stream_id=self.stream_id)
            else:
                self.send_msg(datatype, body_stream.getvalue())

        elif datatype == rtmp_type.DT_AMF3_COMMAND:
            encoder = amf3.Encoder(body_stream)
            for command in message['command']:
                encoder.writeElement(command)
            self.send_msg(datatype, body_stream.getvalue())

        elif datatype == rtmp_type.DT_SHARED_OBJECT:
            encoder.serialiseString(message['obj_name'])
            body_stream.write_ulong(message['curr_version'])
            body_stream.write(message['flags'])

            for event in message['events']:
                self.write_shared_object_event(event, body_stream)
            self.send_msg(datatype, body_stream.getvalue())
        else:
            assert False, message
Пример #4
0
    def encodeConnect(self, params):
        self.startTime = int(round(time.time() * 1000))
        encoder = amf0.Encoder()
        encoder.writeString('connect')
        encoder.writeNumber(1)
        encoder.writeAMF3(params)

        encoder.writeBoolean(False)
        encoder.writeString('nil')
        encoder.writeString('')

        to = TypedObject('flex.messaging.messages.CommandMessage')
        to['messageRefType'] = None
        to['operation'] = 5
        to['correlationId'] = ''
        to['clientId'] = None
        to['destination'] = ''
        to['messageId'] = str(uuid.uuid4())
        to['timestamp'] = 0
        to['timeToLive'] = 0
        to['body'] = TypedObject('')
        to['headers'] = {'DSMessagingVersion': 1, 'DSId': 'my-rtmps'}

        encoder.writeAMF3(to)
        data = self._addHeaders(bytearray(encoder.stream.getvalue()))
        data[7] = 0x14
        return data
Пример #5
0
    def test_encode_amf0(self):
        x = flex.ArrayCollection()
        x.append('eggs')

        stream = util.BufferedByteStream()
        encoder = amf0.Encoder(stream)
        encoder.writeElement(x)

        self.assertEquals(stream.getvalue(),
            '\x11\n\x07Cflex.messaging.io.ArrayCollection\t\x03\x01\x06\teggs')
Пример #6
0
    def encodeInvoke(self, invokeId, typedObject):
        encoder = amf0.Encoder()

        encoder.stream.write_uchar(0)
        encoder.writeNull(0)
        encoder.writeNumber(invokeId)
        encoder.writeNull(0)

        encoder.writeAMF3(typedObject)
        return self._addHeaders(bytearray(encoder.stream.getvalue()))
Пример #7
0
    def setUp(self):
        ClassCacheClearingTestCase.setUp(self)

        self.buffer = util.BufferedByteStream()
        self.encoder = amf0.Encoder(self.buffer)