Exemple #1
0
def test_decode_frames():
    # Single string
    eq_(proto.decode_frames('abc'), ['abc'])

    # Multiplie strings
    eq_(proto.decode_frames(u'\ufffd3\ufffdabc\ufffd3\ufffddef'.encode('utf-8')),
                            ['abc', 'def'])
Exemple #2
0
def test_decode_frames():
    # Single string
    eq_(proto.decode_frames('abc'), ['abc'])

    # Multiplie strings
    eq_(proto.decode_frames('\\ufffd3\\ufffdabc\\ufffd3\\ufffddef'),
                            ['abc', 'def'])
Exemple #3
0
def test_decode_frames():
    # Single string
    eq_(proto.decode_frames(u'abc'), [u'abc'])

    # Multiplie strings
    eq_(proto.decode_frames(u'\ufffd3\ufffdabc\ufffd3\ufffddef'),
        [u'abc', u'def'])
def test_decode_frames():
    # Single string
    eq_(proto.decode_frames(u'abc'), [u'abc'])

    # Multiplie strings
    eq_(proto.decode_frames(u'\ufffd3\ufffdabc\ufffd3\ufffddef'),
                            [u'abc', u'def'])
Exemple #5
0
def test_decode_frames():
    # Single string
    eq_(proto.decode_frames('abc'), ['abc'])

    # Multiplie strings
    eq_(
        proto.decode_frames(
            u'\ufffd3\ufffdabc\ufffd3\ufffddef'.encode('utf-8')),
        ['abc', 'def'])
Exemple #6
0
    def post(self, session_id):
        # Get session
        self.session = self._get_session(session_id)

        # Can not send messages to closed session or if preflight() failed
        if self.session.is_closed or not self.preflight():
            raise HTTPError(401)

        data = self.request.body

        # IE XDomainRequest support
        if data.startswith('data='):
            data = data[5:]

        # Process packets one by one
        packets = proto.decode_frames(data)
        for p in packets:
            try:
                self.session.raw_message(p)
            except Exception:
                # Close session if something went wrong
                self.session.close()

        self.set_header('Content-Type', 'text/plain; charset=UTF-8')
        #self.write('')
        self.finish()
Exemple #7
0
    def post(self, session_id):
        """Handle incoming POST request"""

        # Get session
        self.session = self._get_session(session_id)

        # Can not send messages to closed session or if preflight() failed
        if self.session.is_closed or not self.preflight():
            raise HTTPError(401)

        # Grab body and decode it (socket.io always sends data in utf-8)
        data = self.request.body.decode('utf-8')

        # IE XDomainRequest support
        if data.startswith(u'data='):
            data = data[5:]

        # Process packets one by one
        packets = proto.decode_frames(data)
        for p in packets:
            try:
                self.session.raw_message(p)
            except Exception:
                # Close session if something went wrong
                self.session.close()

        self.set_header('Content-Type', 'text/plain; charset=UTF-8')
        self.finish()
Exemple #8
0
    def post(self, session_id):
        # Get session
        self.session = self._get_session(session_id)

        # Can not send messages to closed session or if preflight() failed
        if self.session.is_closed or not self.preflight():
            raise HTTPError(401)

        # Socket.io always send data utf-8 encoded.
        data = self.request.body

        # IE XDomainRequest support
        if not data.startswith('d='):
            logging.error('Malformed JSONP POST request')
            raise HTTPError(403)

        # Grab data
        data = urllib.unquote(data[2:]).decode('utf-8')

        # If starts with double quote, it is json encoded (socket.io workaround)
        if data.startswith(u'"'):
            data = proto.json_load(data)

        # Process packets one by one
        packets = proto.decode_frames(data)
        for p in packets:
            try:
                self.session.raw_message(p)
            except Exception:
                # Close session if something went wrong
                self.session.close()

        self.set_header('Content-Type', 'text/plain; charset=UTF-8')
        self.finish()
Exemple #9
0
    def post(self, session_id):
        try:
            # Stats
            self.server.stats.connection_opened()

            # Get session
            self.session = self._get_session(session_id)

            # Can not send messages to closed session or if preflight() failed
            if self.session.is_closed or not self.preflight():
                raise HTTPError(401)

            # Socket.io always send data utf-8 encoded.
            data = self.request.body

            # IE XDomainRequest support
            if not data.startswith('d='):
                logging.error('Malformed JSONP POST request')
                raise HTTPError(403)

            # Grab data
            data = urllib.unquote_plus(data[2:]).decode('utf-8')

            # If starts with double quote, it is json encoded (socket.io workaround)
            if data.startswith(u'"'):
                data = proto.json_load(data)

            # Process packets one by one
            packets = proto.decode_frames(data)

            # Tracking
            self.server.stats.on_packet_recv(len(packets))

            for p in packets:
                try:
                    self.session.raw_message(p)
                except Exception:
                    # Close session if something went wrong
                    self.session.close()

            self.set_header('Content-Type', 'text/plain; charset=UTF-8')
            self.finish()
        finally:
            self.server.stats.connection_closed()
Exemple #10
0
    def post(self, session_id):
        """Handle incoming POST request"""
        try:
            # Stats
            self.server.stats.connection_opened()

            # Get session
            self.session = self._get_session(session_id)

            # Can not send messages to closed session or if preflight() failed
            if self.session.is_closed or not self.preflight():
                raise HTTPError(401)

            # Grab body and decode it (socket.io always sends data in utf-8)
            data = self.request.body.decode('utf-8')

            # IE XDomainRequest support
            if data.startswith(u'data='):
                data = data[5:]

            # Process packets one by one
            packets = proto.decode_frames(data)

            # Tracking
            self.server.stats.on_packet_recv(len(packets))

            for p in packets:
                try:
                    self.session.raw_message(p)
                except Exception:
                    # Close session if something went wrong
                    self.session.close()

            self.set_header('Content-Type', 'text/plain; charset=UTF-8')
            self.finish()
        finally:
            self.server.stats.connection_closed()