Changeset 2942
- Timestamp:
- 08/10/05 17:59:55 (3 years ago)
- Location:
- trunk/src/common
- Files:
-
- 2 modified
-
connection.py (modified) (4 diffs)
-
socks5.py (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/common/connection.py
r2922 r2942 524 524 except: # this bytestream result is not what we need 525 525 pass 526 if streamhost is None:527 # proxy approves the activate query528 raise common.xmpp.NodeProcessed529 jid = streamhost.getAttr('jid')530 526 id = real_id[3:] 531 527 if self.files_props.has_key(id): … … 533 529 else: 534 530 raise common.xmpp.NodeProcessed 535 file_props['type'] 531 if streamhost is None: 532 # proxy approves the activate query 533 if real_id[:3] == 'au_': 534 id = real_id[3:] 535 if not file_props.has_key('streamhost-used') or \ 536 file_props['streamhost-used'] is False: 537 raise common.xmpp.NodeProcessed 538 if not file_props.has_key('proxyhosts'): 539 raise common.xmpp.NodeProcessed 540 for host in file_props['proxyhosts']: 541 if host['initiator'] == frm and \ 542 str(query.getAttr('sid')) == file_props['sid']: 543 gajim.socks5queue.activate_proxy(host['idx']) 544 break 545 raise common.xmpp.NodeProcessed 546 jid = streamhost.getAttr('jid') 536 547 if file_props.has_key('streamhost-used') and \ 537 548 file_props['streamhost-used'] is True: … … 570 581 raise common.xmpp.NodeProcessed 571 582 583 def remove_all_transfers(self): 584 ''' stops and removes all active connections from the socks5 pool ''' 585 for file_props in self.files_props.values(): 586 self.remove_transfer(file_props, remove_from_list = False) 587 del(self.files_props) 588 self.files_props = {} 589 590 def remove_transfer(self, file_props, remove_from_list = True): 591 if file_props.has_key('hash'): 592 gajim.socks5queue.remove_sender(file_props['hash']) 593 594 if file_props.has_key('streamhosts'): 595 for host in file_props['streamhosts']: 596 if host['idx'] > 0: 597 gajim.socks5queue.remove_receiver(host['idx']) 598 gajim.socks5queue.remove_sender(host['idx']) 599 sid = file_props['sid'] 600 gajim.socks5queue.remove_file_props(self.name, sid) 601 602 if remove_from_list: 603 if self.files_props.has_key('sid'): 604 del(self.files_props['sid']) 605 606 def disconnect_transfer(self, file_props): 607 if file_props.has_key('hash'): 608 gajim.socks5queue.remove_sender(file_props['hash']) 609 610 if file_props.has_key('streamhosts'): 611 for host in file_props['streamhosts']: 612 if host['idx'] > 0: 613 gajim.socks5queue.remove_receiver(host['idx']) 614 gajim.socks5queue.remove_sender(host['idx']) 615 572 616 def proxy_auth_ok(self, proxy): 573 617 '''cb, called after authentication to proxy server ''' … … 1385 1429 if msg: 1386 1430 p.setStatus(msg) 1431 self.remove_all_transfers() 1387 1432 if self.connection: 1388 1433 self.connection.send(p) -
trunk/src/common/socks5.py
r2916 r2942 36 36 self.files_props = {} 37 37 self.senders = {} 38 self.idx = 038 self.idx = 1 39 39 self.listener = None 40 40 self.sha_handlers = {} … … 61 61 if proxy == streamhost: 62 62 self.on_success(streamhost) 63 return True64 return False63 return 2 64 return 0 65 65 if file_props.has_key('streamhosts'): 66 66 for host in file_props['streamhosts']: 67 if streamhost['state'] == 1 and host != streamhost:68 return False67 if streamhost['state'] == 1: 68 return 0 69 69 streamhost['state'] = 1 70 70 self.on_success(streamhost) 71 return True72 return False71 return 1 72 return 0 73 73 74 74 def connect_to_hosts(self, account, sid, on_success = None, … … 145 145 props = self.sha_handlers[sha_str] 146 146 props[0](props[1], idx) 147 147 def activate_proxy(self, idx): 148 if not self.readers.has_key(idx): 149 return 150 reader = self.readers[idx] 151 if reader.file_props['type'] != 's': 152 return 153 if reader.state != 5: 154 return 155 reader.state = 6 156 if reader.connected: 157 reader.fd = open(reader.file_props['file-name']) 158 reader.file_props['error'] = 0 159 reader.file_props['disconnect_cb'] = reader.disconnect 160 reader.file_props['started'] = True 161 reader.file_props['completed'] = False 162 reader.file_props['paused'] = False 163 reader.file_props['stalled'] = False 164 reader.file_props['received-len'] = 0 165 reader.pauses = 0 166 reader.send_raw(reader._get_nl_byte()) 167 result = reader.write_next() 168 self.process_result(result, reader) 169 148 170 def send_file(self, file_props, account): 149 171 if file_props.has_key('hash') and \ … … 171 193 self.files_props[account] = {} 172 194 self.files_props[account][_id] = file_props 195 196 def remove_file_props(self, account, sid): 197 if self.files_props.has_key(account): 198 fl_props = self.files_props[account] 199 if fl_props.has_key(sid): 200 del(fl_props[sid]) 201 202 if len(self.files_props) == 0: 203 self.connected = 0 173 204 174 205 def get_file_props(self, account, sid): … … 241 272 result = receiver.main(0) 242 273 self.process_result(result, receiver) 274 elif receiver.state == 5: # wait for proxy reply 275 pass 243 276 else: 244 277 if receiver.file_props['type'] == 'r': … … 267 300 actor.file_props) 268 301 269 def remove_receiver(self, idx ):302 def remove_receiver(self, idx, do_disconnect = True): 270 303 ''' Remove reciver from the list and decrease 271 304 the number of active connections with 1''' 272 305 if idx != -1: 273 306 if self.readers.has_key(idx): 274 if self.readers[idx].streamhost is not None: 275 self.readers[idx].streamhost['state'] = -1 276 del(self.readers[idx]) 277 278 def remove_sender(self, idx): 307 if do_disconnect: 308 self.readers[idx].disconnect() 309 else: 310 if self.readers[idx].streamhost is not None: 311 self.readers[idx].streamhost['state'] = -1 312 del(self.readers[idx]) 313 314 def remove_sender(self, idx, do_disconnect = True): 279 315 ''' Remove reciver from the list of senders and decrease the 280 316 number of active connections with 1''' 281 317 if idx != -1: 282 318 if self.senders.has_key(idx): 283 del(self.senders[idx]) 284 if self.connected > 0: 285 self.connected -= 1 319 if do_disconnect: 320 self.senders[idx].disconnect() 321 else: 322 del(self.senders[idx]) 323 if self.connected > 0: 324 self.connected -= 1 286 325 287 326 class Socks5: … … 650 689 ''' Closes the socket. ''' 651 690 # close connection and remove us from the queue 652 self._sock.close() 691 try: 692 self._sock.close() 693 except: 694 pass 653 695 self.connected = False 654 696 if self.file_props is not None: … … 656 698 self.file_props['disconnect_cb'] = None 657 699 if self.queue is not None: 658 self.queue.remove_sender(self.queue_idx )700 self.queue.remove_sender(self.queue_idx, False) 659 701 660 702 class Socks5Listener: … … 741 783 self.connected = True 742 784 self.file_props['connected'] = True 785 self.file_props['disconnect_cb'] = self.disconnect 743 786 self.state = 1 # connected 744 787 self.queue._socket_connected(self.streamhost, self.file_props) … … 747 790 def main(self, timeout = 0): 748 791 ''' begin negotiation. on success 'address' != 0 ''' 792 result = 1 749 793 if self.state == 1: # send initially: version and auth types 750 794 self.send_raw(self._get_auth_buff()) … … 780 824 self.state = 5 # for senders: init file_props and send '\n' 781 825 if self.queue.on_success: 782 if not self.queue.send_success_reply(self.file_props, 783 self.streamhost): 826 result = self.queue.send_success_reply(self.file_props, 827 self.streamhost) 828 if result == 0: 784 829 self.state = 8 785 830 self.disconnect() 786 if self.state == 5: # for senders: init file_props and send '\n' 831 832 # for senders: init file_props and send '\n' 833 if result == 1 and self.state == 5: 787 834 if self.file_props['type'] == 's': 788 835 self.fd = open(self.file_props['file-name']) … … 797 844 self.send_raw(self._get_nl_byte()) 798 845 self.state = 6 # send/get file contents 799 if self.state < 6:846 if self.state < 5: 800 847 self.state += 1 801 848 return None … … 819 866 # close connection and remove us from the queue 820 867 if self._sock: 821 self._sock.close() 868 try: 869 self._sock.close() 870 except: 871 pass 822 872 self.connected = False 823 873 if cb is True: 824 874 self.file_props['disconnect_cb'] = None 825 875 if self.queue is not None: 826 self.queue.remove_receiver(self.queue_idx )876 self.queue.remove_receiver(self.queue_idx, False)
