diff options
Diffstat (limited to 'doc/LaTeX/devel/0300-pvs.tex')
-rw-r--r-- | doc/LaTeX/devel/0300-pvs.tex | 62 |
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)\\ |