def handleVariables(self, request, response, callback, application2,
                window):
        success = True

        changes = self.getRequestPayload(request)
        if changes is not None:

            # Manage bursts one by one
            bursts = re.split(self.VAR_BURST_SEPARATOR, changes)
            # FIXME: remove trailing empty string using re
            if (len(bursts) > 0) & (bursts[-1] == ''):
                bursts = bursts[:-1]

            # Security: double cookie submission pattern unless disabled by
            # property
            if application2.getProperty(AbstractApplicationServlet.\
                        SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION) != 'true':
                if len(bursts) == 1 and 'init' == bursts[0]:
                    # init request; don't handle any variables, key sent in
                    # response.
                    request.setAttribute(
                            self._WRITE_SECURITY_TOKEN_FLAG, True)
                    return True
                else:
                    # ApplicationServlet has stored the security token in the
                    # session; check that it matched the one sent in the UIDL
                    sessId = request.getSession().getAttribute(
                            ApplicationConnection.UIDL_SECURITY_TOKEN_ID, '')

                    if (sessId is None) or (sessId != bursts[0]):
                        msg = 'Security key mismatch'
                        raise InvalidUIDLSecurityKeyException(msg)

            for bi in range(1, len(bursts)):
                burst = bursts[bi]
                success = self.handleVariableBurst(request, application2,
                        success, burst)

                # In case that there were multiple bursts, we know that this
                # is a special synchronous case for closing window. Thus we
                # are not interested in sending any UIDL changes back to
                # client. Still we must clear component tree between bursts
                # to ensure that no removed components are updated. The
                # painting after the last burst is handled normally by the
                # calling method.
                if bi < (len(bursts) - 1):
                    # We will be discarding all changes
                    outWriter = cStringIO()
                    self.paintAfterVariableChanges(request, response,
                            callback, True, outWriter, window, False)

        # Note that we ignore inconsistencies while handling unload request.
        # The client can't remove invalid variable changes from the burst, and
        # we don't have the required logic implemented on the server side. E.g.
        # a component is removed in a previous burst.
        return success or (self._closingWindowName is not None)
Open up a test pcap file and print out the packets
dataset/ETHPy150Open rwl/muntjac/muntjac/terminal/gwt/server/abstract_communication_manager.py/AbstractCommunicationManager.handleVariables--crossover with--dataset/ETHPy150Open kbandla/dpkt/examples/print_packets.py/test