#!\Python27\python # -*- coding: utf-8 -*- #Εισαγωγή των βιβλιοθηκών για σύνδεση με WEB Server και #εκτέλεση του προγράμματος ως cgi import cgi,cgitb #Υποχρεωτικά πρέπει να σταλεί πρώτα η συγκεκριμένη γραμμή για να #οριστεί ότι το περιεχόμενο είναι html print "Content-type: text/html" print "" #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου menu.html #το οποίο περιέχει τον κώδικα html του μενού def printmenu(): fin=open('menu.html') print fin.read() fin.close() #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου arxiki.html #το οποίο περιέχει τον κώδικα html της αρχικής σελίδας def printarxiki(): fin=open('arxiki.html') print fin.read() fin.close() #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου omada.html #το οποίο περιέχει τον κώδικα html της σελίδας που παρουσιάζει την ομάδα υλοποίησης def printomada(): fin=open('omada.html') print fin.read() fin.close() #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου form.html #το οποίο περιέχει τον κώδικα html της σελίδας που έχει την φόρμα def printform(): fin=open('form.html') print fin.read() fin.close() #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου header.html #το οποίο περιέχει τον κώδικα html της σελίδας που έχει την επικεφαλίδα της σελίδας def printheader(): fin=open('header.html') print fin.read() fin.close() #Συνάρτηση που ανοίγει και τυπώνει τα περιεχόμενα του αρχείου footer.html #το οποίο περιέχει τον κώδικα html της σελίδας που έχει τo υποσέλιδο της σελίδας def printfooter(): fin=open('footer.html') print fin.read() fin.close() #Συνάρτηση που παίρνει παράμετρο τα δεδομένα που αποστέλει ο πελάτης (με τη φόρμα), #παίρνει τις τιμές των πεδίων και εκτελεί τον αλγόριθμο της Κατάτμησης τυπώνοντας τα αποτελέσματα def katatmisi(dt): errormsg = "" sdm=dt.getvalue('sdm') if sdm=='1': #Έλεγξε αν συμπληρώθηκε το πεδίο συνολικό μήκος if dt.getvalue('smikos')!= None: #Πάρε το συνολικό μήκος sinmikos=int(dt.getvalue('smikos')) #Παρε το μηκος επικεφαλιδας ihl=int(dt.getvalue('mepik')) ihlbytes=ihl*4 mikosded=sinmikos-ihlbytes else: #Αν δεν συμπληρώθηκε θέσε το μήνυμα λάθους errormsg = "

Πρέπει να συμπληρωθεί το πεδίο Συνολικό Μήκος

" else: #Έλεγξε αν συμπληρώθηκε το πεδίο Μήκος Δεδομένων if dt.getvalue('mikosded')!= None: mikosded=int(dt.getvalue('mikosded')) ihl=int(dt.getvalue('mepik')) ihlbytes=ihl*4 sinmikos=mikosded+ihlbytes else: #Αν δεν συμπληρώθηκε θέσε το μήνυμα λάθους errormsg = "Πρέπει να συμπληρωθεί το πεδίο Μήκος Δεδομένων" #Αν έχουμε λάθος (δεν συμπληρώθηκε κάποιο πεδίο που έπρεπε) βγάλε μήνυμα λάθους και σταμάτα if errormsg != "": print "

", errormsg, "

" return #Αν όλα πήγαν καλά συνέχισε με τα υπόλοιπα πεδία mtu=int(dt.getvalue('mtu')) df=int(dt.getvalue('df')) anagn=dt.getvalue('anagn') #Αν DF=1 δεν γίνεται Κατάτμηση οπότε βγάλε μήνυμα ενημέρωσης και σταμάτα if df==1: print "

Δεν επιτρέπεται ο τεμαχισμός (DF=1)

" return #Αν DF=1 δεν γίνεται Κατάτμηση οπότε βγάλε μήνυμα ενημέρωσης και σταμάτα if sinmikos <= mtu: print "

Δεν χρειάζεται ο τεμαχισμός (το πακέτο χωράει)

" return #Αν όλα πήγαν καλά συνέχεισε και τύπωσε αποτελέσματα #Υπολογισμός Payload Lenght pll=int((mtu-ihl*4)/8) pllbytes =pll*8 #Υπολογισμός Αριθμού Τμημάτων artm=mikosded/float(pllbytes) artmint=int(artm) #Αν δεν είναι ακέραιος πρόσθεσε +1 τμήμα if artm > artmint: artmint +=1 print "
" print '

Αποτελέσματα τεμαχισμού

' print '

Αριθμός τμημάτων:',artmint,'

' print '' print '' for i in range(1,artmint+1): print '' print '' print '' #Αν δεν είναι το τελευταίο τμήμα if i != artmint: print '' print '' else: #Αν είναι το τελευταίο τμήμα print '' print '' #Αν δεν έχει δοθεί πεδίο αναγνώρισης if anagn==None: print '' else: print '' print '' #Αν είναι το τελευταίο τμήμα τύπωσε MF=0 if i==artmint: print '' else: #Αν δεν είναι τύπωσε MF=1 print '' #Τύπωσε τη Σχετική Θέση Τμήματος print '' print '' print '
ΤμήμαΜήκος
Επικεφαλίδας
(4άδες bytes)
Συνολικό
μήκος
(bytes)
Μήκος
Δεδομένων
bytes)
ΑναγνώρισηDFMFΣχετική θέση
τμήματος
(8άδες bytes)
',i,'',ihl,'',pllbytes+ihlbytes,'',pllbytes,'',mikosded- (artmint-1)*pllbytes+ihlbytes,'',mikosded- (artmint-1)*pllbytes,'Ίδιο με το αρχικό',anagn,'',df,'01',(i-1)*pll,'
' print "
" print '

' printheader() printmenu() #Πάρε στο data όλα τα ζεύγη ιδιότητα=τιμή που μας στέλνει ο πελάτης data=cgi.FieldStorage() #Αν υπάρχει το πεδίο page δείξε την σελίδα απου λέει if "page" in data: pagesel=data.getvalue("page") else: #Αν δεν υπάρχει το πεδίο page δείξε την αρχική σελίδα pagesel=1 if pagesel=="1": #Αν page=1 δείξε την αρχική σελίδα printarxiki() elif pagesel=="2": #Αν page=2 δείξε τη σελίδα Κατάτμησης print '

Τεμαχισμός-Κατάτμηση

' printform() #Αν έστειλε και τη φόρμα κάλεσε τη συνάρτηση του αλγορίθμου Κατάτμησης if "sdm" in data: katatmisi(data) elif pagesel=="3":#Αν page=3 δείξε τη σελίδα της ομάδας υλοποίησης printomada() else:#Αλλιώς δείξε μήνυμα λάθος σελίδας print "

Δεν υπάρχει η σελίδα που ζητάτε. Παρακαλώ χρησιμοποιείστε το μενού.

" printfooter()