55 def __init__(self,port=PORTServer):
56 self.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
58 sockLogger.log(9,str(self.
s))
60 Hostname=os.getenv(
"HOSTNAME", os.getenv(
'COMPUTERNAME', platform.node())).split(
'.')[0]
61 HelloMsg=(
'Connection from '+Hostname).encode(
'utf-8').ljust(MSGsize,b
'\00')
62 sockLogger.warning(HelloMsg.rstrip(b
'\00'))
63 self.
s.sendall(HelloMsg)
65 data = self.
s.recv(MSGsize).rstrip(b
'\00')
66 sockLogger.info(
'Received my hostname from server : %s' % (repr(data)))
68 def send_server(self,command):
69 sockLogger.log(9,
"Send command '%s' to server." % (command))
70 self.
s.sendall(command.replace(
" ",
" ").encode(
'utf-8').ljust(MSGsize,b
'\00'))
74 sockLogger.log(9,
"Wait for receive %d octets." % (nb))
76 data = self.
s.recv(nb)
77 except socket.error
as serr:
78 if serr.errno != errno.ECONNREFUSED:
82 sockLogger.error(
"Error not ECONNREFUSED.")
83 sockLogger.error(
"Error with connection to server. we quit with error %s " % (str(serr.errno)))
88 if not data:
return False
90 data_ = str(data.rstrip(b
'\x00').decode(
'utf-8'))
95 sockLogger.log(9,
"Receive '%s' from server." % (messg))
98 def send_OK(self,iRET):
99 if not type(iRET)==int:
100 sockLogger.log(9,
"iRET"+str(type(iRET)))
101 self.
s.sendall(
'ff'.encode(
'utf-8'))
103 sRET=hex(iRET).replace(
'0x',
"").encode(
'utf-8')
107 sRET=sRET[(len(sRET)-2):len(sRET)]
112 sockLogger.log(9,
"Wait for OK from server : "+str(RET))
114 if not RET:
return intRET
118 sockLogger.error(
"OK error from server : "+str(RET)+self.
receive(MSGsize-2))
121 def send_file(self, path, filename):
122 filein=os.path.join(path,filename)
123 sockLogger.warning(
"Send data from file %s." % (filein))
126 filesize=os.path.getsize(filein)
127 f = open(filein,
'rb')
128 if (filesize < MSGsize):
129 l = f.read(filesize).ljust(MSGsize,b
'\00')
136 totbyte=totbyte+MSGsize
139 rest=filesize-totbyte;
140 if (rest > MSGsize ):
144 l = f.read(rest).ljust(MSGsize,b
'\00')
151 sockLogger.warning(
"File sent.")
153 def get_file(self, path, filename, filesize, filesha256):
154 fileout=os.path.join(path,os.path.basename(filename))
155 sockLogger.info(
"Wait for data of size %d and hash %s." % (filesize,filesha256))
156 sockLogger.warning(
"Write data received from server in file %s." % (fileout))
159 Date=datetime.datetime.isoformat(datetime.datetime.now(),sep=
'_').replace(
":",
"-")
160 if (os.path.exists(fileout)):
162 fileout=fileout+
'_'+Date
163 sockLogger.error(
"Can't overwrite existing file %s. Add date : %s" % (fileout_, fileout))
166 f=open(fileout,
'wb')
172 data = self.
s.recv(MSGsize)
175 totbyte=totbyte+MSGsize
176 if totbyte < filesize:
178 sockLogger.log(9,
'data %d inf %d=%s' % (totbyte,filesize,str(data)))
180 data=data.rstrip(b
'\x00')
181 sockLogger.log(9,
'data rest %d=%s' % (totbyte-filesize,str(data)))
185 except socket.error
as serr:
186 sockLogger.error(
"Error with downloading file %s from %d : %s" % (str(fileout),id,str(serr)))
187 except Exception
as e:
188 sockLogger.error(
"Unknown error with downloading file %s from %d : %s" % (str(fileout),id,str(e)))
191 sockLogger.log(9,
'Test for size and sha256 ')
192 outsize = os.path.getsize(fileout)
195 if (
not outsize == filesize ):
196 sockLogger.error(
"File %s downloaded hasn't the size %d given by client : %d.\n It will be removed." % (fileout, filesize, outsize))
201 filed=open(fileout,
'rb')
202 outsha256=hashfile(readblock(filed))
203 if ( outsha256 != filesha256 ):
204 sockLogger.error(
"File %s downloaded hasn't the size %d given by client : %d.\n It will be removed." % (fileout, filesize, outsize))
216 def __init__(self, serverPORT):
217 self.
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
218 self.
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
219 self.
tcpsock.bind((
"",serverPORT))
225 def new_connect(self,id):
226 (clientsocket, (ip, port)) = self.
tcpsock.accept()
230 sockLogger.warning(
"Accept port %d" % (port))
231 sockLogger.info(
"Accept %s ip %s port %d" % (str(clientsocket), str(ip), port))
233 def send_client(self,id,command):
234 self.
clientsocket[id].sendall(command.replace(
" ",
" ").encode(
'utf-8').ljust(MSGsize,b
'\00'))
240 def receive(self,id,nb):
241 sockLogger.log(9,
"Wait from %d client for receive %d octets." % (id,nb))
244 except socket.error
as serr:
245 if serr.errno != errno.ECONNREFUSED:
249 sockLogger.error(
"Not ECONNREFUSED.")
250 sockLogger.error(
"Error with connection on client : %d . We quit with error %d " % (id , serr.errno))
255 if not data:
return False
256 data_ = str(data.rstrip(b
'\x00').decode(
'utf-8'))
260 sockLogger.log(9,
"wait for receive %d octets." % (MSGsize))
261 return self.
receive(id,MSGsize)
263 def send_OK(self,id,iRET):
264 sockLogger.log(9,
"Send to %d status %d." % (id,iRET))
265 sRET=hex(iRET).replace(
'0x',
"").encode(
'utf-8')
269 sRET=sRET[(len(sRET)-2):len(sRET)]
273 sockLogger.log(9,
"Wait for OK from %d." % (id))
275 if not RET:
return -1
279 sockLogger.error(9,
" from OK from %d.: %s" % (id,str(RET)))
283 def get_file(self, id, path, filename, filesize, filesha256):
284 fileout=os.path.join(path,os.path.basename(filename))
285 sockLogger.warning(
"Write data received from %d in file %s." % (id,fileout))
286 sockLogger.info(
"Wait for data of size %d and hash %s." % (filesize,filesha256))
287 Date=datetime.datetime.isoformat(datetime.datetime.now(),sep=
'_').replace(
":",
"-")
288 if (os.path.exists(fileout)):
290 fileout=fileout+
'_'+Date
291 sockLogger.error(
"Can't overwrite existing file %s. Add date : %s" % (fileout_, fileout))
294 f=open(fileout,
'wb')
303 totbyte=totbyte+MSGsize
304 if totbyte < filesize:
308 data=data.rstrip(b
'\x00')
313 except socket.error
as serr:
314 sockLogger.error(
"Error with downloading file %s from %d : %s" % (str(fileout),id,str(serr)))
315 except Exception
as e:
316 sockLogger.error(
"Unknown error with downloading file %s from %d : %s" % (str(fileout),id,str(e)))
319 sockLogger.log(9,
'Test for size and sha256 ')
320 outsize = os.path.getsize(fileout)
323 if (
not outsize == filesize ):
324 sockLogger.error(
"File %s downloaded hasn't the size %d given by client : %d.\n It will be removed." % (fileout, filesize, outsize))
329 filed=open(fileout,
'rb')
330 outsha256=hashfile(readblock(filed))
331 if ( outsha256 != filesha256 ):
332 sockLogger.error(
"File %s downloaded hasn't the size %d given by client : %d.\n It will be removed." % (fileout, filesize, outsize))
338 def send_file(self,id,path,filename):
339 filein=os.path.join(path,filename)
340 sockLogger.warning(
"Send data from file %s." % (filein))
342 if (os.path.exists(filein)):
344 filesize = os.path.getsize(filein)
345 filed=open(filein,
'rb')
346 filesha256=hashfile(readblock(filed))
352 command=
"fileinfos %s %d %s" % (filename,filesize,filesha256)
353 sockLogger.info(
"Fileinfos sent to %d : %s." % (id,command))
355 sockLogger.warning(
"Fileinfos sent : %s." % (str(self.
get_OK(id))))
357 f = open(filein,
'rb')
358 if (filesize < MSGsize):
359 l = f.read(filesize).ljust(MSGsize,b
'\00')
366 totbyte=totbyte+MSGsize
369 rest=filesize-totbyte;
370 if (rest > MSGsize ):
374 l = f.read(rest).ljust(MSGsize,b
'\00')
381 sockLogger.warning(
"File sent : %s." % (str(self.
get_OK(id))))
383 return (filesize,filesha256)
385 FileERROR=
"File %s does not exist." % (filein)
386 sockLogger.error(FileERROR)
395 sockLogger.warning(
"Close client %d server %s." % (id,str(self.
tcpsock)))
399 sockLogger.warning(
"Close server %s." % (str(self.
tcpsock)))