(self)
| 191 | self._recvMessages() |
| 192 | |
| 193 | def _recvMessages(self): |
| 194 | for key, events in self._selector.select(0): |
| 195 | if self._quitEvent.is_set(): |
| 196 | break |
| 197 | |
| 198 | sock = cast(socket.socket, key.fileobj) |
| 199 | |
| 200 | try: |
| 201 | data, addr = sock.recvfrom(BUFFER_SIZE) |
| 202 | except socket.error: |
| 203 | time.sleep(0.01) |
| 204 | continue |
| 205 | |
| 206 | try: |
| 207 | env = parseSOAPMessage(data, addr[0]) |
| 208 | except Exception as e: |
| 209 | logger.debug("Failed to parse message from %s\n%s: %s", addr[0], data, e, exc_info=True) |
| 210 | env = None |
| 211 | |
| 212 | if env is None: # fault or failed to parse |
| 213 | if self._capture: |
| 214 | self._capture.write( |
| 215 | "%i WARNING: BAD RECV %s:%s TS=%s\n" % (self._seqnum, addr[0], addr[1], time.time() - self.t0)) |
| 216 | self._capture.write(dom2Str(data)) |
| 217 | self._seqnum += 1 |
| 218 | continue |
| 219 | |
| 220 | _own_addrs = self._observer._addrsMonitorThread_v4._addrs |
| 221 | if addr[0] not in _own_addrs: |
| 222 | if env.getAction() == NS_ACTION_PROBE_MATCH: |
| 223 | prms = "\n ".join((str(prm) for prm in env.getProbeResolveMatches())) |
| 224 | msg = "probe response from %s:\n --- begin ---\n%s\n--- end ---\n" |
| 225 | logger.debug(msg, addr[0], prms) |
| 226 | |
| 227 | if self._capture: |
| 228 | self._capture.write( |
| 229 | "%i RECV %s:%s TS=%s\n" % (self._seqnum, addr[0], addr[1], time.time() - self.t0)) |
| 230 | self._capture.write(dom2Str(data)) |
| 231 | self._seqnum += 1 |
| 232 | |
| 233 | mid = env.getMessageId() |
| 234 | if mid in self._knownMessageIds: |
| 235 | if self._relates_to and env.getRelatesTo() in self._knownMessageIds: |
| 236 | pass |
| 237 | else: |
| 238 | continue |
| 239 | else: |
| 240 | if self._capture: |
| 241 | self._capture.write("NEW KNOWN MSG IDS %s\n" % (mid)) |
| 242 | self._knownMessageIds.add(mid) |
| 243 | |
| 244 | iid = env.getInstanceId() |
| 245 | if len(iid) > 0 and int(iid) >= 0: |
| 246 | mnum = env.getMessageNumber() |
| 247 | key = addr[0] + ":" + str(addr[1]) + ":" + str(iid) |
| 248 | if mid is not None and len(mid) > 0: |
| 249 | key = key + ":" + mid |
| 250 | if key not in self._iidMap: |
no test coverage detected