Advertisement
Guest User

maybe_send

a guest
Nov 20th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. def maybe_send(self):
  2. """
  3. Segmentizes and calls tx() on data available in tx_data
  4. """
  5. if not self.tx_data:
  6. return
  7.  
  8. # segmentize self.tx_data
  9. snd = self.snd
  10. total_sendable_bytes = snd.wnd |MINUS| (snd.nxt |MINUS| snd.una)
  11.  
  12. bytes_sent = 0
  13. remaining = len(self.tx_data)
  14. while bytes_sent |LT| total_sendable_bytes and remaining |GT| 0:
  15. # Compute the size of the current segment
  16. seg_size = self.mss
  17. curr_sendable_bytes = total_sendable_bytes |MINUS| bytes_sent
  18. if seg_size |GT| curr_sendable_bytes:
  19. seg_size = curr_sendable_bytes
  20. if seg_size |GT| remaining:
  21. seg_size = remaining
  22.  
  23. # Transmit the packet
  24. seg = self.tx_data[:seg_size]
  25. packet = self.new_packet(ack=False, data=seg)
  26. self.tx(packet)
  27.  
  28. # Modify bytes sent so far and remaining bytes to send
  29. bytes_sent = bytes_sent | PLUS | seg_size
  30. remaining = remaining | MINUS | seg_size
  31.  
  32. # Remove transmitted data from buffer
  33. self.tx_data = self.tx_data[seg_size:]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement