コード例 #1
0
  def SendChunked(self, data, compress=True, zhistory=None, just_buffer=False):
    rst = ''
    if self.zreset:
      self.zreset = False
      rst = 'R'

    # Stop compressing streams that just get bigger.
    if zhistory and (zhistory[0] < zhistory[1]): compress = False
    try:
      try:
        if self.lock:
          self.lock.acquire()
        sdata = ''.join(data)
        if self.zw and compress and len(sdata) > 64:
          try:
            zdata = self.zw.compress(sdata) + self.zw.flush(zlib.Z_SYNC_FLUSH)
            if zhistory:
              zhistory[0] = len(sdata)
              zhistory[1] = len(zdata)
            return self.Send(['%xZ%x%s\r\n' % (len(sdata), len(zdata), rst), zdata],
                             activity=False,
                             try_flush=(not just_buffer), just_buffer=just_buffer)
          except zlib.error:
            logging.LogError('Error compressing, resetting ZChunks.')
            self.ResetZChunks()

        return self.Send(['%x%s\r\n' % (len(sdata), rst), sdata],
                         activity=False,
                         try_flush=(not just_buffer), just_buffer=just_buffer)
      except UnicodeDecodeError:
        logging.LogError('UnicodeDecodeError in SendChunked, wtf?')
        return False
    finally:
      if self.lock:
        self.lock.release()
コード例 #2
0
    def SendChunked(self,
                    data,
                    compress=True,
                    zhistory=None,
                    just_buffer=False):
        if self.use_websocket:
            with self.lock:
                return self.Send([
                    ABNF.create_frame(''.join(data), ABNF.OPCODE_BINARY, 1,
                                      self.ws_zero_mask).format()
                ],
                                 activity=False,
                                 try_flush=(not just_buffer),
                                 just_buffer=just_buffer)

        rst = ''
        if self.zreset:
            self.zreset = False
            rst = 'R'

        # Stop compressing streams that just get bigger.
        if zhistory and (zhistory[0] < zhistory[1]): compress = False
        with self.lock:
            try:
                sdata = ''.join(data)
                if self.zw and compress and len(sdata) > 64:
                    try:
                        zdata = s(
                            self.zw.compress(b(sdata)) +
                            self.zw.flush(zlib.Z_SYNC_FLUSH))
                        if zhistory:
                            zhistory[0] = len(sdata)
                            zhistory[1] = len(zdata)
                        return self.Send([
                            '%xZ%x%s\r\n' %
                            (len(sdata), len(zdata), rst), zdata
                        ],
                                         activity=False,
                                         try_flush=(not just_buffer),
                                         just_buffer=just_buffer)
                    except zlib.error:
                        logging.LogError(
                            'Error compressing, resetting ZChunks.')
                        self.ResetZChunks()

                return self.Send(['%x%s\r\n' % (len(sdata), rst), sdata],
                                 activity=False,
                                 try_flush=(not just_buffer),
                                 just_buffer=just_buffer)
            except UnicodeDecodeError:
                logging.LogError('UnicodeDecodeError in SendChunked, wtf?')
                return False
コード例 #3
0
ファイル: nullui.py プロジェクト: zhgqthomas/PyPagekite
 def Tell(self, lines, error=False, back=None):
     if error:
         logging.LogError(' '.join(lines))
         raise ConfigError(' '.join(lines))
     else:
         logging.Log([('message', ' '.join(lines))])
         return True
コード例 #4
0
ファイル: selectables.py プロジェクト: zentyal/PyPagekite
    def Cleanup(self, close=True):
        self.peeked = self.zw = ''
        self.Die(discard_buffer=True)
        if close:

            if self.fd:
                if logging.DEBUG_IO:
                    self.LogDebug('Closing FD: %s' % self)
                self.fd.close()

            # Update DNS if necessary
            if hasattr(self, "backends"):
                if common.pko.dnsclient:
                    try:
                        for b in self.backends:
                            domain = b.split(':')[1]
                            logging.LogDebug("Deleting dynamic DNS name: %s" %
                                             domain)
                            common.pko.dnsclient.delete_async(domain)
                    except Exception as e:
                        logging.LogError(
                            "Could not delete dynamic DNS name: %s" % e)

        self.fd = None
        if not self.dead:
            self.dead = True
            self.CountAs('selectables_dead')
            if close:
                self.LogTraffic(final=True)
コード例 #5
0
    def filter_connected(self, tunnel, sid, data):
        info = self.sid.get(sid)
        if info:
            if not info.get(self.ENABLE, False):
                pass
            elif info[self.ENABLE] in ("1", True):
                remote_ip = info['remote_ip']
                if '.' in remote_ip:
                    remote_ip = remote_ip.rsplit(':', 1)[1]
                data = 'PROXY TCP%s %s 0.0.0.0 %s %s\r\n%s' % (
                    '4' if ('.' in remote_ip) else '6', remote_ip,
                    info['remote_port'], info['port'], data or '')
            else:
                logging.LogError('FIXME: Unimplemented PROXY protocol v%s\n' %
                                 info[self.ENABLE])

        return TunnelFilter.filter_connected(self, tunnel, sid, data)
コード例 #6
0
 def LogError(self, error, params=None):
   values = params or []
   if self.log_id: values.append(('id', self.log_id))
   logging.LogError(error, values)
コード例 #7
0
 def LogError(self, error, params=None):
     values = params or []
     if self.log_id:
         values.extend([('id', self.log_id), ('s', self.sstate)])
     logging.LogError(error, values)