summaryrefslogtreecommitdiffstats
path: root/doc/LaTeX/devel/0300-pvs.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/LaTeX/devel/0300-pvs.tex')
-rw-r--r--doc/LaTeX/devel/0300-pvs.tex62
1 files changed, 62 insertions, 0 deletions
diff --git a/doc/LaTeX/devel/0300-pvs.tex b/doc/LaTeX/devel/0300-pvs.tex
index 92b36f7..5aa5126 100644
--- a/doc/LaTeX/devel/0300-pvs.tex
+++ b/doc/LaTeX/devel/0300-pvs.tex
@@ -175,6 +175,65 @@ erzeugt (siehe Konstruktor) und mittels der Methode \texttt{isCommand} erfährt
Falls ja leitet der Dispatche die Nachricht an die Stelle \texttt{PVS::UpdateChatClients} sonst an die Stelle \texttt{PVS::chat\_receive}, wo die Änderungen in der Client-Liste
vorgenommen werden oder die Gespräch-Nachricht der GUI abgegeben wird.
+\subsection{Multicast-Dateiversand}
+\index{Dateiversand}\index{Multicast}
+
+Der Multicast-Dateiversand geschieht über die Bibliothek \texttt{OpenPGM}\index{OpenPGM}
+(\url{http://code.google.com/p/openpgm/}), die das ,,\textit{Pragmatic General Multicast}''-Protokoll\index{Pragmatic General Multicast}
+(PGM)\index{PGM} implementiert.
+Darin enthalten ist eine Implementierung der \textit{PGMCC}-Methode zur
+Regulierung der Sendebandbreite.
+Vorteil der Verwendung einer externen Bibliothek ist,
+dass die ,,schwierigen'' Probleme bei der Implementierung einer verlässlichen Datenstrom-orientierten
+Multicast-Übertragung bereits von Netzwerkexperten gelöst wurden.
+
+Die Bibliothek ist in das PVS-System über die interne Bibliothek \texttt{libpvsmcast}\index{libpvsmcast}
+eingebunden (der Quellcode findet sich im Verzeichnis \texttt{src/net/mcast}).
+Diese stellt mit der Klasse \texttt{McastPGMSocket}\index{Klasse!\texttt{McastPGMSocket}} einen
+objektorientierten, ereignisgetriebenen Wrapper zu OpenPGM bereit.
+Die Konfigurationsdaten, die zur Einrichtung einer PGM-Verbindung notwendig sind,
+sind in der Klasse \texttt{McastConfiguration}\index{Klasse!\texttt{McastConfiguration}} verpackt.
+
+Auf der nächsten Ebene wird der Versand einer Datei von den Klassen \texttt{McastSender}\index{Klasse!\texttt{McastSender}}
+und \texttt{McastReceiver}\index{Klasse!\texttt{McastReceiver}} übernommen.
+Diese brechen den Bytestrom der Datei in Pakete auf und formatieren diese wie in Tabelle \ref{tab:mcastpacket}
+gezeigt.
+\begin{table}
+\begin{center}
+\begin{tabular}{|l|l|l|}
+\hline
+\textbf{Format} & \textbf{Feld} & \textbf{Erläuterung} \\
+\hline
+\texttt{quint64} & \texttt{magic\_number} & = 0x0x6d60ad83825fb7f9 \\
+\hline
+\texttt{quint64} & \texttt{offset} & Position des Datenpaketes in der Datei \\
+\hline
+\texttt{QByteArray} & \texttt{data} & Daten \\
+\hline
+\texttt{quint64} & \texttt{checksum} & CRC16-CCITT der vorhergehenden Felder \\
+\hline
+\end{tabular}
+\caption{Paketformat für Multicast-Dateiversand}\label{tab:mcastpacket}\index{Multicast!Paketformat}
+\end{center}
+\end{table}
+Das Paketformat ist mit Hilfe der Qt-eigenen Klasse \texttt{QDataStream} implementiert.
+Numerische Felder werden in Netzwerk-Bytereihenfolge übertragen.
+Das Ende einer Übertragung wird markiert durch ein Paket, in dessen \texttt{offset}
+alle bits gesetzt sind und dessen \texttt{data} die MD5-Prüfsumme der übertragenen Datei
+enthält.
+
+Zur Integration dieser -- prinzipiell von PVS unabhängigen -- Funktionalität
+dienen die Klassen \texttt{PVSIncomingMulticastTransfer}\index{Klasse!\texttt{PVSIncomingMulticastTransfer}
+und \texttt{PVSOutgoingMulticastTransfer}\index{Klasse!{PVSOutgoingMulticastTransfer}}.
+Diese sorgen hauptsächlich für die Konfiguration der Multicast-Funktionalität mit Hilfe der
+PVS-Konfiguration und das Generieren der richtigen Signale einerseits in Bezug auf die Benutzerschnittstelle,
+sowie andererseits in Bezug zur Netzwerkkomponente des PVS-Systems.
+
+Ein Client, der eine Datei per Multicast zu versenden wünscht, wählt zufällig einen Port und
+kündigt diesen mit der Nachricht MCASTFTANNOUNCE an.
+Falls innerhalb einer festgesetzten Zeit (30 Sekunden) keine MCASTFTRETRY-Nachricht eintrifft,
+beginnt die Übertragung.
+Die Nachricht MCASTFTCONFIG dient zum Setzen netzwerkweiter Parameter von der Steuerkonsole aus.
\section{Netzwerkkommunikation}
\index{Netzwerkkommunikation}
@@ -216,6 +275,9 @@ PVSCOMMAND & VNC & NO & Verbiete Zugriff \\
PVSCOMMAND & PING & & \\
PVSCOMMAND & VNCREQUEST & & \\
PVSCOMMAND & VNCSRVRESULT & result code & Der Rückgabewert des pvs-vncsrv Skripts \\
+PVSCOMMAND & MCASTFTANNOUNCE & sender transferID basename size port & Ankündigung eines Multicast-Transfer \\
+PVSCOMMAND & MCASTFTRETRY & sender transferID & Rückmeldung: Konfiguration des Multicast-Empfängers fehlgeschlagen, bitte auf anderem Port noch einmal versuchen \\
+PVSCOMMAND & MCASTFTCONFIG & blob & Multicast-Konfiguration aus dem angehängten Binärblob neu laden \\
PVSMESSAGE & BROADCAST & MESSAGE &\\
PVSMESSAGE & clientToAdd & & Client hinzufügen (Chat)\\
PVSMESSAGE & clientToRemove & & Client entfernen (Chat)\\