// FTP
var text = "";
var protokollaTila = -1;
var hosts = {
"h1": "FTP_Asiakas",
"h2": "FTP_Palvelin"
};
var port = [21, 52247, 52828];
var porttiInd = 0;
var synArray = new Array("Avataanko yhteys? (TCP SYN)", "Avataan yhteys, ok? (TCP SYNACK)", "OK! (TCP ACK)");
var ftpArray = new Array("220 FTP Palvelin valmis", "USER anonymous", "331 Please specify the password.", "PASS anonymous", "230 Login successful.", "EPSV", "229 Extended Passive Mode Entered (|||52247|)", "LIST", "150 Here comes the directory listing.", "", "226 Directory send OK.", "QUIT", "221 Goodbye.");
var finArray = new Array("Suljetaanpa yhteys (TCP FIN)", "Suljetaan yhteys (TCP FIN)", "Okei! (TCP ACK)", "Ookoo! (TCP ACK)");
var listArray = new Array("-rw-r--r-- 1 ftp ftp 528 Nov 01 2007 README",
"-rw-r--r-- 1 ftp ftp 561 Oct 03 2012 index.html",
"drwxr-xr-x 41 ftp ftp 4096 Mar 06 15:38 pub");
$(document).ready(function() {
alusta();
piirra();
$('a').click(function(event) {
var tila = this.id;
switch (tila) {
case "ftp":
switch (protokollaTila) {
case -1:
$('#ftp').fadeOut(500);
$('#ftp').fadeIn(500, function() {
$('#ftp').html('Seuraava viesti');
});
protokollaTila += 1;
// no break -> flow through
case 0:
case 2:
piirra_nuoli("h1", "h2", synArray[protokollaTila], port[porttiInd]);
if (porttiInd === 0) {
protokollaTila += 1;
} else if (porttiInd === 1 && protokollaTila === 2) {
protokollaTila = 10;
porttiInd = 0;
} else {
protokollaTila += 1;
}
break;
case 1:
piirra_nuoli("h2", "h1", synArray[protokollaTila], port[porttiInd]);
protokollaTila += 1;
break;
case 3:
case 5:
case 7:
case 11:
case 13:
case 15:
piirra_nuoli("h2", "h1", ftpArray[protokollaTila - 3], port[porttiInd]);
protokollaTila += 1;
break;
case 9:
piirra_nuoli("h2", "h1", ftpArray[protokollaTila - 3], port[porttiInd]);
protokollaTila = 0;
porttiInd = 1;
break;
case 4:
case 6:
case 8:
case 10:
case 14:
piirra_nuoli("h1", "h2", ftpArray[protokollaTila - 3], port[porttiInd]);
protokollaTila += 1;
break;
case 12:
porttiInd = 1;
piirra_nuoli("h2", "h1", listArray[0], port[porttiInd]);
piirra_nuoli("h2", "h1", listArray[1], port[porttiInd]);
piirra_nuoli("h2", "h1", listArray[2], port[porttiInd]);
protokollaTila = 16;
break;
case 16:
case 18:
piirra_nuoli("h1", "h2", finArray[protokollaTila - 16], port[porttiInd]);
protokollaTila += 1;
break;
case 17:
case 19:
piirra_nuoli("h2", "h1", finArray[protokollaTila - 16], port[porttiInd]);
if (porttiInd === 1 && protokollaTila === 19) {
protokollaTila = 13;
porttiInd = 0;
} else {
protokollaTila += 1;
}
break;
case 20:
text = text.concat("\nNote right of " + hosts["h1"] + ": Kommunikaatio päättyi");
protokollaTila = -1;
break;
}
break;
case "aa":
alusta();
break;
default:
break;
} // switch
piirra();
});
});
function piirra_nuoli(h1, h2, viesti, ind) {
text = text.concat("\n" + hosts[h1] + "->" + hosts[h2] + ": ");
text = text.concat(viesti);
text = text.concat("(portti " + ind + ")");
}
function alusta() {
text = "title: FTP Protokolla";
protokollaTila = -1;
kuvia = 0;
$('#ftp').fadeIn(500, function() {
$('#ftp').html('FTP kommunikaatio');
});
}
function piirra() {
$('#diagram').html('');
var diagram = Diagram.parse(text);
diagram.drawSVG("diagram", {
//theme: 'hand'
//theme: 'simple'
theme: $('.theme').val()
});
}
<a id="ftp" href="javascript:void(0);">FTP kommunikaatio</a>
<a id="aa" href="javascript:void(0);">Aloita alusta</a> Theme:
<select class="theme" style="margin-left:0.1cm;">
<option value="simple" selected>Simple</option>
<option value="hand">Hand drawn</option>
</select>
<div id="diagram"></div>
a {
background-color: #FFFFCC;
width: 100px;
font-size: 1em;
border: 2px solid black;
border-radius: 5px;
float: top;
margin-left: 0.1cm;
}