MCPcopy Create free account
hub / github.com/andreikop/python-ws-discovery / _recvMessages

Method _recvMessages

wsdiscovery/threaded.py:193–259  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

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:

Callers 1

runMethod · 0.95

Calls 10

parseSOAPMessageFunction · 0.85
dom2StrFunction · 0.85
getActionMethod · 0.80
joinMethod · 0.80
getMessageIdMethod · 0.80
getRelatesToMethod · 0.80
envReceivedMethod · 0.80
getInstanceIdMethod · 0.45
getMessageNumberMethod · 0.45

Tested by

no test coverage detected