Starchik1 commited on
Commit
4998714
·
verified ·
1 Parent(s): 6048a58

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +33 -43
main.py CHANGED
@@ -1,61 +1,51 @@
1
- from flask import Flask, request, jsonify, Response
2
  import random
3
  import string
4
- import threading
5
- from queue import Queue
6
 
7
  app = Flask(__name__)
8
- transfer_queues = {}
9
- lock = threading.Lock()
10
 
11
  def generate_id():
12
  return ''.join(random.choices(string.ascii_letters + string.digits, k=8))
13
 
14
  @app.route('/create_transfer', methods=['POST'])
15
  def create_transfer():
16
- transfer_id = generate_id()
17
  with lock:
18
- transfer_queues[transfer_id] = {
19
- 'queue': Queue(maxsize=10),
 
 
20
  'filename': request.json['filename'],
21
- 'active': False
22
  }
23
- return jsonify({'transfer_id': transfer_id})
24
 
25
- @app.route('/upload/<transfer_id>', methods=['POST'])
26
- def upload(transfer_id):
27
- if transfer_id not in transfer_queues:
28
- return jsonify({'error': 'Invalid ID'}), 404
29
-
30
- chunk = request.data
31
- try:
32
- transfer_queues[transfer_id]['queue'].put(chunk, timeout=30)
33
- return jsonify({'status': 'ok'})
34
- except:
35
- return jsonify({'error': 'Receiver not connected'}), 408
36
 
37
- @app.route('/download/<transfer_id>')
38
- def download(transfer_id):
39
- def generate():
40
- with lock:
41
- if transfer_id not in transfer_queues:
42
- yield 'Transfer ID invalid'
43
- return
44
-
45
- transfer = transfer_queues[transfer_id]
46
- transfer['active'] = True
47
-
48
- try:
49
- while True:
50
- chunk = transfer['queue'].get(timeout=30)
51
- yield chunk
52
- except:
53
- transfer_queues.pop(transfer_id, None)
54
 
55
- headers = {
56
- 'Content-Disposition': f'attachment; filename="{transfer_queues[transfer_id]["filename"]}"'
57
- }
58
- return Response(generate(), mimetype='application/octet-stream', headers=headers)
 
 
59
 
60
  if __name__ == '__main__':
61
- app.run(host='0.0.0.0', port=5000, threaded=True)
 
1
+ from flask import Flask, request, jsonify
2
  import random
3
  import string
4
+ from threading import Lock
 
5
 
6
  app = Flask(__name__)
7
+ lock = Lock()
8
+ transfers = {}
9
 
10
  def generate_id():
11
  return ''.join(random.choices(string.ascii_letters + string.digits, k=8))
12
 
13
  @app.route('/create_transfer', methods=['POST'])
14
  def create_transfer():
 
15
  with lock:
16
+ transfer_id = generate_id()
17
+ transfers[transfer_id] = {
18
+ 'sender': None,
19
+ 'receiver': None,
20
  'filename': request.json['filename'],
21
+ 'filesize': request.json['filesize']
22
  }
23
+ return jsonify({'transfer_id': transfer_id})
24
 
25
+ @app.route('/register_sender/<transfer_id>', methods=['POST'])
26
+ def register_sender(transfer_id):
27
+ with lock:
28
+ transfers[transfer_id]['sender'] = {
29
+ 'ip': request.remote_addr,
30
+ 'port': request.json['port']
31
+ }
32
+ return jsonify({'status': 'sender registered'})
 
 
 
33
 
34
+ @app.route('/register_receiver/<transfer_id>', methods=['POST'])
35
+ def register_receiver(transfer_id):
36
+ with lock:
37
+ transfers[transfer_id]['receiver'] = {
38
+ 'ip': request.remote_addr,
39
+ 'port': request.json['port']
40
+ }
41
+ return jsonify({'status': 'receiver registered'})
 
 
 
 
 
 
 
 
 
42
 
43
+ @app.route('/get_peer_info/<transfer_id>')
44
+ def get_peer_info(transfer_id):
45
+ return jsonify({
46
+ 'sender': transfers.get(transfer_id, {}).get('sender'),
47
+ 'receiver': transfers.get(transfer_id, {}).get('receiver')
48
+ })
49
 
50
  if __name__ == '__main__':
51
+ app.run(host='0.0.0.0', port=5000)