def _hook_while_sending(self): "Hook running while request are sent to the tested server." transmit = True try: self.backend_queries = self.get_echoed_query() except NoServerThreadResponse: # well our bad query was maybe not transmitted inmsg('# No transmission from backend.') transmit = False if transmit: inmsg('# received query from backend echo.') inmsg(str(self.backend_queries)) self._analyze_echo_queries()
def read_all(self, timeout=None, buffsize=None): """Read all the stream, waiting for EOS, return all responses.""" output = '' if timeout is None: timeout = float(self.config.getint( 'CLIENT_SOCKET_READ_TIMEOUT_MS')) timeout = timeout / 1000 if buffsize is None: buffsize = self.config.getint('CLIENT_SOCKET_READ_SIZE') try: output = self._socket_read(timeout, buffsize) except socket.error as msg: inmsg('#<====ABORTED RESPONSE WHILE READING: {0}'.format(str(msg))) inmsg('# <====FINAL RESPONSE===============') inmsg(output) responses = Responses().parse(output) return responses
def read_all(self, timeout=None, buffsize=None): """Read all the stream, waiting for EOS, return all responses.""" output = '' if timeout is None: timeout = float( self.config.getint('CLIENT_SOCKET_READ_TIMEOUT_MS')) timeout = timeout / 1000 if buffsize is None: buffsize = self.config.getint('CLIENT_SOCKET_READ_SIZE') try: output = self._socket_read(timeout, buffsize) except socket.error as msg: inmsg('#<====ABORTED RESPONSE WHILE READING: {0}'.format(str(msg))) inmsg('# <====FINAL RESPONSE===============') inmsg(output) responses = Responses().parse(output) return responses
def _socket_read(self, timeout, buffsize): inmsg('# <==== READING <===========') read = b'' # we use blocking socket, set short timeouts if you want # to detect end of response streams if 0 == timeout: self._sock.settimeout(None) else: self._sock.settimeout(timeout) try: # blocking read data = self._sock.recv(buffsize) while (len(data)): inmsg('# ...') read += data data = self._sock.recv(buffsize) except socket.timeout: inmsg('# read timeout({0}), nothing more is coming'.format( timeout)) return read
def _socket_read(self, timeout, buffsize): inmsg('# <==== READING <===========') read = b'' # we use blocking socket, set short timeouts if you want # to detect end of response streams if 0 == timeout: self._sock.settimeout(None) else: self._sock.settimeout(timeout) try: # blocking read data = self._sock.recv(buffsize) while (len(data)): inmsg('# ...') read += data data = self._sock.recv(buffsize) except socket.timeout: inmsg( '# read timeout({0}), nothing more is coming'.format(timeout)) return read
def _analyze_invalid_echo_queries(self, stream_mode=False): "Having a backend received query which is invalid" if self.transmission_zone is not None: if stream_mode: zone = self.backend_queries else: if self.transmission_zone is Tools.ZONE_FIRST_LINE: query = self.backend_queries[0] zone = query.first_line.raw inmsg('# zone to analyze:.') inmsg(str(zone)) if self.transmission_zone is Tools.ZONE_HEADERS: query = self.backend_queries[0] zone = b'' for header in query.headers: zone += header.raw inmsg('# zone to analyze:.') inmsg(str(zone)) if self.transmission_zone is Tools.ZONE_CHUNK_SIZE: query = self.backend_queries[0] zone = b'' if query.chunked: for chunk in query.chunks: zone += chunk.raw inmsg('# zone to analyze:.') inmsg(str(zone)) if self.transmission_map: for proof, status in Tools.iteritems(self.transmission_map): # here we manipulate bytes strings if isinstance(proof, six.string_types): # we do not use special non-ascii chars internally proof = proof.encode('ascii') if proof in zone: inmsg('# found one transmission proof,' ' status to : {0}'.format(status)) inmsg(repr(proof)) self.setStatus(status) return True self.setStatus(self.STATUS_TRANSMITTED)
def inmsg(self, message): inmsg(message, prefix=b'BACKEND> ', color='blue')
def inmsg(self, message): inmsg(message, prefix=u'BACKEND {0}> '.format(self.name), color='blue')