#MODIFICATIONS TO WEB2PY #1.) gluon/main.py line 324 if static_file: if eget('QUERY_STRING', '').startswith('attachment'): response.headers['Content-Disposition'] \ = 'attachment' if version: response.headers['Cache-Control'] = 'max-age=315360000' response.headers[ 'Expires'] = 'Thu, 31 Dec 2037 23:59:59 GMT' ### BEGIN MODIFICATIONS BY DAN BURGER ### if os.path.exists(static_file+".gz") and ("gzip" in request.env.http_accept_encoding): response.headers['Content-Encoding'] = 'gzip' response.headers['Vary'] = 'Accept-Encoding' response.stream(static_file+'.gz',request=request) else: response.stream(static_file, request=request) ### END MODIFICATIONS BY DAN BURGER ### #2.) gluon/rocket.py line 525 def wrap_socket(self, sock): try: ### BEGIN MODIFICATIONS BY DAN BURGER ### context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) context.options |= ssl.OP_NO_SSLv2 context.options |= ssl.OP_NO_SSLv3 context.options |= ssl.OP_SINGLE_ECDH_USE context.options |= ssl.OP_CIPHER_SERVER_PREFERENCE context.load_cert_chain(certfile=self.interface[3], keyfile=self.interface[2]) context.load_dh_params('/home/www-data/geotrust/dhparam2048.pem') context.set_ciphers('EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4') context.set_ecdh_curve("prime256v1") sock = context.wrap_socket(sock,server_side=True) """if self.clientcert_req: ca_certs = self.interface[4] cert_reqs = ssl.CERT_OPTIONAL sock = ssl.wrap_socket(sock, keyfile=self.interface[2], certfile=self.interface[3], server_side=True, cert_reqs=cert_reqs, ca_certs=ca_certs, ssl_version=ssl.PROTOCOL_SSLv23) else: sock = ssl.wrap_socket(sock, keyfile=self.interface[2], certfile=self.interface[3], server_side=True, ssl_version=ssl.PROTOCOL_SSLv23)""" ### END MODIFICATIONS BY DAN BURGER ### except SSLError: # Generally this happens when an HTTP request is received on a # secure socket. We don't do anything because it will be detected # by Worker and dealt with appropriately. pass return sock #3.) gluon/contenttype.py line 846 def contenttype(filename, default='text/plain'): """ Returns the Content-Type string matching extension of the given filename. """ ### BEGIN MODIFICATIONS BY DAN BURGER ### if filename.endswith(".gz"): fname = filename[:-3] else: fname = filename ### END MODIFICATIONS BY DAN BURGER ### #4.) gluon/scheduler.py line 1035 if counter % 5 == 0 or mybackedstatus == PICK: try: # delete dead workers expiration = now - datetime.timedelta( seconds=self.heartbeat * 3) departure = now - datetime.timedelta( seconds=self.heartbeat * 3 * 15) logger.debug( ' freeing workers that have not sent heartbeat') dead_workers = db( ((sw.last_heartbeat < expiration) & (sw.status == ACTIVE)) | ((sw.last_heartbeat < departure) & (sw.status != ACTIVE)) ) dead_workers_name = dead_workers._select(sw.worker_name) ### BEGIN MODIFICATIONS BY DAN BURGER ### yyy = db( (st.assigned_worker_name.belongs(dead_workers_name)) & (st.status == RUNNING) ).select() for yy in yyy: yy.update_record(assigned_worker_name='', status=QUEUED) dead_workers_select = dead_workers.select() for dws in dead_workers_select: db(sw.id==dws.id).delete() ### END MODIFICATIONS BY DAN BURGER ### #db( # (st.assigned_worker_name.belongs(dead_workers_name)) & # (st.status == RUNNING) # ).update(assigned_worker_name='', status=QUEUED) #dead_workers.delete() try: self.is_a_ticker = self.being_a_ticker() except: logger.error('Error coordinating TICKER') if self.w_stats.status == ACTIVE: self.do_assign_tasks = True except: logger.error('Error cleaning up') db.commit()