(self, payload, trans)
| 137 | return self.conn_id |
| 138 | |
| 139 | def _process_announce(self, payload, trans): |
| 140 | response = {} |
| 141 | |
| 142 | info_struct = '!LLL' |
| 143 | info_size = struct.calcsize(info_struct) |
| 144 | info = payload[:info_size] |
| 145 | interval, leechers, seeders = struct.unpack(info_struct, info) |
| 146 | |
| 147 | peer_data = payload[info_size:] |
| 148 | peer_struct = '!LH' |
| 149 | peer_size = struct.calcsize(peer_struct) |
| 150 | peer_count = int(len(peer_data) / peer_size) |
| 151 | peers = [] |
| 152 | |
| 153 | for peer_offset in range(peer_count): |
| 154 | off = peer_size * peer_offset |
| 155 | peer = peer_data[off:off + peer_size] |
| 156 | addr, port = struct.unpack(peer_struct, peer) |
| 157 | peers.append({ |
| 158 | 'addr': socket.inet_ntoa(struct.pack('!L', addr)), |
| 159 | 'port': port, |
| 160 | }) |
| 161 | |
| 162 | return { |
| 163 | 'interval': interval, |
| 164 | 'leechers': leechers, |
| 165 | 'seeders': seeders, |
| 166 | 'peers': peers, |
| 167 | } |
| 168 | |
| 169 | def _process_scrape(self, payload, trans): |
| 170 | info_struct = '!LLL' |
no test coverage detected