/
netmanager.py
63 lines (55 loc) · 1.81 KB
/
netmanager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python
from twisted.internet.protocol import DatagramProtocol
from logger import Logger
from dbmanager import DbManager
from msgmanager import MsgManager
import ndutil
import os
import shutil
from Queue import Queue
import threading
class NetManager(DatagramProtocol):
def setNdlCom(self, logger):
self.logger = logger
self.msgManager = MsgManager()
def setDbManager(self, dbManager):
self.dbManager = dbManager
def setFsQueue(self, fsQueue, fsLock):
self.fsQueue = fsQueue
self.fsLock = fsLock
def datagramReceived(self, data, (host, port)):
self.logger.logger('Request from %s:%d' % (host, port))
self.dispatch(data, host, port)
def dispatch(self, data, host, port):
retCode, result = self.msgManager.resRequest(data)
if retCode != 0:
self.logger.logger('Error Request')
else:
responseData = {}
if result['request'] == 'scan':
self.logger.logger('Request: SCAN')
if not os.path.isfile(result['path']):
responseData['response'] = 1
else:
hashval = ndutil.getMd5(result['path'])
reqTime = ndutil.getCreated()
fileSize = ndutil.getSize(result['path'])
if (fileSize/1024/1024) >= 32:
responseData['response'] = 1
else:
scanCode, scanResult = self.dbManager.scan(reqTime, result['path'], hashval)
if scanCode == 0:
responseData['response'] = 0
nums = scanResult.split('/', 1)
responseData['hashval'] = hashval
responseData['positive'] = nums[0]
responseData['total'] = nums[1]
if scanCode == 1:
responseData['response'] = 2
if scanCode == 2:
responseData['response'] = 2
self.fsLock.acquire()
self.fsQueue.put('%s,%s' % (hashval, result['path']), 1)
self.fsLock.release()
msg = self.msgManager.genResponse(responseData)
self.transport.write(msg, (host, port))