From 7e3b963e3a0cbbf9391243e72ceb015e9015d630 Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Sat, 23 Oct 2010 17:49:12 +0200 Subject: Documentation fixes and code cleanup --- doc/doxconf | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'doc') diff --git a/doc/doxconf b/doc/doxconf index 50334c7..e3e32a6 100644 --- a/doc/doxconf +++ b/doc/doxconf @@ -564,7 +564,7 @@ WARN_LOGFILE = ./doxwarnlog # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = ./pvsClient.h ./pvsClient.cpp ./pvs.h ./pvs.cpp ./pvsDaemon.h ./pvsDaemon.cpp ./src +INPUT = ../pvsClient.h ../pvsClient.cpp ../pvs.h ../pvs.cpp ../pvsDaemon.h ../pvsDaemon.cpp ../src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -1210,13 +1210,13 @@ ENABLE_PREPROCESSING = YES # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. -EXPAND_ONLY_PREDEF = NO +EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. @@ -1244,7 +1244,9 @@ INCLUDE_FILE_PATTERNS = # undefined via #undef or recursively expanded use the := operator # instead of the = operator. -PREDEFINED = +PREDEFINED = "DOXYGEN_RUNNING" \ + "BEGIN_POLICY_CLASS(name)=class name" \ + "END_POLICY_CLASS=;" # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. -- cgit v1.2.3-55-g7522 From e6077e7c5f8ddce8d6db0e427ebc6c22cd61c3ce Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Thu, 4 Nov 2010 01:00:19 +0100 Subject: Remove LaTeX build artifacts. They do not belong in the tree and make merging needlessly difficult. --- doc/LaTeX/pvs-doc.aux | 140 ------- doc/LaTeX/pvs-doc.idx | 34 -- doc/LaTeX/pvs-doc.log | 1065 ------------------------------------------------- doc/LaTeX/pvs-doc.out | 56 --- doc/LaTeX/pvs-doc.pdf | Bin 2362812 -> 0 bytes doc/LaTeX/pvs-doc.toc | 65 --- 6 files changed, 1360 deletions(-) delete mode 100644 doc/LaTeX/pvs-doc.aux delete mode 100644 doc/LaTeX/pvs-doc.idx delete mode 100644 doc/LaTeX/pvs-doc.log delete mode 100644 doc/LaTeX/pvs-doc.out delete mode 100644 doc/LaTeX/pvs-doc.pdf delete mode 100644 doc/LaTeX/pvs-doc.toc (limited to 'doc') diff --git a/doc/LaTeX/pvs-doc.aux b/doc/LaTeX/pvs-doc.aux deleted file mode 100644 index 604ccf1..0000000 --- a/doc/LaTeX/pvs-doc.aux +++ /dev/null @@ -1,140 +0,0 @@ -\relax -\catcode`"\active -\ifx\hyper@anchor\@undefined -\global \let \oldcontentsline\contentsline -\gdef \contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} -\global \let \oldnewlabel\newlabel -\gdef \newlabel#1#2{\newlabelxx{#1}#2} -\gdef \newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} -\AtEndDocument{\let \contentsline\oldcontentsline -\let \newlabel\oldnewlabel} -\else -\global \let \hyper@last\relax -\fi - -\select@language{ngerman} -\@writefile{toc}{\select@language{ngerman}} -\@writefile{lof}{\select@language{ngerman}} -\@writefile{lot}{\select@language{ngerman}} -\@writefile{toc}{\contentsline {chapter}{Inhaltsverzeichnis}{I}{section*.1}} -\@writefile{toc}{\contentsline {part}{I\hspace {1em}Idee und \IeC {\"U}berblick}{1}{part.1}} -\@writefile{toc}{\contentsline {chapter}{\numberline {1}Idee}{3}{chapter.1}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{einleitung}{{1}{3}{Idee\relax }{chapter.1}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.}}{3}{figure.1.1}} -\newlabel{uscp}{{1.1}{3}{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label {uscp}\relax }{figure.1.1}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {2}Funktionen eines Software-Video-Switchs}{5}{chapter.2}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{funktionen}{{2}{5}{Funktionen eines Software-Video-Switchs\relax }{chapter.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {2.1}W\IeC {\"u}nschenswerte Basisfunktionen}{5}{section.2.1}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.}}{5}{figure.2.1}} -\newlabel{uscp}{{2.1}{5}{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label {uscp}\relax }{figure.2.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2}Funktionserweiterungen}{5}{section.2.2}} -\@writefile{toc}{\contentsline {chapter}{\numberline {3}Aufbau dieses Handbuchs}{7}{chapter.3}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{aufbau}{{3}{7}{Aufbau dieses Handbuchs\relax }{chapter.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Heraushebungen und Formatierungen}{7}{section.3.1}} -\@writefile{toc}{\contentsline {part}{II\hspace {1em}Bedienungsanleitung}{9}{part.2}} -\@writefile{toc}{\contentsline {chapter}{\numberline {4}PVS-Steuerkonsole}{11}{chapter.4}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}Allgemein}{11}{section.4.1}} -\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces Die PVS-Steuerkonsole}}{11}{figure.4.1}} -\newlabel{fig:pvsmgra}{{4.1}{11}{Die PVS-Steuerkonsole\relax }{figure.4.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Die Client-Liste}{12}{subsection.4.1.1}} -\newlabel{clientliste}{{4.1.1}{12}{Die Client-Liste\relax }{subsection.4.1.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Die VNC-Frames}{12}{subsection.4.1.2}} -\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Dummy und Nicht Dummy Frames}}{13}{figure.4.2}} -\newlabel{fig:pvsdummy}{{4.2}{13}{Dummy und Nicht Dummy Frames\relax }{figure.4.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.3}Tastenk\IeC {\"u}rzel f\IeC {\"u}r PVS-Server}{14}{subsection.4.1.3}} -\newlabel{Taste}{{4.1.3}{14}{Tastenkürzel für PVS-Server\relax }{subsection.4.1.3}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {5}PVS-Client}{15}{chapter.5}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces Toolbar des PVS-Clients}}{16}{figure.5.1}} -\newlabel{png:toolbar}{{5.1}{16}{Toolbar des PVS-Clients\relax }{figure.5.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}Chat}{16}{section.5.1}} -\@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces Chat-Dialog des PVS-Clients}}{17}{figure.5.2}} -\newlabel{png:chat}{{5.2}{17}{Chat-Dialog des PVS-Clients\relax }{figure.5.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {5.2}Konfiguration}{17}{section.5.2}} -\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces Konfigurationsdialog des PVS-Clients}}{18}{figure.5.3}} -\newlabel{png:config}{{5.3}{18}{Konfigurationsdialog des PVS-Clients\relax }{figure.5.3}{}} -\@writefile{toc}{\contentsline {part}{III\hspace {1em}Entwicklerdokumentation}{19}{part.3}} -\@writefile{toc}{\contentsline {chapter}{\numberline {6}Erzeugen und Installieren der Applikation}{21}{chapter.6}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}Voraussetzungen}{21}{section.6.1}} -\@writefile{toc}{\contentsline {section}{\numberline {6.2}Kompilieren aus Quellen}{22}{section.6.2}} -\@writefile{toc}{\contentsline {section}{\numberline {6.3}Installation}{22}{section.6.3}} -\@writefile{toc}{\contentsline {chapter}{\numberline {7}Eingesetzte GUI-Bibliothek}{25}{chapter.7}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {7.1}Internationalisierung}{25}{section.7.1}} -\@writefile{toc}{\contentsline {chapter}{\numberline {8}Aufbau und Funktionsweise des PVS}{27}{chapter.8}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {8.1}Einzelne Komponenten}{27}{section.8.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.1.1}Zuordnung von Konsole und Clients}{27}{subsection.8.1.1}} -\@writefile{toc}{\contentsline {subsubsection}{Absicherung und Verifikation der Identit\IeC {\"a}t}{27}{section*.4}} -\@writefile{toc}{\contentsline {subsubsection}{Generierung von Sitzungsnamen}{28}{section*.5}} -\@writefile{toc}{\contentsline {section}{\numberline {8.2}\IeC {\"U}berblick \IeC {\"u}ber Aktivit\IeC {\"a}ten auf Clients}{29}{section.8.2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.1}Projektion an Alle}{29}{subsection.8.2.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.2}Projektion eines Clients auf dem Beamer}{29}{subsection.8.2.2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.3}Chat- und Informationskanal}{30}{subsection.8.2.3}} -\@writefile{toc}{\contentsline {section}{\numberline {8.3}Netzwerkkommunikation}{32}{section.8.3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3.1}PVS-Protokoll}{32}{subsection.8.3.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.3.2}PVS-Messages}{33}{subsection.8.3.2}} -\newlabel{pvs-msg-liste}{{8.3.2}{34}{PVS-Messages\relax }{subsection.8.3.2}{}} -\@writefile{lot}{\contentsline {table}{\numberline {8.1}{\ignorespaces Liste der PVS Messages}}{34}{table.8.1}} -\newlabel{tab:messagelist}{{8.1}{34}{Liste der PVS Messages\relax }{table.8.1}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {9}PVS-Steuerkonsole}{35}{chapter.9}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {9.1}pvsmgr in Qt}{35}{section.9.1}} -\@writefile{toc}{\contentsline {section}{\numberline {9.2}GUI Server-Konsole}{35}{section.9.2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.1}Die Architektur}{35}{subsection.9.2.1}} -\@writefile{lof}{\contentsline {figure}{\numberline {9.1}{\ignorespaces pvsmgr-Architektur}}{36}{figure.9.1}} -\newlabel{fig:pvsmgr}{{9.1}{36}{pvsmgr-Architektur\relax }{figure.9.1}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {9.2}{\ignorespaces Abh{\"a}ngigkeitsdiagram: MainWindow}}{37}{figure.9.2}} -\newlabel{fig:mainwindow}{{9.2}{37}{Abh{\"a}ngigkeitsdiagram: MainWindow\relax }{figure.9.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{Clientliste-Ansicht}{38}{section*.6}} -\@writefile{lof}{\contentsline {figure}{\numberline {9.3}{\ignorespaces Abh{\"a}ngigkeitsdiagramm der ConnectionList-Klasse}}{38}{figure.9.3}} -\newlabel{fig:ConnectionList}{{9.3}{38}{Abh{\"a}ngigkeitsdiagramm der ConnectionList-Klasse\relax }{figure.9.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{VNC-Ansicht}{39}{section*.7}} -\@writefile{lof}{\contentsline {figure}{\numberline {9.4}{\ignorespaces Abh{\"a}ngigkeitsdiagramm der ConnectionFrame-Klasse}}{39}{figure.9.4}} -\newlabel{fig:Connectionframe}{{9.4}{39}{Abh{\"a}ngigkeitsdiagramm der ConnectionFrame-Klasse\relax }{figure.9.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.2}Client-Seite}{40}{subsection.9.2.2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.2.3}Server-Seite}{40}{subsection.9.2.3}} -\@writefile{toc}{\contentsline {section}{\numberline {9.3}Verbindungsverwaltung und Projektion}{41}{section.9.3}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.3.1}Projektion}{41}{subsection.9.3.1}} -\newlabel{pvs-console-projection}{{9.3.1}{41}{Projektion\relax }{subsection.9.3.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{Qualit\IeC {\"a}tsoptionen}{42}{section*.8}} -\newlabel{pvs-console-quality}{{9.3.1}{42}{Qualitätsoptionen\relax }{section*.8}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {9.3.2}Remote Help}{42}{subsection.9.3.2}} -\@writefile{toc}{\contentsline {chapter}{\numberline {10}PVS-Client}{43}{chapter.10}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\@writefile{lof}{\contentsline {figure}{\numberline {10.1}{\ignorespaces Back- und Frontend des PVS-Clients kommunizieren \IeC {\"u}ber D-Bus}}{43}{figure.10.1}} -\newlabel{pdf:dbus}{{10.1}{43}{Back- und Frontend des PVS-Clients kommunizieren über D-Bus\relax }{figure.10.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {10.1}Grafische Benutzeroberfl\IeC {\"a}che}{44}{section.10.1}} -\@writefile{toc}{\contentsline {section}{\numberline {10.2}User-Interface f\IeC {\"u}r Benutzerkonfiguration}{45}{section.10.2}} -\@writefile{toc}{\contentsline {section}{\numberline {10.3}Darstellung von VNC-Datenstr\IeC {\"o}men}{45}{section.10.3}} -\newlabel{pvsclient-datenstrom}{{10.3}{45}{Darstellung von VNC-Datenströmen\relax }{section.10.3}{}} -\@writefile{toc}{\contentsline {section}{\numberline {10.4}Chat-Interface}{46}{section.10.4}} -\@writefile{toc}{\contentsline {section}{\numberline {10.5}Datei\IeC {\"u}bertragung und Interface}{46}{section.10.5}} -\@writefile{toc}{\contentsline {section}{\numberline {10.6}VNC Server}{47}{section.10.6}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.6.1}Vergleich von VNC Servern}{48}{subsection.10.6.1}} -\@writefile{toc}{\contentsline {paragraph}{Vino}{48}{section*.9}} -\@writefile{toc}{\contentsline {paragraph}{Krfb}{48}{section*.10}} -\@writefile{toc}{\contentsline {paragraph}{x11vnc}{49}{section*.11}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.6.2}VNC Script}{50}{subsection.10.6.2}} -\newlabel{pvs-vnc-script}{{10.6.2}{50}{VNC Script\relax }{subsection.10.6.2}{}} -\@writefile{toc}{\contentsline {section}{\numberline {10.7}VNC Viewer}{50}{section.10.7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {10.7.1}Tastatur und Maussteuerung}{51}{subsection.10.7.1}} -\newlabel{pvsclient-remotehelp}{{10.7.1}{51}{Tastatur und Maussteuerung\relax }{subsection.10.7.1}{}} -\@writefile{toc}{\contentsline {section}{\numberline {10.8}Signalbehandlung}{52}{section.10.8}} -\@writefile{toc}{\contentsline {part}{IV\hspace {1em}Anhang}{53}{part.4}} -\newlabel{png:kd}{{IV}{55}{Anhang\relax }{part.4}{}} diff --git a/doc/LaTeX/pvs-doc.idx b/doc/LaTeX/pvs-doc.idx deleted file mode 100644 index 2548b25..0000000 --- a/doc/LaTeX/pvs-doc.idx +++ /dev/null @@ -1,34 +0,0 @@ -\indexentry{Einleitung|hyperpage}{3} -\indexentry{Video Switch|hyperpage}{3} -\indexentry{Laptop|hyperpage}{3} -\indexentry{VGA|hyperpage}{3} -\indexentry{DVI|hyperpage}{3} -\indexentry{Klassenraum|hyperpage}{3} -\indexentry{Student Control Panel|hyperpage}{3} -\indexentry{Idee|hyperpage}{3} -\indexentry{Funktion|hyperpage}{5} -\indexentry{Schreibweise|hyperpage}{7} -\indexentry{Kommando|hyperpage}{7} -\indexentry{Quelltext|hyperpage}{7} -\indexentry{Konfiguration|hyperpage}{7} -\indexentry{Formatierung|hyperpage}{7} -\indexentry{Verzeichnis|hyperpage}{7} -\indexentry{Dateiname|hyperpage}{7} -\indexentry{Installieren|hyperpage}{21} -\indexentry{Paket!RPM|hyperpage}{22} -\indexentry{Paket!DPKG|hyperpage}{22} -\indexentry{QT|hyperpage}{25} -\indexentry{GUI|hyperpage}{25} -\indexentry{Internationalisierung|hyperpage}{25} -\indexentry{Aufbau|hyperpage}{27} -\indexentry{Funktionsweise|hyperpage}{27} -\indexentry{Konzept|hyperpage}{27} -\indexentry{Komponenten|hyperpage}{27} -\indexentry{Projektion|hyperpage}{29} -\indexentry{Beamer|hyperpage}{29} -\indexentry{Chat|hyperpage}{30} -\indexentry{Netzwerkkommunikation|hyperpage}{32} -\indexentry{Protokoll!PVS|hyperpage}{32} -\indexentry{Protokoll|hyperpage}{32} -\indexentry{Message!PVS|hyperpage}{33} -\indexentry{Message|hyperpage}{33} diff --git a/doc/LaTeX/pvs-doc.log b/doc/LaTeX/pvs-doc.log deleted file mode 100644 index e634d13..0000000 --- a/doc/LaTeX/pvs-doc.log +++ /dev/null @@ -1,1065 +0,0 @@ -This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2010.9.4) 2 OCT 2010 17:01 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**pvs-doc.tex -(./pvs-doc.tex -LaTeX2e <2009/09/24> -Babel and hyphenation patterns for english, usenglishmax, dumylang, noh -yphenation, loaded. -\@indexfile=\write3 -\openout3 = `pvs-doc.idx'. - -Writing index file pvs-doc.idx -(./mystyle-pdf.tex (/usr/share/texmf-texlive/tex/latex/base/book.cls -Document Class: book 2007/10/19 v1.4h Standard LaTeX document class -(/usr/share/texmf-texlive/tex/latex/base/bk12.clo -File: bk12.clo 2007/10/19 v1.4h Standard LaTeX file (size option) -) -\c@part=\count79 -\c@chapter=\count80 -\c@section=\count81 -\c@subsection=\count82 -\c@subsubsection=\count83 -\c@paragraph=\count84 -\c@subparagraph=\count85 -\c@figure=\count86 -\c@table=\count87 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -\bibindent=\dimen102 -) -(/usr/share/texmf-texlive/tex/generic/babel/babel.sty -Package: babel 2008/07/06 v3.8l The Babel package - -(/usr/share/texmf-texlive/tex/generic/babel/ngermanb.ldf -Language: ngermanb 2008/07/06 v2.6n new German support from the babel system - -(/usr/share/texmf-texlive/tex/generic/babel/babel.def -File: babel.def 2008/07/06 v3.8l Babel common definitions -\babel@savecnt=\count88 -\U@D=\dimen103 -) - -Package babel Warning: No hyphenation patterns were loaded for -(babel) the language `ngerman' -(babel) I will use the patterns loaded for \language=0 instead. - -\l@ngerman = a dialect from \language0 -\l@naustrian = a dialect from \language\l@ngerman -Package babel Info: Making " an active character on input line 92. -)) (/usr/share/texmf-texlive/tex/latex/ucs/ucs.sty -Package: ucs 2004/10/17 UCS: Unicode input support - -(/usr/share/texmf-texlive/tex/latex/ucs/data/uni-global.def -File: uni-global.def 2004/10/17 UCS: Unicode global data -) -\uc@secondtry=\count89 -\uc@combtoks=\toks14 -\uc@combtoksb=\toks15 -\uc@temptokena=\toks16 -) -(/usr/share/texmf-texlive/tex/latex/base/fontenc.sty -Package: fontenc 2005/09/27 v1.99g Standard LaTeX package - -(/usr/share/texmf-texlive/tex/latex/base/t1enc.def -File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 43. -)) -(/usr/share/texmf-texlive/tex/latex/base/inputenc.sty -Package: inputenc 2008/03/30 v1.1d Input encoding file -\inpenc@prehook=\toks17 -\inpenc@posthook=\toks18 - -(/usr/share/texmf-texlive/tex/latex/ucs/utf8x.def -File: utf8x.def 2004/10/17 UCS: Input encoding UTF-8 -)) -(/usr/share/texmf-texlive/tex/latex/tools/multicol.sty -Package: multicol 2008/12/05 v1.6h multicolumn formatting (FMi) -\c@tracingmulticols=\count90 -\mult@box=\box26 -\multicol@leftmargin=\dimen104 -\c@unbalance=\count91 -\c@collectmore=\count92 -\doublecol@number=\count93 -\multicoltolerance=\count94 -\multicolpretolerance=\count95 -\full@width=\dimen105 -\page@free=\dimen106 -\premulticols=\dimen107 -\postmulticols=\dimen108 -\multicolsep=\skip43 -\multicolbaselineskip=\skip44 -\partial@page=\box27 -\last@line=\box28 -\mult@rightbox=\box29 -\mult@grightbox=\box30 -\mult@gfirstbox=\box31 -\mult@firstbox=\box32 -\@tempa=\box33 -\@tempa=\box34 -\@tempa=\box35 -\@tempa=\box36 -\@tempa=\box37 -\@tempa=\box38 -\@tempa=\box39 -\@tempa=\box40 -\@tempa=\box41 -\@tempa=\box42 -\@tempa=\box43 -\@tempa=\box44 -\@tempa=\box45 -\@tempa=\box46 -\@tempa=\box47 -\@tempa=\box48 -\@tempa=\box49 -\c@columnbadness=\count96 -\c@finalcolumnbadness=\count97 -\last@try=\dimen109 -\multicolovershoot=\dimen110 -\multicolundershoot=\dimen111 -\mult@nat@firstbox=\box50 -\colbreak@box=\box51 -) -(/usr/share/texmf-texlive/tex/latex/graphics/graphicx.sty -Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/share/texmf-texlive/tex/latex/graphics/keyval.sty -Package: keyval 1999/03/16 v1.13 key=value parser (DPC) -\KV@toks@=\toks19 -) -(/usr/share/texmf-texlive/tex/latex/graphics/graphics.sty -Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) - -(/usr/share/texmf-texlive/tex/latex/graphics/trig.sty -Package: trig 1999/03/16 v1.09 sin cos tan (DPC) -) -(/etc/texmf/tex/latex/config/graphics.cfg -File: graphics.cfg 2009/08/28 v1.8 graphics configuration of TeX Live -) -Package graphics Info: Driver file: pdftex.def on input line 91. - -(/usr/share/texmf-texlive/tex/latex/pdftex-def/pdftex.def -File: pdftex.def 2009/08/25 v0.04m Graphics/color for pdfTeX -\Gread@gobject=\count98 -)) -\Gin@req@height=\dimen112 -\Gin@req@width=\dimen113 -) -(/usr/share/texmf-texlive/tex/latex/base/makeidx.sty -Package: makeidx 2000/03/29 v1.0m Standard LaTeX package -) -(/usr/share/texmf-texlive/tex/latex/ltxmisc/ulem.sty -\UL@box=\box52 -\UL@hyphenbox=\box53 -\UL@skip=\skip45 -\UL@hook=\toks20 -\UL@pe=\count99 -\UL@pixel=\dimen114 -\ULC@box=\box54 -Package: ulem 2000/05/26 -\ULdepth=\dimen115 -) -(/usr/share/texmf/tex/latex/xcolor/xcolor.sty -Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) - -(/etc/texmf/tex/latex/config/color.cfg -File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive -) -Package xcolor Info: Driver file: pdftex.def on input line 225. -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. -Package xcolor Info: Model `RGB' extended on input line 1353. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. -) -(/usr/share/texmf-texlive/tex/latex/moreverb/moreverb.sty -Package: moreverb 2008/06/03 v2.3 `more' verbatim facilities - -(/usr/share/texmf-texlive/tex/latex/tools/verbatim.sty -Package: verbatim 2003/08/22 v1.5q LaTeX2e package for verbatim enhancements -\every@verbatim=\toks21 -\verbatim@line=\toks22 -\verbatim@in@stream=\read1 -) -\verbatim@out=\write4 -\tab@position=\count100 -\tab@size=\count101 -\listing@line=\count102 -) -(/usr/share/texmf-texlive/tex/latex/fancyhdr/fancyhdr.sty -\fancy@headwidth=\skip46 -\f@ncyO@elh=\skip47 -\f@ncyO@erh=\skip48 -\f@ncyO@olh=\skip49 -\f@ncyO@orh=\skip50 -\f@ncyO@elf=\skip51 -\f@ncyO@erf=\skip52 -\f@ncyO@olf=\skip53 -\f@ncyO@orf=\skip54 -) -(/usr/share/texmf-texlive/tex/latex/caption/caption2.sty -Package: caption2 2008/07/01 v2.2c Customising captions (AS) - - -Package caption2 Warning: **************************************************** -(caption2) THIS PACKAGE IS OBSOLETE: -(caption2) This package attempts to provide an `caption2' -(caption2) package v2.0/2.1 author environment so that OLD -(caption2) documents can be successfully processed. It should -(caption2) NOT be used for NEW documents! New documents should -(caption2) use the regular `caption' package v3.x instead. -(caption2) **************************************************** - -(/usr/share/texmf-texlive/tex/latex/caption/caption3.sty -Package: caption3 2009/10/09 v3.1k caption3 kernel (AR) -\captionmargin=\dimen116 -\captionmargin@=\dimen117 -\captionwidth=\dimen118 -\caption@indent=\dimen119 -\caption@parindent=\dimen120 -\caption@hangindent=\dimen121 -) -Package caption2 Info: Running in caption2 v2.0 compatibility mode on input lin -e 209. -\captionlinewidth=\dimen122 -\realcaptionwidth=\dimen123 -)) -(/usr/share/texmf-texlive/tex/latex/hyperref/hyperref.sty -Package: hyperref 2009/10/09 v6.79a Hypertext links for LaTeX - -(/usr/share/texmf-texlive/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO) -Package ifpdf Info: pdfTeX in pdf mode detected. -) -(/usr/share/texmf-texlive/tex/generic/oberdiek/ifvtex.sty -Package: ifvtex 2008/11/04 v1.4 Switches for detecting VTeX and its modes (HO) -Package ifvtex Info: VTeX not detected. -) -(/usr/share/texmf-texlive/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2009/01/23 v0.5 Provides ifxetex conditional -) -(/usr/share/texmf-texlive/tex/latex/oberdiek/hycolor.sty -Package: hycolor 2009/10/02 v1.5 Code for color options of hyperref/bookmark (H -O) - -(/usr/share/texmf-texlive/tex/latex/oberdiek/xcolor-patch.sty -Package: xcolor-patch 2009/10/02 xcolor patch -)) -\@linkdim=\dimen124 -\Hy@linkcounter=\count103 -\Hy@pagecounter=\count104 - -(/usr/share/texmf-texlive/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2009/10/09 v6.79a Hyperref: PDFDocEncoding definition (HO) -) -(/usr/share/texmf-texlive/tex/generic/oberdiek/etexcmds.sty -Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO) - -(/usr/share/texmf-texlive/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO) -) -Package etexcmds Info: Could not find \expanded. -(etexcmds) That can mean that you are not using pdfTeX 1.50 or -(etexcmds) that some package has redefined \expanded. -(etexcmds) In the latter case, load this package earlier. -) -(/usr/share/texmf-texlive/tex/latex/latexconfig/hyperref.cfg -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive -) -(/usr/share/texmf-texlive/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2009/08/13 v3.4 Keyval support for LaTeX options (HO) - -(/usr/share/texmf-texlive/tex/generic/oberdiek/kvsetkeys.sty -Package: kvsetkeys 2009/07/30 v1.5 Key value parser with default handler suppor -t (HO) -)) -Package hyperref Info: Option `pdfpagelabels' set `true' on input line 2864. -Package hyperref Info: Option `plainpages' set `false' on input line 2864. -Package hyperref Info: Option `colorlinks' set `true' on input line 2864. -Package hyperref Info: Hyper figures OFF on input line 2975. -Package hyperref Info: Link nesting OFF on input line 2980. -Package hyperref Info: Hyper index ON on input line 2983. -Package hyperref Info: Plain pages OFF on input line 2990. -Package hyperref Info: Backreferencing OFF on input line 2995. - -Implicit mode ON; LaTeX internals redefined -Package hyperref Info: Bookmarks ON on input line 3191. -(/usr/share/texmf-texlive/tex/latex/ltxmisc/url.sty -\Urlmuskip=\muskip10 -Package: url 2006/04/12 ver 3.3 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 3428. - -(/usr/share/texmf-texlive/tex/generic/oberdiek/bitset.sty -Package: bitset 2007/09/28 v1.0 Data type bit set (HO) - -(/usr/share/texmf-texlive/tex/generic/oberdiek/intcalc.sty -Package: intcalc 2007/09/27 v1.1 Expandable integer calculations (HO) -) -(/usr/share/texmf-texlive/tex/generic/oberdiek/bigintcalc.sty -Package: bigintcalc 2007/11/11 v1.1 Expandable big integer calculations (HO) - -(/usr/share/texmf-texlive/tex/generic/oberdiek/pdftexcmds.sty -Package: pdftexcmds 2009/09/23 v0.6 LuaTeX support for pdfTeX utility functions - (HO) - -(/usr/share/texmf-texlive/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2009/04/17 v1.2 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -) -(/usr/share/texmf-texlive/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2009/08/05 v1.0 Some LaTeX kernel commands for general use (HO -) -) -Package pdftexcmds Info: LuaTeX not detected. -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -))) -\Fld@menulength=\count105 -\Field@Width=\dimen125 -\Fld@charsize=\dimen126 -\Field@toks=\toks23 -Package hyperref Info: Hyper figures OFF on input line 4377. -Package hyperref Info: Link nesting OFF on input line 4382. -Package hyperref Info: Hyper index ON on input line 4385. -Package hyperref Info: backreferencing OFF on input line 4392. -Package hyperref Info: Link coloring ON on input line 4395. -Package hyperref Info: Link coloring with OCG OFF on input line 4402. -Package hyperref Info: PDF/A mode OFF on input line 4407. - -(/usr/share/texmf-texlive/tex/generic/oberdiek/atbegshi.sty -Package: atbegshi 2008/07/31 v1.9 At begin shipout hook (HO) -) -\Hy@abspage=\count106 -\c@Item=\count107 -\c@Hfootnote=\count108 -) -*hyperref using driver hpdftex* -(/usr/share/texmf-texlive/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2009/10/09 v6.79a Hyperref driver for pdfTeX -\Fld@listcount=\count109 -) (./pvs-doc.aux - -LaTeX Warning: Label `uscp' multiply defined. - -) -\openout1 = `pvs-doc.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 4. -LaTeX Font Info: ... okay on input line 4. -LaTeX Font Info: Try loading font information for T1+cmss on input line 4. - (/usr/share/texmf-texlive/tex/latex/base/t1cmss.fd -File: t1cmss.fd 1999/05/25 v2.5h Standard LaTeX font definitions -) -(/usr/share/texmf-texlive/tex/latex/ucs/ucsencs.def -File: ucsencs.def 2003/11/29 Fixes to fontencodings LGR, T3 -) -(/usr/share/texmf-texlive/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count110 -\scratchdimen=\dimen127 -\scratchbox=\box55 -\nofMPsegments=\count111 -\nofMParguments=\count112 -\everyMPshowfont=\toks24 -\MPscratchCnt=\count113 -\MPscratchDim=\dimen128 -\MPnumerator=\count114 -\everyMPtoPDFconversion=\toks25 -) -Package caption Info: Begin \AtBeginDocument code. -Package caption Info: End \AtBeginDocument code. -Package hyperref Info: Link coloring ON on input line 4. - (/usr/share/texmf-texlive/tex/latex/hyperref/nameref.sty -Package: nameref 2007/05/29 v2.31 Cross-referencing by name of section - -(/usr/share/texmf-texlive/tex/latex/oberdiek/refcount.sty -Package: refcount 2008/08/11 v3.1 Data extraction from references (HO) -) -\c@section@level=\count115 -) -LaTeX Info: Redefining \ref on input line 4. -LaTeX Info: Redefining \pageref on input line 4. - (./pvs-doc.out) -(./pvs-doc.out) -\@outlinefile=\write5 -\openout5 = `pvs-doc.out'. - -\AtBeginShipoutBox=\box56 - (./header.tex - -File: bilder/siegel-neu.jpg Graphic file (type jpg) - - -(/usr/share/texmf-texlive/tex/latex/ucs/data/uni-0.def -File: uni-0.def 2004/10/17 UCS: Unicode data U+0000..U+00FF -) [1 - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map} <./bilder/siegel-neu.jpg>] -[2] - -LaTeX Font Warning: Font shape `T1/cmss/m/sc' in size <14.4> not available -(Font) Font shape `T1/cmr/m/sc' tried instead on input line 39. - -[3] -Underfull \hbox (badness 10000) in paragraph at lines 45--52 - - [] - -[4]) - -Package hyperref Warning: No destination for bookmark of \addcontentsline, -(hyperref) destination is added on input line 7. - -(./pvs-doc.toc -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <12> on input line 6. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <8> on input line 6. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 6. - - -Package Fancyhdr Warning: \headheight is too small (12.0pt): - Make it at least 25.40292pt. - We now make it that large for the rest of the document. - This may cause the page layout to be inconsistent, however. - -[1 - -]) -\tf@toc=\write6 -\openout6 = `pvs-doc.toc'. - - [2] (./zusfassung.tex [3 - -])pdfTeX warning (ext4): destination with the same identifier (name{page.1}) ha -s been already used, duplicate ignored - - \relax -l.13 \part{Idee und Überblick} - [1 - -]pdfTeX warning (ext4): destination with the same identifier (name{page.2}) has - been already used, duplicate ignored - - \relax -l.13 \part{Idee und Überblick} - [2] (./intro/0000-chapter.tex -Kapitel 1. - -File: bilder/studentctlpanel.png Graphic file (type png) - -pdfTeX warning (ext4): destination with the sam -e identifier (name{page.3}) has been already used, duplicate ignored - - \relax -l.13 D - em soll ein eigener Ansatz entgegengesetzt werden, der die eingangs ge... -[3 - - <./bilder/studentctlpanel.png>] -Overfull \hbox (2.64162pt too wide) in paragraph at lines 13--14 -[]\T1/cmss/m/n/12 Dem soll ein eigen-er Ansatz ent-ge-genge-set-zt wer-den, der - die ein-gangs genan-nten Beschränkun- - [] - -) (./intro/0100-funktionen.texpdfTeX warning (ext4): destination with the same -identifier (name{page.4}) has been already used, duplicate ignored - - \relax -l.1 \chapter - {Funktionen eines Software-Video-Switchs} [4] -Kapitel 2. -File: bilder/studentctlpanel.png Graphic file (type png) -) (./intro/0900-textaufbau.tex [5 - -] [6 - -] -Kapitel 3. -LaTeX Font Info: Try loading font information for T1+cmtt on input line 12. -(/usr/share/texmf-texlive/tex/latex/base/t1cmtt.fd -File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions -)) [7] [8 - -] [9] [10] -(./user/0001-chapter.tex -Kapitel 4. - -File: bilder/pvsmgrAll.jpg Graphic file (type jpg) - - -Underfull \hbox (badness 10000) in paragraph at lines 17--32 - - [] - - -Underfull \vbox (badness 1052) has occurred while \output is active [] - - [11 - - <./bilder/pvsmgrAll.jpg>] -File: bilder/dum.jpg Graphic file (type jpg) - - -Underfull \hbox (badness 10000) in paragraph at lines 34--63 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 34--63 - - [] - - -LaTeX Warning: `h' float specifier changed to `ht'. - -[12] -Underfull \hbox (badness 10000) in paragraph at lines 66--69 - - [] - - -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [13 <./bilder/dum.jpg>] -Underfull \hbox (badness 10000) in paragraph at lines 70--71 - - [] - -) (./user/0000-chapter.tex -Underfull \hbox (badness 10000) in paragraph at lines 72--1 - - [] - -[14] -Kapitel 5. -[15 - -] -File: bilder/clientToolbar.png Graphic file (type png) - - -LaTeX Font Info: Try loading font information for OMS+cmss on input line 20. - -LaTeX Font Info: No file OMScmss.fd. on input line 20. - - -LaTeX Font Warning: Font shape `OMS/cmss/m/n' undefined -(Font) using `OMS/cmsy/m/n' instead -(Font) for symbol `textbullet' on input line 20. - -[16 <./bilder/clientToolbar.png>] - -File: bilder/clientChatDialog.png Graphic file (type png) - - - -File: bilder/clientConfigDialog.png Graphic file (type png) - - - -LaTeX Warning: `h' float specifier changed to `ht'. - -) [17 <./bilder/clientChatDialog.png>] [18 <./bilder/clientConfigDialog.png>] -[19 - -] [20] (./devel/0000-chapter.tex) (./devel/0100-build.tex -Kapitel 6. - -Underfull \hbox (badness 10000) in paragraph at lines 3--4 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 5--7 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 8--10 - - [] - - -Overfull \hbox (6.42374pt too wide) in paragraph at lines 23--25 -\T1/cmss/m/n/12 Eingesetztes Buildsys-tem und der Makefile-Generator. Um dis-tr -i-bu-tion-sspez-i-fis-che Pakete - [] - -[21 - -] -Underfull \hbox (badness 10000) in paragraph at lines 34--35 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 36--40 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 51--53 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 54--60 - - [] - -[22] -Underfull \hbox (badness 10000) in paragraph at lines 61--62 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 63--65 - - [] - -) (./devel/0200-gui-lib.tex [23] [24 - -] -Kapitel 7. -[25]) (./devel/0300-pvs.tex [26] -Kapitel 8. -(./devel/0310-service-discovery.tex [27 - -]) -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [28] -Underfull \hbox (badness 10000) in paragraph at lines 45--58 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 45--58 - - [] - -[29] -Underfull \hbox (badness 10000) in paragraph at lines 67--67 -[]\T1/cmtt/m/n/12 :addCommandHandler("*", this, - [] - -[32] -Underfull \hbox (badness 10000) in paragraph at lines 202--202 -[]\T1/cmss/m/n/12 hostname - [] - - -Underfull \hbox (badness 7558) in paragraph at lines 202--202 -\T1/cmss/m/n/12 port pass- - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 202--202 -\T1/cmss/m/n/12 word - [] - - -Underfull \hbox (badness 4378) in paragraph at lines 205--206 -[]\T1/cmss/m/n/12 Client mit Nachricht - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 210--210 -[]\T1/cmss/m/n/12 ^^RWrong - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 210--211 -[]\T1/cmss/m/n/12 Wird bei falschem - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 220--221 -[]\T1/cmss/m/n/12 Client hinzufü-gen - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 222--223 -[]\T1/cmss/m/n/12 Festgelegter Name - [] - -) (./devel/0400-pvs-console.tex [33] [34] -Kapitel 9. - -Underfull \hbox (badness 10000) in paragraph at lines 3--7 - - [] - - -File: bilder/pvsmgr.jpg Graphic file (type jpg) - - -File: bilder/mainwindow.png Graphic file (type png) - - -Underfull \hbox (badness 10000) in paragraph at lines 21--48 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 21--48 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 21--48 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 21--48 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 21--48 - - [] - -[35 - -] - -LaTeX Warning: `h' float specifier changed to `ht'. - - -Underfull \hbox (badness 10000) in paragraph at lines 49--56 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 57--60 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 57--60 - - [] - -[36 <./bilder/pvsmgr.jpg>] -Underfull \hbox (badness 10000) in paragraph at lines 61--72 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 73--76 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 77--81 - - [] - -[37 <./bilder/mainwindow.png (PNG copy)>] - -LaTeX Warning: Reference `fig:connectionlist' on page 38 undefined on input lin -e 87. - - -File: bilder/ConnectionList.png Graphic file (type png) - - - -File: bilder/connectionframe.png Graphic file (type png) - - - -LaTeX Warning: Reference `connectionframe' on page 38 undefined on input line 1 -20. - - -Underfull \hbox (badness 10000) in paragraph at lines 105--124 - - [] - - -Underfull \vbox (badness 1629) has occurred while \output is active [] - - [38 <./bilder/ConnectionList.png (PNG copy)>] [39 <./bilder/connectionframe.pn -g (PNG copy)>] -Underfull \hbox (badness 10000) in paragraph at lines 130--150 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 153--158 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 159--164 - - [] - -[40] -Overfull \hbox (9.46333pt too wide) in paragraph at lines 171--174 -\T1/cmss/m/n/12 schon in der Liste der Pro-jek-tion-sziele vorhan-den ist. Ist -er nicht vorhan-den, wird ein Auswahldia- - [] - - -Overfull \hbox (2.76924pt too wide) in paragraph at lines 171--174 -\T1/cmtt/m/n/12 MainWindow::getWindow()->getConnectionList()->getTargetToDispla -y(source)\T1/cmss/m/n/12 ). - [] - -[41]) (./devel/0500-pvs-client.tex [42] -Kapitel 10. - -Underfull \hbox (badness 10000) in paragraph at lines 2--3 - - [] - - -File: bilder/DBus.pdf Graphic file (type pdf) - [43 - - <./bilder/DBus.pdf>] [44] -Underfull \hbox (badness 10000) in paragraph at lines 73--74 - - [] - - -Overfull \hbox (5.7754pt too wide) in paragraph at lines 77--78 -\T1/cmss/m/n/12 über den Kon-struk-tor definiert und nach einem Aufruf von \T1/ -cmtt/m/n/12 VNCClientThread::start() - [] - -[45] -Underfull \hbox (badness 10000) in paragraph at lines 88--89 - - [] - -[46] -Underfull \hbox (badness 10000) in paragraph at lines 95--97 - - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 98--101 - - [] - -[47] -Underfull \hbox (badness 2285) in paragraph at lines 117--128 -\T1/cmss/m/it/12 ^^C/.gconf/desktop/gnome/remote_access/%gconf.xml \T1/cmss/m/n -/12 kon-fig-urier-bar. Pa-ram-e-ter kön-nen - [] - - -Underfull \hbox (badness 10000) in paragraph at lines 117--128 -\T1/cmss/m/n/12 durch \T1/cmtt/m/n/12 gconftool-2 -s -t int desktop/gnome/remot -e_access/alternative_port - [] - - -Underfull \hbox (badness 7256) in paragraph at lines 117--128 -\T1/cmtt/m/n/12 \T1/cmss/m/n/12 bzw. das Ein-fü-gen von z.B. \T1/c -mtt/m/n/12 ''/> \T1 -/cmss/m/n/12 in die entsprechende - [] - -[48] [49] -Overfull \hbox (1.44884pt too wide) in paragraph at lines 189--190 -[]\T1/cmss/m/n/12 Um einen Mehrfach-start des VNC Servers zu ver-hin-dern, wird - zunächst im-mer ein \T1/cmtt/m/n/12 pvs-vncsrv - [] - - -Underfull \hbox (badness 1728) in paragraph at lines 197--199 -\T1/cmss/m/n/12 die Eingaben in der Klasse \T1/cmtt/m/n/12 ClientVNCViewer \T1/ -cmss/m/n/12 abge-fan-gen und ve-r-ar-beit-et wer-den. - [] - - -Underfull \hbox (badness 1107) in paragraph at lines 197--199 -\T1/cmss/m/n/12 Dies kann durch Über-schreiben der geerbten Meth-ode \T1/cmtt/m -/n/12 event \T1/cmss/m/n/12 er-re-icht wer-den \T1/cmtt/m/n/12 bool - [] - -[50] -Overfull \hbox (4.18437pt too wide) in paragraph at lines 211--215 -\T1/cmtt/m/n/12 Key-[]enum$[][]\T1/cmss/m/n/12 ) un-ter-schieden wer-den. Die T -astatur- und Mau-seingaben müssen dann entsprechend - [] - - -Overfull \hbox (11.09923pt too wide) in paragraph at lines 211--215 -\T1/cmss/m/n/12 an \T1/cmtt/m/n/12 vncClientThread \T1/cmss/m/n/12 weit-ergelei -t-et wer-den. In der Klasse vnc-Client-Thread wer-den die Eingaben - [] - -[51] -Underfull \hbox (badness 4441) in paragraph at lines 240--243 -[]\T1/cmss/m/n/12 Um Sig-nale ab-fan-gen zu kön-nen, muss nun noch das sigac-ti -on Ob-jekt durch - [] - - -Underfull \hbox (badness 2181) in paragraph at lines 240--243 -\T1/cmtt/m/n/12 sigaction(SIGTERM, &act, 0) \T1/cmss/m/n/12 mit den entsprechen --den Sig-nalen (hi-er SIGTERM) - [] - -) [52] [53 - -] [54] (./appendix/0000-chapter.tex - -File: bilder/Klassendiagramm.pdf Graphic file (type pdf) - - - -LaTeX Warning: `h' float specifier changed to `ht'. - -) -No file pvs-doc.ind. -[55 <./bilder/Klassendiagramm.pdf>] (./pvs-doc.aux) - -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - -LaTeX Warning: There were undefined references. - - -LaTeX Warning: There were multiply-defined labels. - - ) -Here is how much of TeX's memory you used: - 7300 strings out of 495061 - 103737 string characters out of 1182622 - 191400 words of memory out of 3000000 - 10133 multiletter control sequences out of 15000+50000 - 17588 words of font info for 39 fonts, out of 3000000 for 9000 - 28 hyphenation exceptions out of 8191 - 38i,14n,44p,1625b,576s stack positions out of 5000i,500n,10000p,200000b,50000s - -Output written on pvs-doc.pdf (62 pages, 2362812 bytes). -PDF statistics: - 1429 PDF objects out of 1440 (max. 8388607) - 156 named destinations out of 1000 (max. 500000) - 514 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/doc/LaTeX/pvs-doc.out b/doc/LaTeX/pvs-doc.out deleted file mode 100644 index e311c72..0000000 --- a/doc/LaTeX/pvs-doc.out +++ /dev/null @@ -1,56 +0,0 @@ -\BOOKMARK [0][-]{section*.1}{Inhaltsverzeichnis}{} -\BOOKMARK [-1][-]{part.1}{I Idee und \334berblick}{} -\BOOKMARK [0][-]{chapter.1}{Idee}{part.1} -\BOOKMARK [0][-]{chapter.2}{Funktionen eines Software-Video-Switchs}{part.1} -\BOOKMARK [1][-]{section.2.1}{W\374nschenswerte Basisfunktionen}{chapter.2} -\BOOKMARK [1][-]{section.2.2}{Funktionserweiterungen}{chapter.2} -\BOOKMARK [0][-]{chapter.3}{Aufbau dieses Handbuchs}{part.1} -\BOOKMARK [1][-]{section.3.1}{Heraushebungen und Formatierungen}{chapter.3} -\BOOKMARK [-1][-]{part.2}{II Bedienungsanleitung}{} -\BOOKMARK [0][-]{chapter.4}{PVS-Steuerkonsole}{part.2} -\BOOKMARK [1][-]{section.4.1}{Allgemein}{chapter.4} -\BOOKMARK [2][-]{subsection.4.1.1}{Die Client-Liste}{section.4.1} -\BOOKMARK [2][-]{subsection.4.1.2}{Die VNC-Frames}{section.4.1} -\BOOKMARK [2][-]{subsection.4.1.3}{Tastenk\374rzel f\374r PVS-Server}{section.4.1} -\BOOKMARK [0][-]{chapter.5}{PVS-Client}{part.2} -\BOOKMARK [1][-]{section.5.1}{Chat}{chapter.5} -\BOOKMARK [1][-]{section.5.2}{Konfiguration}{chapter.5} -\BOOKMARK [-1][-]{part.3}{III Entwicklerdokumentation}{} -\BOOKMARK [0][-]{chapter.6}{Erzeugen und Installieren der Applikation}{part.3} -\BOOKMARK [1][-]{section.6.1}{Voraussetzungen}{chapter.6} -\BOOKMARK [1][-]{section.6.2}{Kompilieren aus Quellen}{chapter.6} -\BOOKMARK [1][-]{section.6.3}{Installation}{chapter.6} -\BOOKMARK [0][-]{chapter.7}{Eingesetzte GUI-Bibliothek}{part.3} -\BOOKMARK [1][-]{section.7.1}{Internationalisierung}{chapter.7} -\BOOKMARK [0][-]{chapter.8}{Aufbau und Funktionsweise des PVS}{part.3} -\BOOKMARK [1][-]{section.8.1}{Einzelne Komponenten}{chapter.8} -\BOOKMARK [2][-]{subsection.8.1.1}{Zuordnung von Konsole und Clients}{section.8.1} -\BOOKMARK [1][-]{section.8.2}{\334berblick \374ber Aktivit\344ten auf Clients}{chapter.8} -\BOOKMARK [2][-]{subsection.8.2.1}{Projektion an Alle}{section.8.2} -\BOOKMARK [2][-]{subsection.8.2.2}{Projektion eines Clients auf dem Beamer}{section.8.2} -\BOOKMARK [2][-]{subsection.8.2.3}{Chat- und Informationskanal}{section.8.2} -\BOOKMARK [1][-]{section.8.3}{Netzwerkkommunikation}{chapter.8} -\BOOKMARK [2][-]{subsection.8.3.1}{PVS-Protokoll}{section.8.3} -\BOOKMARK [2][-]{subsection.8.3.2}{PVS-Messages}{section.8.3} -\BOOKMARK [0][-]{chapter.9}{PVS-Steuerkonsole}{part.3} -\BOOKMARK [1][-]{section.9.1}{pvsmgr in Qt}{chapter.9} -\BOOKMARK [1][-]{section.9.2}{GUI Server-Konsole}{chapter.9} -\BOOKMARK [2][-]{subsection.9.2.1}{Die Architektur}{section.9.2} -\BOOKMARK [2][-]{subsection.9.2.2}{Client-Seite}{section.9.2} -\BOOKMARK [2][-]{subsection.9.2.3}{Server-Seite}{section.9.2} -\BOOKMARK [1][-]{section.9.3}{Verbindungsverwaltung und Projektion}{chapter.9} -\BOOKMARK [2][-]{subsection.9.3.1}{Projektion}{section.9.3} -\BOOKMARK [2][-]{subsection.9.3.2}{Remote Help}{section.9.3} -\BOOKMARK [0][-]{chapter.10}{PVS-Client}{part.3} -\BOOKMARK [1][-]{section.10.1}{Grafische Benutzeroberfl\344che}{chapter.10} -\BOOKMARK [1][-]{section.10.2}{User-Interface f\374r Benutzerkonfiguration}{chapter.10} -\BOOKMARK [1][-]{section.10.3}{Darstellung von VNC-Datenstr\366men}{chapter.10} -\BOOKMARK [1][-]{section.10.4}{Chat-Interface}{chapter.10} -\BOOKMARK [1][-]{section.10.5}{Datei\374bertragung und Interface}{chapter.10} -\BOOKMARK [1][-]{section.10.6}{VNC Server}{chapter.10} -\BOOKMARK [2][-]{subsection.10.6.1}{Vergleich von VNC Servern}{section.10.6} -\BOOKMARK [2][-]{subsection.10.6.2}{VNC Script}{section.10.6} -\BOOKMARK [1][-]{section.10.7}{VNC Viewer}{chapter.10} -\BOOKMARK [2][-]{subsection.10.7.1}{Tastatur und Maussteuerung}{section.10.7} -\BOOKMARK [1][-]{section.10.8}{Signalbehandlung}{chapter.10} -\BOOKMARK [-1][-]{part.4}{IV Anhang}{} diff --git a/doc/LaTeX/pvs-doc.pdf b/doc/LaTeX/pvs-doc.pdf deleted file mode 100644 index 2b43baf..0000000 Binary files a/doc/LaTeX/pvs-doc.pdf and /dev/null differ diff --git a/doc/LaTeX/pvs-doc.toc b/doc/LaTeX/pvs-doc.toc deleted file mode 100644 index cfaa531..0000000 --- a/doc/LaTeX/pvs-doc.toc +++ /dev/null @@ -1,65 +0,0 @@ -\select@language {ngerman} -\contentsline {chapter}{Inhaltsverzeichnis}{I}{section*.1} -\contentsline {part}{I\hspace {1em}Idee und \IeC {\"U}berblick}{1}{part.1} -\contentsline {chapter}{\numberline {1}Idee}{3}{chapter.1} -\contentsline {chapter}{\numberline {2}Funktionen eines Software-Video-Switchs}{5}{chapter.2} -\contentsline {section}{\numberline {2.1}W\IeC {\"u}nschenswerte Basisfunktionen}{5}{section.2.1} -\contentsline {section}{\numberline {2.2}Funktionserweiterungen}{5}{section.2.2} -\contentsline {chapter}{\numberline {3}Aufbau dieses Handbuchs}{7}{chapter.3} -\contentsline {section}{\numberline {3.1}Heraushebungen und Formatierungen}{7}{section.3.1} -\contentsline {part}{II\hspace {1em}Bedienungsanleitung}{9}{part.2} -\contentsline {chapter}{\numberline {4}PVS-Steuerkonsole}{11}{chapter.4} -\contentsline {section}{\numberline {4.1}Allgemein}{11}{section.4.1} -\contentsline {subsection}{\numberline {4.1.1}Die Client-Liste}{12}{subsection.4.1.1} -\contentsline {subsection}{\numberline {4.1.2}Die VNC-Frames}{12}{subsection.4.1.2} -\contentsline {subsection}{\numberline {4.1.3}Tastenk\IeC {\"u}rzel f\IeC {\"u}r PVS-Server}{14}{subsection.4.1.3} -\contentsline {chapter}{\numberline {5}PVS-Client}{15}{chapter.5} -\contentsline {section}{\numberline {5.1}Chat}{16}{section.5.1} -\contentsline {section}{\numberline {5.2}Konfiguration}{17}{section.5.2} -\contentsline {part}{III\hspace {1em}Entwicklerdokumentation}{19}{part.3} -\contentsline {chapter}{\numberline {6}Erzeugen und Installieren der Applikation}{21}{chapter.6} -\contentsline {section}{\numberline {6.1}Voraussetzungen}{21}{section.6.1} -\contentsline {section}{\numberline {6.2}Kompilieren aus Quellen}{22}{section.6.2} -\contentsline {section}{\numberline {6.3}Installation}{22}{section.6.3} -\contentsline {chapter}{\numberline {7}Eingesetzte GUI-Bibliothek}{25}{chapter.7} -\contentsline {section}{\numberline {7.1}Internationalisierung}{25}{section.7.1} -\contentsline {chapter}{\numberline {8}Aufbau und Funktionsweise des PVS}{27}{chapter.8} -\contentsline {section}{\numberline {8.1}Einzelne Komponenten}{27}{section.8.1} -\contentsline {subsection}{\numberline {8.1.1}Zuordnung von Konsole und Clients}{27}{subsection.8.1.1} -\contentsline {subsubsection}{Absicherung und Verifikation der Identit\IeC {\"a}t}{27}{section*.4} -\contentsline {subsubsection}{Generierung von Sitzungsnamen}{28}{section*.5} -\contentsline {section}{\numberline {8.2}\IeC {\"U}berblick \IeC {\"u}ber Aktivit\IeC {\"a}ten auf Clients}{29}{section.8.2} -\contentsline {subsection}{\numberline {8.2.1}Projektion an Alle}{29}{subsection.8.2.1} -\contentsline {subsection}{\numberline {8.2.2}Projektion eines Clients auf dem Beamer}{29}{subsection.8.2.2} -\contentsline {subsection}{\numberline {8.2.3}Chat- und Informationskanal}{30}{subsection.8.2.3} -\contentsline {section}{\numberline {8.3}Netzwerkkommunikation}{32}{section.8.3} -\contentsline {subsection}{\numberline {8.3.1}PVS-Protokoll}{32}{subsection.8.3.1} -\contentsline {subsection}{\numberline {8.3.2}PVS-Messages}{33}{subsection.8.3.2} -\contentsline {chapter}{\numberline {9}PVS-Steuerkonsole}{35}{chapter.9} -\contentsline {section}{\numberline {9.1}pvsmgr in Qt}{35}{section.9.1} -\contentsline {section}{\numberline {9.2}GUI Server-Konsole}{35}{section.9.2} -\contentsline {subsection}{\numberline {9.2.1}Die Architektur}{35}{subsection.9.2.1} -\contentsline {subsubsection}{Clientliste-Ansicht}{38}{section*.6} -\contentsline {subsubsection}{VNC-Ansicht}{39}{section*.7} -\contentsline {subsection}{\numberline {9.2.2}Client-Seite}{40}{subsection.9.2.2} -\contentsline {subsection}{\numberline {9.2.3}Server-Seite}{40}{subsection.9.2.3} -\contentsline {section}{\numberline {9.3}Verbindungsverwaltung und Projektion}{41}{section.9.3} -\contentsline {subsection}{\numberline {9.3.1}Projektion}{41}{subsection.9.3.1} -\contentsline {subsubsection}{Qualit\IeC {\"a}tsoptionen}{42}{section*.8} -\contentsline {subsection}{\numberline {9.3.2}Remote Help}{42}{subsection.9.3.2} -\contentsline {chapter}{\numberline {10}PVS-Client}{43}{chapter.10} -\contentsline {section}{\numberline {10.1}Grafische Benutzeroberfl\IeC {\"a}che}{44}{section.10.1} -\contentsline {section}{\numberline {10.2}User-Interface f\IeC {\"u}r Benutzerkonfiguration}{45}{section.10.2} -\contentsline {section}{\numberline {10.3}Darstellung von VNC-Datenstr\IeC {\"o}men}{45}{section.10.3} -\contentsline {section}{\numberline {10.4}Chat-Interface}{46}{section.10.4} -\contentsline {section}{\numberline {10.5}Datei\IeC {\"u}bertragung und Interface}{46}{section.10.5} -\contentsline {section}{\numberline {10.6}VNC Server}{47}{section.10.6} -\contentsline {subsection}{\numberline {10.6.1}Vergleich von VNC Servern}{48}{subsection.10.6.1} -\contentsline {paragraph}{Vino}{48}{section*.9} -\contentsline {paragraph}{Krfb}{48}{section*.10} -\contentsline {paragraph}{x11vnc}{49}{section*.11} -\contentsline {subsection}{\numberline {10.6.2}VNC Script}{50}{subsection.10.6.2} -\contentsline {section}{\numberline {10.7}VNC Viewer}{50}{section.10.7} -\contentsline {subsection}{\numberline {10.7.1}Tastatur und Maussteuerung}{51}{subsection.10.7.1} -\contentsline {section}{\numberline {10.8}Signalbehandlung}{52}{section.10.8} -\contentsline {part}{IV\hspace {1em}Anhang}{53}{part.4} -- cgit v1.2.3-55-g7522 From 2ef394730ec4cd9803d22cd9eb2accd49b522c32 Mon Sep 17 00:00:00 2001 From: Dirk von Suchodoletz Date: Thu, 4 Nov 2010 17:43:37 +0100 Subject: Aktualisierung Projektdoku ... --- doc/LaTeX/devel/0100-build.tex | 6 +- doc/LaTeX/intro/0000-chapter.tex | 2 + doc/LaTeX/intro/0100-funktionen.tex | 7 +- doc/LaTeX/zusfassung.log | 333 ------------------------------------ doc/LaTeX/zusfassung.tex | 2 +- 5 files changed, 11 insertions(+), 339 deletions(-) delete mode 100644 doc/LaTeX/zusfassung.log (limited to 'doc') diff --git a/doc/LaTeX/devel/0100-build.tex b/doc/LaTeX/devel/0100-build.tex index f5cf05e..10f22dc 100644 --- a/doc/LaTeX/devel/0100-build.tex +++ b/doc/LaTeX/devel/0100-build.tex @@ -3,10 +3,10 @@ Um den Pool Video Switch erfolgreich zu kompilieren, müssen zunächst die Quelldateien heruntergeladen werden. Hierzu sollte auf dem Arbeitsrechner ein Subversion-Client installiert sein. Ein Checkout kann in einem beliebigen Terminal erfolgen, wobei es zwei unterschiedliche Arten des Zugriffs gibt.\\ Anonym, nur Leserechte:\\ -\textbf{svn co http://svn.openslx.org/svn/pvs/trunk/pvs}\\ +\textbf{git clone git://git.openslx.org/pvs.git pvs}\\ -Mit Account, auch Schreibrechte (benutzer mit SSH Login ersetzen):\\ -\textbf{svn co svn+ssh://benutzer@openslx.org/srv/svn/pvs}\\ +Mit Account, auch Schreibrechte (hier wird vorausgesetzt, dass der Benutzer vorher seinen öffentlichen SSH-Schlüssel hinterlegt hat):\\ +\textbf{git clone git@openslx.org:pvs.git}\\ \section{Voraussetzungen} diff --git a/doc/LaTeX/intro/0000-chapter.tex b/doc/LaTeX/intro/0000-chapter.tex index 0339907..6b3319b 100644 --- a/doc/LaTeX/intro/0000-chapter.tex +++ b/doc/LaTeX/intro/0000-chapter.tex @@ -13,3 +13,5 @@ Neben den Hardware-basierten Varianten existieren inzwischen eine Reihe von Soft Dem soll ein eigener Ansatz entgegengesetzt werden, der die eingangs genannten Beschränkungen aufhebt und dem Anspruch einer modernen universitären computer-gestützten Lehre entgegenkommt. Das Projekt soll stufenweise von einer einfachen Basislösung in Rückmeldung mit den Lehrenden weiterentwickelt werden. Ein Open-Source-Ansatz gewährleistet zudem eine größere Nachhaltigkeit. Selbst bei einer Projekteinstellung können andere auf den Code weiterhin zurückgreifen und damit einerseits bestehende Installationen aktualisieren und andererseits eigene Entwicklungen schneller vorantreiben. Bei der Entwicklung steht nicht die Neuerfindung bereits vorhandener Technologien, sondern deren intelligente Verknüpfung im Vordergrund. So bieten bereits Techniken wie VNC oder Xorg/X11 viele notwendige Grundlagen, die um pfiffige Werkzeuge mit intuitiven Oberflächen erweitert werden sollen. Eine gute Anschauung bietet beispielsweise die Open Source Software ''Student Control Panel'' des Edubuntu-Linux (\ref{uscp}). + +Eine sehr vergleichbare Applikation ist iTalc. diff --git a/doc/LaTeX/intro/0100-funktionen.tex b/doc/LaTeX/intro/0100-funktionen.tex index 0c4536a..0dbac13 100644 --- a/doc/LaTeX/intro/0100-funktionen.tex +++ b/doc/LaTeX/intro/0100-funktionen.tex @@ -4,14 +4,17 @@ Damit ein Software-Video-Switch Hardwarelösungen ersetzen kann, muss zumindest eine gewisse Grundmenge an Funktionalität bereitgestellt werden. Diese Funktionen lassen sich in weiteren Schritten erweitern und können dabei über die der Hardwareimplementierungen hinausgehen. Gegebenenfalls muss eine Softwarelösung sich um Aspekte kümmern, die bei einer Hardwarelösung kaum ein Problem darstellen. Hierzu zählt das Thema der Abhörsicherheit. -\section{Wünschenswerte Basisfunktionen} +\section{Basisfunktionen} +In der verfügbaren Version wurden eine Reihe von Features realisiert. Hierzu zählt die Anzeige aller Display-Inhalte der Teilnehmerarbeitsplätze in verkleinerter Form auf einem separaten Steuer-PC, die Möglichkeit einzelne Teilnehmerarbeitsplätze auf den Dozenten-PC und damit auf den Beamer zu schalten, per Chat-Interface von der Dozentin Nachrichten auf die Bildschirme einzelner oder aller Teilnehmer zu schicken, die Inhalte des Dozenten-PC auf alle Teilnehmer-Displays zu schalten und das Sperrenvon Maus- und Tastatur der Teilnehmer. \begin{figure}[h] \center \includegraphics[width=11.5cm]{bilder/studentctlpanel.png} \caption{Student Control Panel des Edubuntu-Pakets, welches im Umfeld von Linux-Terminalservern eingesetzt werden kann.\label{uscp}} \end{figure} +Bei der Realisierung wurde einerseits auf die Absicherung der Steuerverbindungen und andererseits auf die Aspekte des Datenschutzes geachtet. Anders als bei vergleichbaren Produkten liegt in der Standardinstallation die Kontrolle bei den Teilnehmern. -\section{Funktionserweiterungen} +\section{Funktionserweiterungen} +In weiteren Schritten wurden Funktionen wie das Übertragen von Dateien zwischen einzelnen Maschinen oder das Senden von Dateien an mehrere Teilnehmer gleichzeitig implementiert (\ref{}). diff --git a/doc/LaTeX/zusfassung.log b/doc/LaTeX/zusfassung.log deleted file mode 100644 index 4924af6..0000000 --- a/doc/LaTeX/zusfassung.log +++ /dev/null @@ -1,333 +0,0 @@ -This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=pdflatex 2010.9.4) 2 OCT 2010 17:00 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**zusfassung.tex -(./zusfassung.tex -LaTeX2e <2009/09/24> -Babel and hyphenation patterns for english, usenglishmax, dumylang, noh -yphenation, loaded. -! Undefined control sequence. -l.2 \small - -? -! Undefined control sequence. -l.3 \section - *{Zusammenfassung} -? - -! LaTeX Error: Missing \begin{document}. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.3 \section* - {Zusammenfassung} -? -Missing character: There is no * in font nullfont! -Missing character: There is no Z in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no f in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no g in font nullfont! -Missing character: There is no D in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no P in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no l in font nullfont! -Missing character: There is no V in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no S in font nullfont! -Missing character: There is no w in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no c in font nullfont! -Missing character: There is no h in font nullfont! -Missing character: There is no ( in font nullfont! -Missing character: There is no P in font nullfont! -Missing character: There is no V in font nullfont! -Missing character: There is no S in font nullfont! -Missing character: There is no ) in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no A in font nullfont! -Missing character: There is no p in font nullfont! -Missing character: There is no p in font nullfont! -Missing character: There is no l in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no k in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no , in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no g in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no Z in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no Z in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no g in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no O in font nullfont! -Missing character: There is no p in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no S in font nullfont! -Missing character: There is no L in font nullfont! -Missing character: There is no X in font nullfont! -Missing character: There is no - in font nullfont! -Missing character: There is no P in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no j in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no k in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no R in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no c in font nullfont! -Missing character: There is no h in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no z in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no U in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no v in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no à in font nullfont! -Missing character: There is no ¤ in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no F in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no b in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no g in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no L in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no h in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no h in font nullfont! -Missing character: There is no l in font nullfont! -Missing character: There is no f in font nullfont! -Missing character: There is no à in font nullfont! -Missing character: There is no ¼ in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no K in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no u in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no k in font nullfont! -Missing character: There is no a in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no y in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no m in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no w in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no c in font nullfont! -Missing character: There is no k in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no l in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no w in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no . in font nullfont! - -Overfull \hbox (20.0pt too wide) in paragraph at lines 3--5 -[] - [] - - -! LaTeX Error: Missing \begin{document}. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.6 I - nzwischen liegt die Version 3 vor ... -? -Missing character: There is no I in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no z in font nullfont! -Missing character: There is no w in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no c in font nullfont! -Missing character: There is no h in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no l in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no g in font nullfont! -Missing character: There is no t in font nullfont! -Missing character: There is no d in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no V in font nullfont! -Missing character: There is no e in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no s in font nullfont! -Missing character: There is no i in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no n in font nullfont! -Missing character: There is no 3 in font nullfont! -Missing character: There is no v in font nullfont! -Missing character: There is no o in font nullfont! -Missing character: There is no r in font nullfont! -Missing character: There is no . in font nullfont! -Missing character: There is no . in font nullfont! -Missing character: There is no . in font nullfont! - -Overfull \hbox (20.0pt too wide) in paragraph at lines 6--7 -[] - [] - - -! LaTeX Error: The font size command \normalsize is not defined: - there is probably something wrong with the class file. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.9 \normalsize - -? - -! LaTeX Error: The font size command \normalsize is not defined: - there is probably something wrong with the class file. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -l.10 \newpage - -? -[1]) -* -(Please type a command or say `\end') -* -(Please type a command or say `\end') -* -(Please type a command or say `\end') -*q - -! LaTeX Error: Missing \begin{document}. - -See the LaTeX manual or LaTeX Companion for explanation. -Type H for immediate help. - ... - -<*> q - -? \end -Type to proceed, S to scroll future error messages, -R to run without stopping, Q to run quietly, -I to insert something, -1 or ... or 9 to ignore the next 1 to 9 tokens of input, -H for help, X to quit. -? x - -Here is how much of TeX's memory you used: - 8 strings out of 495061 - 296 string characters out of 1182622 - 45108 words of memory out of 3000000 - 3283 multiletter control sequences out of 15000+50000 - 3640 words of font info for 14 fonts, out of 3000000 for 9000 - 28 hyphenation exceptions out of 8191 - 19i,4n,14p,221b,113s stack positions out of 5000i,500n,10000p,200000b,50000s -Output written on zusfassung.pdf (1 page, 914 bytes). -PDF statistics: - 6 PDF objects out of 1000 (max. 8388607) - 0 named destinations out of 1000 (max. 500000) - 1 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/doc/LaTeX/zusfassung.tex b/doc/LaTeX/zusfassung.tex index 213fedd..abc4140 100644 --- a/doc/LaTeX/zusfassung.tex +++ b/doc/LaTeX/zusfassung.tex @@ -3,7 +3,7 @@ \section*{Zusammenfassung} Der Pool Video Switch (PVS) ist eine Applikation, die seit einiger Zeit im Zuge des OpenSLX-Projekts am Rechenzentrum der Universität Freiburg und am Lehrstuhl für Kommunikationssysteme entwickelt wird. -Inzwischen liegt die Version 3 vor ... +Inzwischen liegt die Version 3 vor. \normalsize -- cgit v1.2.3-55-g7522 From ad0c21b66b6d73cba29c4ea90a1137495ff0ef8c Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Thu, 4 Nov 2010 22:16:05 +0100 Subject: Developer documentation for pvsinput --- doc/LaTeX/bilder/menu-key.png | Bin 0 -> 2179 bytes doc/LaTeX/bilder/vnc-frame-buttons.png | Bin 0 -> 7050 bytes doc/LaTeX/bilder/vnc-frame-buttons.xcf | Bin 0 -> 19912 bytes doc/LaTeX/devel/0100-build.tex | 2 + doc/LaTeX/devel/0100-build.tex~ | 69 ++++++ doc/LaTeX/devel/0300-pvs.tex | 158 ++++++++++++++ doc/LaTeX/devel/0300-pvs.tex~ | 384 +++++++++++++++++++++++++++++++++ doc/LaTeX/mystyle-pdf.tex | 2 + doc/LaTeX/user/0000-chapter.tex | 4 +- doc/LaTeX/user/0001-chapter.tex | 34 +++ 10 files changed, 652 insertions(+), 1 deletion(-) create mode 100644 doc/LaTeX/bilder/menu-key.png create mode 100644 doc/LaTeX/bilder/vnc-frame-buttons.png create mode 100644 doc/LaTeX/bilder/vnc-frame-buttons.xcf create mode 100644 doc/LaTeX/devel/0100-build.tex~ create mode 100644 doc/LaTeX/devel/0300-pvs.tex~ (limited to 'doc') diff --git a/doc/LaTeX/bilder/menu-key.png b/doc/LaTeX/bilder/menu-key.png new file mode 100644 index 0000000..8cec826 Binary files /dev/null and b/doc/LaTeX/bilder/menu-key.png differ diff --git a/doc/LaTeX/bilder/vnc-frame-buttons.png b/doc/LaTeX/bilder/vnc-frame-buttons.png new file mode 100644 index 0000000..0a0a69d Binary files /dev/null and b/doc/LaTeX/bilder/vnc-frame-buttons.png differ diff --git a/doc/LaTeX/bilder/vnc-frame-buttons.xcf b/doc/LaTeX/bilder/vnc-frame-buttons.xcf new file mode 100644 index 0000000..faf5261 Binary files /dev/null and b/doc/LaTeX/bilder/vnc-frame-buttons.xcf differ diff --git a/doc/LaTeX/devel/0100-build.tex b/doc/LaTeX/devel/0100-build.tex index f5cf05e..66d94da 100644 --- a/doc/LaTeX/devel/0100-build.tex +++ b/doc/LaTeX/devel/0100-build.tex @@ -22,6 +22,8 @@ Der Pool Video Switch benötigt zum Kompilieren folgende Pakete (und ihre Abhän Dies wird nur benötigt, falls Unterstützung weiterer Sprachen implementiert werden soll, da in diesem Paket das Hilfsprogramm \textbf{linguist} enthalten ist. \item cmake >= 2.4.0\\ Eingesetztes Buildsystem und der Makefile-Generator. Um distributionsspezifische Pakete zu erzeugen wird CPack benutzt. + \item libxtst-dev, libxi-dev\\ + Diese Bibliotheken dienen zur Implementierung der Fernsteuerungsfunktionen. \end{itemize} \section{Kompilieren aus Quellen} diff --git a/doc/LaTeX/devel/0100-build.tex~ b/doc/LaTeX/devel/0100-build.tex~ new file mode 100644 index 0000000..66d94da --- /dev/null +++ b/doc/LaTeX/devel/0100-build.tex~ @@ -0,0 +1,69 @@ +\chapter{Erzeugen und Installieren der Applikation} +\index{Installieren} +Um den Pool Video Switch erfolgreich zu kompilieren, müssen zunächst die Quelldateien heruntergeladen werden. Hierzu sollte auf dem Arbeitsrechner ein Subversion-Client installiert sein. Ein Checkout kann in einem beliebigen Terminal erfolgen, wobei es zwei unterschiedliche Arten des Zugriffs gibt.\\ + +Anonym, nur Leserechte:\\ +\textbf{svn co http://svn.openslx.org/svn/pvs/trunk/pvs}\\ + +Mit Account, auch Schreibrechte (benutzer mit SSH Login ersetzen):\\ +\textbf{svn co svn+ssh://benutzer@openslx.org/srv/svn/pvs}\\ + + +\section{Voraussetzungen} +Der Pool Video Switch benötigt zum Kompilieren folgende Pakete (und ihre Abhängigkeiten): +\begin{itemize} + \item libvncserver-dev >= 0.9.3\\ + Eine angenehm kleine, wenn auch in C geschriebene, Bibliothek für die Erstellung von VNC Servern und Clients. + \item libx11-dev >= 1.3.3\\ + Diese Bibliothek wurde eingesetzt, um ausgewählten oder allen Zielrechnern den Zugriff auf Maus und Tastatur zu entziehen und den Bildschirm schwarz zu schalten. + \item libqt4-dev >= 4.5.3\\ + Sowohl die Server als auch die ClientGUI benutzen das Qt Framework in der Version 4. Ferner wird QtNetwork zur Kommunikation zwischen Server und Client benötigt und QtDbus zur Interprozesskommunikation zwischen Client-Daemon und GUI. + \item qt4-dev-tools >= 4.5.3\\ + Dies wird nur benötigt, falls Unterstützung weiterer Sprachen implementiert werden soll, da in diesem Paket das Hilfsprogramm \textbf{linguist} enthalten ist. + \item cmake >= 2.4.0\\ + Eingesetztes Buildsystem und der Makefile-Generator. Um distributionsspezifische Pakete zu erzeugen wird CPack benutzt. + \item libxtst-dev, libxi-dev\\ + Diese Bibliotheken dienen zur Implementierung der Fernsteuerungsfunktionen. +\end{itemize} + +\section{Kompilieren aus Quellen} +Sobald alle Voraussetzungen erfüllt und die Quellen installiert sind, kann das ausführbare Programm erzeugt werden. Falls gewünscht, kann zusätzlich in der Datei \textit{CMakeLists.txt} der Build-Type eingestellt werden. Gültige Werte sind \texttt{Debug} und \texttt{Release} und ihre Wirkung den zwei weiteren Zeilen zu entnehmen. +\begin{verbatim} +SET(CMAKE_BUILD_TYPE Debug) +SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native") +\end{verbatim} +Damit das Wurzelverzeichnis des Projekts weiterhin sauber bleibt (Übersicht beibehalten, Arbeit mit SVN erleichtern), werden wir hier einen Out-Of-Source Build durchführen. Dies bedeutet, dass zum Kompilieren ein seperates Verzeichnis benutzt wird und sämtliche automatisch generierten Dateien sowie das Kompilat selbst hier abgelegt wird. In einem Terminal sollte nun in das Verzeichnis indem sich das Projekt befindet gewechselt werden, um folgende Befehle ausführen zu können:\\ + +\textbf{mkdir -p build}\\ +\textbf{cd build/}\\ +\textbf{cmake ..}\\ +\textbf{make}\\ + +Die verschiedenen Applikationen können nun folgendermaßen (in \textit{build/}) ausgeführt und getestet werden: +\begin{itemize} + \item Den Server starten: \textbf{./pvsmgr} + \item Den Server mit Touchscreenoberfläche starten: \textbf{./pvsmgrtouch} + \item Den ClientDaemon starten: \textbf{./pvs} + \item Die ClientGUI starten: \textbf{./pvsgui} +\end{itemize} + +\section{Installation} +\index{Paket!RPM} \index{Paket!DPKG} +Nachdem das Projekt kompiliert wurde, kann es (als Superuser z.B. root) auf dem lokalen System installiert werden:\\ +\textbf{make install}\\ + +Dabei werden folgende Dateien auf das aktuelle System übertragen:\\ +\textit{/usr/local/bin/pvsmgr}\\ +\textit{/usr/local/bin/pvs}\\ +\textit{/usr/local/bin/pvsgui}\\ +\textit{/usr/local/bin/pvsmgrtouch}\\ +\textit{/usr/local/share/dbus-1/services/org.openslx.pvs.service}\\ + +Ein Vorteil ist, dass nun ein seperates Ausführen des Client-Daemon nicht mehr notwendig ist. Dieser wird ab sofort automatisch gestartet und beendet, sobald die ClientGUI ausgeführt wurde.\\ + +Es ist ebenfalls möglich, distributionsspezifische Pakete zu erstellen (zur Zeit nur .deb):\\ +\textbf{make package}\\ + +Falls erfolgreich, befindet sich nun eine Installationsdatei (pvs--Linux.deb) in \textit{build/} die z.B. auf Debian-Derivaten mit \textbf{dpkg -i} installiert werden kann.\\ +Anmerkung: Falls Pakete für Rechner gebaut werden sollen, die vom Erstellungssystem her verschieden sind, muß der Schalter \texttt{-march=native} in der Datei \textit{CMakeLists.txt} angepasst werden! diff --git a/doc/LaTeX/devel/0300-pvs.tex b/doc/LaTeX/devel/0300-pvs.tex index 92b36f7..44f084f 100644 --- a/doc/LaTeX/devel/0300-pvs.tex +++ b/doc/LaTeX/devel/0300-pvs.tex @@ -175,6 +175,163 @@ 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. +\section{Fernsteuerung} + +Die Fernsteuerung eines Clients erfolgt durch den clientseitigen Empfang von \texttt{PVSCOMMAND}-Nachrichten +mit dem Ident \texttt{INPUTEVENT}. +Dieser ist die Base64-kodierte Binärdarstellung eines Eingabeereignisses angehängt, das +clientseitig nachvollzogen werden soll. +\begin{table} + \begin{tabular}{|l|l|p{4cm}|p{4cm}|} + \hline + \textbf{\texttt{type}} & \textbf{\texttt{code}} & \textbf{\texttt{value}} & \textbf{Beschreibung} \\ + \hline + \multirow{2}{*}{\texttt{ET\_KEY}} & + \texttt{EC\_PRESS} & + \multirow{2}{4cm}{Auslösende Taste und gehaltene Modifikatortasten} & + Taste gedrückt \\ + \cline{2-2}\cline{4-4} + & + \texttt{EC\_RELEASE} & + & + Taste losgelassen\newline \\ + \hline + \multirow{2}{*}{\texttt{ET\_BUTTON}} & + \texttt{EC\_PRESS} & + \multirow{2}{4cm}{Auslösende und + gedrückte Maustasten} & + Maustaste gedrückt \\ + \cline{2-2}\cline{4-4} + & + \texttt{EC\_RELEASE} & + & + Maustaste losgelassen \\ + \hline + \texttt{ET\_POINTER} & + --- & + Absolute Koordinaten & + Mauszeiger bewegt \\ + \hline + \multirow{4}{*}{\texttt{ET\_SPECIAL}} & + \texttt{EC\_REBOOT} & + --- & + Systemneustart \\ + \cline{2-4} + & + \texttt{EC\_KILL\_X} & + --- & + X-Server töten \\ + \cline{2-4} + & + \texttt{EC\_SYSRQ} & + Kommando & + Magic-SysRq-Taste \\ + \cline{2-4} + & + \texttt{EC\_SAY\_HELLO} & + --- & + Harmloses Kommando für Funktionstest \\ + \hline + \end{tabular} + \caption{Mögliche Eingabeereignisse\label{tab:input-events}\index{Eingabeereignis!\texttt{InputEvent}}} +\end{table} +Tabelle \ref{tab:input-events} zeigt die möglichen Eingabeereignisse. +Eingabeereignisse werden durch die PVS Input Library (libpvsinput) behandelt, +deren Funktion an dieser Stelle dargestellt werden soll. + +\subsection{Behandlung eines Eingabeereignisses} +\index{Eingabeereignis!Behandlung} + +Ein Eingabeereignis durchläuft die folgenden Stationen: +\begin{enumerate} + \item Die Steuerkonsole generiert ein Eingabeereignis und übergibt dieses an die Netzwerktransportschicht. + \item Der PVS-Client empfängt das Eingabeereignis und übergibt die Behandlung einer Instanz der + Klasse \texttt{InputEventHandlerChain}\index{Klasse!\texttt{InputEventHandlerChain}}. + \item Die Klasse \texttt{InputEventHandlerChain} arbeitet eine Liste von Instanzen der Klasse + \texttt{InputEventHandler}\index{Klasse!\texttt{InputEventHandler}} der Reihe nach ab, um zu sehen, ob eine dieser Instanzen + das Ereignis bearbeiten kann. + \item Falls die betrachtete Instanz das Ereignis bearbeiten kann, wird geprüft, ob der dafür + nötige Sicherheitskontext vorhanden ist. + \item Falls dies ebenfalls der Fall ist, wird die entsprechende Aktion in einer implementierung + der abstrakten Methode \texttt{InputEventHandler::handle} ausgeführt und die weitere Bearbeitung + beendet. + \item Falls keiner der vorherigen Handler das Ereignis behandelt hat, wird es durch + die Klasse \texttt{PrivilegedHandlerForwarder}\index{Klasse!\texttt{PrivilegedHandlerForwarder}} an den zusätzlichen Daemon \texttt{pvsprivinputd} + weitergegeben. + \item Der \texttt{pvsprivinputd}\index{pvsprivinputd} besitzt ebenfalls eine \texttt{InputEventHandlerChain}, die + nach dem gleichen Muster bearbeitet wird. + Falls hierbei kein passender Handler gefunden wird, wird das Ereignis in eine Logdatei geschrieben + und die Bearbeitung aufgegeben. +\end{enumerate} +Ereignishandler sind implementiert für Maus- und Tastatureingaben unter Linux/X11 (mit Hilfe der XTest-Erweiterung), +sowie zur Simulation von Strg+Alt+Entf, Strg+Alt+Rück und Magic SysRq. + +\subsection{Erweiterungen} + +Weitere Eingabehandler lassen sich der libpvsinput hinzufügen. +Dazu muss eine Klasse bereitgestellt werden, die von der Template-Klasse +\texttt{InputEventHandler} erbt. +Diese akzeptiert eine variable Anzahl\footnote{% + Bis zu 16, diese Zahl lässt sich jedoch durch Neugenerierung + der Datei \texttt{src/input/detail/ typelist\_autogen.h} erhöhen. + Ein entsprechendes Programm ist im Quellcode zu finden.} +von Templateparametern, die verschiedene Aspekte der Eingabeereignisbehandlung konfigurieren. + +Durch die Angabe eines Templateparameters \texttt{input\_policy::Match<\textit{typ}, \textit{code}, \textit{wert}>}\index{Klasse!\texttt{input\_policy::Match}}, +wobei \textit{code} und \textit{wert} weggelassen werden können, wird spezifiziert, +dass der betreffende Handler nur für Eingabeereignisse mit den entsprechenden Feldwerten aufgerufen wird. +Wird kein solcher Parameter angegeben, wird der betreffende Handler niemals aufgerufen. +Mehrere \texttt{Match}-Parameter werden mittels logischem ODER verknüpft. + +Ein Templateparameter der Form \texttt{input\_policy::Require<\textit{Merkmal\dots}>}\index{Klasse!\texttt{input\_policy::Require}} +gibt an, dass dieser Handler nur auf einem System lauffähig ist, das die entsprechenden \textit{Merkmale} +aufweist. +Eine Liste von Systemmerkmalen wird in der Datei \texttt{src/input/detail/systemTraits.h} +zentral verwaltet. +Hier lassen sich neue Merkmale mit Hilfe des Makros \texttt{DEFINE\_SYSTEM\_TRAIT} definieren +und mit Hilfe des Präprozessors zwischen den Zeilen \texttt{BEGIN\_SYSTEM\_TRAITS} und +\texttt{END\_SYSTEM\_TRAITS} einfügen. +Diese Vorgehensweise beschränkt die Nutzung des Präprozessors auf eine Datei. +Wird kein \texttt{Require}-Parameter angegeben, so wird der entsprechende Handler als +immer lauffähig eingestuft. +Mehrere \texttt{Require}-Parameter werden mittels logischem ODER verknüpft. + +Weiterhin kann ein Templateparameter der Form \texttt{input\_policy::Security<\textit{Richtlinie}>}\index{Klasse!\texttt{input\_policy::Security}} +angegeben werden. Hierbei stehen für \textit{Richtlinie} die Klassen \texttt{input\_policy::AllowLocal\-OrPrivileged} +oder \texttt{input\_policy::AllowEverybody} zur Verfügung. +Hierdurch wird bestimmt, welche Sicherheitsanforderungen zur Ausführung des Handlers erfüllt sein +müssen. +Die Richtlinie \texttt{input\_policy::AllowLocalOrPrivileged} bestimmt, dass nur Benutzer, +deren Sitzung lokal ist, oder solche, die nach der Konfiguration des pvsprivinputd als privilegiert +gelten, die entsprechende Aktion aufrufen dürfen (hierbei geht es um den Benutzer, der den PVS-Client +ausführt, und nicht den Benutzer, der die Steuerkonsole bedient). +Die Richtlinie \texttt{input\_policy::AllowEverybody} erlaubt die Ausführung der Aktion ohne +besonderen Sicherheitskontext. +Neue Sicherheitsrichtlinien der Form \texttt{input\_policy::Security<\textit{T}>} lassen sich +nutzen, indem eine Klasse \textit{T} eingeführt wird, die eine Methode\\ +\makebox[1cm]{}\texttt{static bool allow(InputEventContext const*)}\\ +besitzt, an die die Entscheidung, ob eine Aktion zuzulassen ist, delegiert wird. + +Der zu implementierende Eingabehandler braucht weiterhin eine Implementierung der abstrakten +Methode\\ +\makebox[1cm]{}\texttt{virtual void handle(InputEvent const\&, InputEventContext const*)},\\ +in der die entsprechende Aktion ausgeführt wird. + +Die Aufnahme des neuen Handlers in die Liste der abzuarbeitenden Handle erfolgt, +je nachdem ob erweiterte Berechtigungen zur Bearbeitung notwendig sind, +in einer der Dateien \texttt{privilegedHandlerChain.cpp} oder \texttt{unprivilegedHandler\-Chain.cpp} +in \texttt{src/input}, wo dem Kettenaufruf eine Zeile der Form\\ +\makebox[1cm]{}\texttt{.add<\textit{Handler}>()}\\ +hinzugefügt wird. +Die Verwendung des Präprozessors zum Ausschluss von Handlern, die auf dem +Zielsystem nicht lauffähig sind, ist an dieser Stelle nicht notwendig und wird durch die +\texttt{Require}-Richtlinie umgesetzt. +Notwendig ist lediglich, die Übersetzung des Handlers auf inkompatiblen Systemen zu verhindern. +Dies kann mit Hilfe des Build-Systems oder durch die Klammerung der gesamten Übersetzungseinheit +in Präprozessorbedingungen geschehen. + +Eine API-Referenz zur libpvsinput (Stand: 4.~November~2010) findet sich im Projektwiki +unter \url{http://lab.openslx.org/projects/pvs/wiki/RemoteKeyMouse}. \section{Netzwerkkommunikation} \index{Netzwerkkommunikation} @@ -216,6 +373,7 @@ PVSCOMMAND & VNC & NO & Verbiete Zugriff \\ PVSCOMMAND & PING & & \\ PVSCOMMAND & VNCREQUEST & & \\ PVSCOMMAND & VNCSRVRESULT & result code & Der Rückgabewert des pvs-vncsrv Skripts \\ +PVSCOMMAND & INPUTEVENT & Base64-kodierte InputEvent-Struktur & Fernsteuerung \\ PVSMESSAGE & BROADCAST & MESSAGE &\\ PVSMESSAGE & clientToAdd & & Client hinzufügen (Chat)\\ PVSMESSAGE & clientToRemove & & Client entfernen (Chat)\\ diff --git a/doc/LaTeX/devel/0300-pvs.tex~ b/doc/LaTeX/devel/0300-pvs.tex~ new file mode 100644 index 0000000..ac88e46 --- /dev/null +++ b/doc/LaTeX/devel/0300-pvs.tex~ @@ -0,0 +1,384 @@ +\chapter{Aufbau und Funktionsweise des PVS} +\index{Aufbau} \index{Funktionsweise} \index{Konzept} + +Generelles Konzept + +\section{Einzelne Komponenten} +\index{Komponenten} + +\subsection{Zuordnung von Konsole und Clients} +\input{devel/0310-service-discovery} + +\section{Überblick über Aktivitäten auf Clients} + +\subsection{Projektion an Alle} +\index{Projektion} +Eine wichtige Eigenschaft des PVS ist die Verwaltung von Projektionen zwischen mehreren Clients. Eine Projektion ist hierbei das Anzeigen des Bildschirminhalts eines Clients - der sogenannten Source oder Quelle - auf einem oder mehreren anderen Clients - den Targets oder Zielen der Projektion. +Die für die Projektion benötigten Verbindungsdaten wie Passwort und IP werden von jedem Client bei der Anmeldung an der Steuerkonsole übermittelt und in einer Liste von PVSConnection Objekten in der Klasse \textit{PVSConnectionManager} gespeichert. Diese zentrale Verwaltung hat mehrere Vorteile: +\begin{itemize} + \item Die Quelle einer Projektion muss keine Aktion ausführen und kann passiv bleiben. + \item Redundanz der Daten wird verhindert, da diese auch in der Steuerkonsole zur Darstellung der Thumbnails benötigt werden. + \item Das Nachrichtenaufkommen wird reduziert, da lediglich eine Nachricht bei der Anmeldung an der Steuerkonsole übermittelt wird. +\end{itemize} + +Bei der Auswahl der Quelle und Ziele ist zu beachten, dass man für jede Projektion jeweils nur eine Quelle jedoch mehrere Ziele auswählen kann. +Quelle und Ziel müssen außerdem verschiedenen Kriterien genügen. +\begin{itemize} + \item Eine Quelle darf nicht gleichzeitig Ziel einer Projektion sein. + \item Ein Ziel einer Projektion darf nicht Ziel einer anderen Projektion sein. + \item Eine Quelle darf mehrfach als Quelle ausgewählt werden. +\end{itemize} +Diese Einschränkungen werden in der Steuerkonsole durchgesetzt, indem im Zielauswahldialog die Zielmenge eingeschränkt wird. +Siehe hierzu auch \ref{pvs-console-projection} Projektion. + +Der Projektionsvorgang an sich besteht aus mehreren Teilen. Wird eine Projektion angefordert, wird überprüft, ob auf der Quelle ein VNC Server gestartet ist. Falls nicht, wird versucht, einen VNC Server zu starten. Ist dies erfolgreich, so sendet die Steuerkonsole das entsprechende Tripel (IP, Passwort und Port der Quelle) an alle ausgewählten Ziele. Clients, welche eine Projektionsaufforderung erhalten, verbinden sich dann mit den Verbindungsdaten zum VNC Server der Quelle. Um die Einstellbarkeit der Qualität einer Projektion zu ermöglichen, kann die Steuerkonsole einen von drei Qualitätswerten an die Zielclients übermitteln. Siehe hierzu auch \ref{pvs-console-quality} Qualitätsoptionen. + + +\subsection{Projektion eines Clients auf dem Beamer} +\index{Beamer} + +Die Projektion eines Clients an den Beamer unterscheidet sich im Wesentlichen nicht von anderen Projektionen. Lediglich ist das Ziel der Projektion hierbei der Dozentenpc bzw. der PC, welcher an den Beamer angeschlossen ist. Eine spezielle Auszeichnung des Beamers erfolgt nicht. Die Anzahl der Ziele wird hierbei nicht beschränkt, da es wünschenswert sein kann, den auf dem Beamer dargestellten Bildschirminhalt auch gleichzeitig auf anderen Clients darzustellen. + +\subsection{Chat- und Informationskanal} +\index{Chat} + +Es gibt 2 Möglichkeiten um Kontakt mit den Clients aufzunehmen. Die erste ist über den Chat, wo Nachrichten sowohl über den offentlichen Kanal als +auch über einen privaten Kanäle verteilt werden können, und die zweite vom PVSManager aus über den Informationskanal. +Der Informationskanal ermöglich das Versenden von Nachrichten, die dringend zu lesen sind, an die Clients. +Im Gegenteil zum Chat erscheinen solche Nachrichten nicht im Chatfenster sondern in einem Pop-Up-Fenster und werden vom Bildschirm entfernt erst wenn man sie +als gelesen markiert durch das Drucken auf dem Knopf \textit{'OK'}. +\\ +\\ +\textbf{Behandlung der Nachrichten im Server} +\\ +\\ +Chat-Nachtichten werden von Server in der Klasse \texttt{PVSConnectionManager} mittels der Methode \texttt{onChat} behandelt. Dort wird aus der Nachrit den Empfänger +und den Absender ausglesen und die Nachricht an beide versendet. So gilt das Empfangen eine eigene Nachricht als Bestätigung, dass die Nachricht ordentlich vom Server +behandelt und versendet wurde. Das Gestalt von solchen Nachrichten sieht folgendermaßen aus + +\begin{center} + PVSMSG +\end{center} +\begin{center} +\begin{tabular}{|l | p{3cm} | p{3cm} | p{3cm}|} +\hline +Type & Ident & Msg & sndID\\ +\hline +\texttt{PVSMESSAGE} & \texttt{} & \texttt{<:} & \texttt{<}\\ +\end{tabular} +\end{center} + +Informationsnachrichten werden ausschließlich vom PVSManager versendet.Dies geschiet in der Klasse \texttt{ConnectionList} mittels der Methode \texttt{on\_Message}. + +\begin{center} + PVSMSG +\end{center} +\begin{center} +\begin{tabular}{|l | l | p{6cm} | p{6cm}} +\hline +Type & Ident & Msg\\ +\hline +\texttt{PVSMESSAGE} & \texttt{BROADCAST} & \texttt{} \\ +\end{tabular} +\end{center} + +Informationnachrichten können außerdem einen oder mehrere Clients sperren, wenn sie den Ident \texttt{LOCKSTATION} enthalten. Sobald ein Client die Nachricht empfängt, +wird diese auf dem Bilschirm angezeigt und 10 Sekunden später wird der Client gesperrt. + +Abgesehen von der Behandlung der Nachrichten muss sich der Server darum kümmern, dass jeder verbunde Client über alle nötige Informationionen verfügt damit er +Nachrichten mit andren Clients austauschen kann. Dies wird folgendermaßen erledigt: +\begin{itemize} + \item \textbf{Einfügen eines Clients:} um die Verwaltung von Clients kümmert sich die Klasse \texttt{PVSConnectionManager}, in der die Methode \texttt{onClientNew} für das Einfügen +von neuen Clients zuständigt ist. Sowald ein neuer Client in der Client-Liste des Servers eingefügt wird, wird an ihn die Liste aller im Server bereits angemeldete +Clients geschickt. Dazu dient die Methode \texttt{sendEventToClients}. + +Bis hier ist der neue Client noch unbekannt für den Rest der Nutzer. Der neuer Client wird erst bekannt gegeben sobald er vom Server einen Benutzername +zugewissen bekommen hat. Da es sein kann, dass den Name, mit dem der neue Client sich beim Server anmelden wollte, +bereits vergeben ist und muss unter Umständen verändert werden. Diese Zuweisung findet in der Methode \texttt{onLoginUsername} statt, +wo nicht nur alle andere Clients sondern auch der neue Client darüber informiert werden. Auch hier kümmert sich die Methoder \texttt{sendEventToClients} +ums Vesenden der entsprechenden Informationen. + + \item \textbf{Entfernen eines Clients:} das Entfernen von Clients wird von der Methode +\\ +\texttt{onClientRemove} erledigt, wo analog wie +Oben alle Clients darüber informiert werden. +\end{itemize} + +Für dei Übermittlung solche Informationen werden Nachrichten mit folgenden Gestal benutzt + +\begin{center} + PVSMSG +\end{center} +\begin{center} +\begin{tabular}{|l | l | p{6cm} |} +\hline +Type & Ident & Msg\\ +\hline +\texttt{PVSMESSAGE} & \texttt{} & \texttt{:} \\ +\end{tabular} +\end{center} + +Es gibt drei unterschiedliche Befehle, die welche Änderung in der localen Client-Liste der Clients vorgenommen werden soll angeben. +\begin{enumerate} + \item \texttt{clientToAdd} +\item \texttt{clientToRemove} +\item \texttt{assignedName} +\end{enumerate} + +Wie es bei Servern gewöhnt ist, werden alle relevante Ereignisse in Log-Dateien protokolliert. Ereignisse werden im Chat-Log mit folgendem +Befehl eingetragen + +\begin{center} +\texttt{ConsoleLog writeChat()} +\end{center} + +\textbf{Chat-Interface der Steuerkonsole} +\\ +\\ +So wie alle Clients ist der PVSManager auch ein Teilnehmer im Chat. Der PVSManager steht wie alle andere Teilnehmer auch in der Nutzer-Liste +jedes Chat-Fenster und kann ebenfalls über private Nachrichten direkt angesprochen werden. Die Arbeitsweise dieser Chat-Interface ist sehr simple. +Da sie sich im Server befindet, müssen einfach alle Ereignise (Nachrichten senden ist die einzige Ausnahme) von der Klasse \texttt{PVSConnectionManager} +an die Klasse \texttt{MainWindow} weitergegeben werden. Dies kümmert sich darum, alle Informationen zu verarbeiten und diesein der Chat-Fenster der +Steuerkonsole anzuzeigen. + +Folgende Methoden der Klasse \texttt{MainWindow} ermöglichen das Anzeigen einer empfangenen Nachricht im Chat-Fenster der Steuerkonsole und Änderungen (Clients einfügen +und entfernen) in der sowohl im Chat-Fenster als auch in der Steuerkonsole angezeigten Client-Liste. +\\ +\\ +\texttt{receiveChatMsg(, , )} +\\ +\texttt{removeConnection(*pvsClient)} +\\ +\texttt{addConnection(*pvsClient)} +\\ +\\ +Alle diese Methoden werden im Gegensatz von der Methode \texttt{sendChatMsg(PVSMsg myMsg)} von der Klasse \texttt{PVSConnectionManager} aus ausgeführt. Da alle durchs +Netz empfangene Nachrichten müssen an die GUI-Weitergegeben werden. Beim Versenden von Nachrichten funktioniert es genau umgekehrt. Die Nachricht wird +vom Nutzer in der GUI eingegeben und muss an die Klasse \texttt{PVSConnectionManager} weitergeleitet werden, damit diese ins Netz gesendet wird. Darum kümmert +sich die Methode in der Klasse \texttt{MainWindow}. +\\ +\\ +\texttt{MainWindow::sendChatMsg(PVSMsg myMsg)} +\\ +\\ +\textbf{Chat-Clients} +\\ +\\ +So weit haben wir die Funtionsweisen des Servers im Bezug auf dem Chat kennengelernt. +Nun wird erläutert wie die einzelnen Clients die Nachrichten bearbeiten. +\\ +\\ +Auf der Client-Seite in der Klasse \texttt{PVSConnectionServer} werden alle Nachrichten des PVS-Protokolls empfangen und gefiltert (Siehe Methode \texttt{handleClientMsg}). +Nachrichten mit dem Ident \texttt{PVSMESSAGE} werden durch den Dispatcher direkt an die Klasse \texttt{PVSChatClient} weitergeleitet, wo die Methode \texttt{receive} feststellen wird, +ob es sich dabei um eine Gespräch-Nachricht oder eine Befehl-Nachricht handelt. Um es feststellen zu können, wird aus der empfangenen Nachricht ein PVSChatMsg-Objekt +erzeugt (siehe Konstruktor) und mittels der Methode \texttt{isCommand} erfährt man ob es sich um einen Befehl handelt oder nicht. +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. + +\section{Fernsteuerung} + +Die Fernsteuerung eines Clients erfolgt durch den clientseitigen Empfang von \texttt{PVSCOMMAND}-Nachrichten +mit dem Ident \texttt{INPUTEVENT}. +Dieser ist die Base64-kodierte Binärdarstellung eines Eingabeereignisses angehängt, das +clientseitig nachvollzogen werden soll. +\begin{table} + \begin{tabular}{|l|l|p{4cm}|p{4cm}|} + \hline + \textbf{\texttt{type}} & \textbf{\texttt{code}} & \textbf{\texttt{value}} & \textbf{Beschreibung} \\ + \hline + \multirow{2}{*}{\texttt{ET\_KEY}} & + \texttt{EC\_PRESS} & + \multirow{2}{4cm}{Auslösende Taste und gehaltene Modifikatortasten} & + Taste gedrückt \\ + \cline{2-2}\cline{4-4} + & + \texttt{EC\_RELEASE} & + & + Taste losgelassen\newline \\ + \hline + \multirow{2}{*}{\texttt{ET\_BUTTON}} & + \texttt{EC\_PRESS} & + \multirow{2}{4cm}{Auslösende und + gedrückte Maustasten} & + Maustaste gedrückt \\ + \cline{2-2}\cline{4-4} + & + \texttt{EC\_RELEASE} & + & + Maustaste losgelassen \\ + \hline + \texttt{ET\_POINTER} & + --- & + Absolute Koordinaten & + Mauszeiger bewegt \\ + \hline + \multirow{4}{*}{\texttt{ET\_SPECIAL}} & + \texttt{EC\_REBOOT} & + --- & + Systemneustart \\ + \cline{2-4} + & + \texttt{EC\_KILL\_X} & + --- & + X-Server töten \\ + \cline{2-4} + & + \texttt{EC\_SYSRQ} & + Kommando & + Magic-SysRq-Taste \\ + \cline{2-4} + & + \texttt{EC\_SAY\_HELLO} & + --- & + Harmloses Kommando für Funktionstest \\ + \hline + \end{tabular} + \caption{Mögliche Eingabeereignisse\label{tab:input-events}\index{Eingabeereignis!\texttt{InputEvent}}} +\end{table} +Tabelle \ref{tab:input-events} zeigt die möglichen Eingabeereignisse. +Eingabeereignisse werden durch die PVS Input Library (libpvsinput) behandelt, +deren Funktion an dieser Stelle dargestellt werden soll. + +\subsection{Behandlung eines Eingabeereignisses} +\index{Eingabeereignis!Behandlung} + +Ein Eingabeereignis durchläuft die folgenden Stationen: +\begin{enumerate} + \item Die Steuerkonsole generiert ein Eingabeereignis und übergibt dieses an die Netzwerktransportschicht. + \item Der PVS-Client empfängt das Eingabeereignis und übergibt die Behandlung einer Instanz der + Klasse \texttt{InputEventHandlerChain}\index{Klasse!\texttt{InputEventHandlerChain}}. + \item Die Klasse \texttt{InputEventHandlerChain} arbeitet eine Liste von Instanzen der Klasse + \texttt{InputEventHandler}\index{Klasse!\texttt{InputEventHandler}} der Reihe nach ab, um zu sehen, ob eine dieser Instanzen + das Ereignis bearbeiten kann. + \item Falls die betrachtete Instanz das Ereignis bearbeiten kann, wird geprüft, ob der dafür + nötige Sicherheitskontext vorhanden ist. + \item Falls dies ebenfalls der Fall ist, wird die entsprechende Aktion in einer implementierung + der abstrakten Methode \texttt{InputEventHandler::handle} ausgeführt und die weitere Bearbeitung + beendet. + \item Falls keiner der vorherigen Handler das Ereignis behandelt hat, wird es durch + die Klasse \texttt{PrivilegedHandlerForwarder}\index{Klasse!\texttt{PrivilegedHandlerForwarder}} an den zusätzlichen Daemon \texttt{pvsprivinputd} + weitergegeben. + \item Der \texttt{pvsprivinputd}\index{pvsprivinputd} besitzt ebenfalls eine \texttt{InputEventHandlerChain}, die + nach dem gleichen Muster bearbeitet wird. + Falls hierbei kein passender Handler gefunden wird, wird das Ereignis in eine Logdatei geschrieben + und die Bearbeitung aufgegeben. +\end{enumerate} +Ereignishandler sind implementiert für Maus- und Tastatureingaben unter Linux/X11 (mit Hilfe der XTest-Erweiterung), +sowie zur Simulation von Strg+Alt+Entf, Strg+Alt+Rück und Magic SysRq. + +\subsection{Erweiterungen} + +Weitere Eingabehandler lassen sich der libpvsinput hinzufügen. +Dazu muss eine Klasse bereitgestellt werden, die von der Template-Klasse +\texttt{InputEventHandler} erbt. +Diese akzeptiert eine variable Anzahl\footnote{% + Bis zu 16, diese Zahl lässt sich jedoch durch Neugenerierung + der Datei \texttt{src/input/detail/ typelist\_autogen.h} erhöhen. + Ein entsprechendes Programm ist im Quellcode zu finden.} +von Templateparametern, die verschiedene Aspekte der Eingabeereignisbehandlung konfigurieren. + +Durch die Angabe eines Templateparameters \texttt{input\_policy::Match<\textit{typ}, \textit{code}, \textit{wert}>}\index{Klasse!\texttt{input\_policy::Match}}, +wobei \textit{code} und \textit{wert} weggelassen werden können, wird spezifiziert, +dass der betreffende Handler nur für Eingabeereignisse mit den entsprechenden Feldwerten aufgerufen wird. +Wird kein solcher Parameter angegeben, wird der betreffende Handler niemals aufgerufen. +Mehrere \texttt{Match}-Parameter werden mittels logischem ODER verknüpft. + +Ein Templateparameter der Form \texttt{input\_policy::Require<\textit{Merkmal\dots}>}\index{Klasse!\texttt{input\_policy::Require}} +gibt an, dass dieser Handler nur auf einem System lauffähig ist, das die entsprechenden \textit{Merkmale} +aufweist. +Eine Liste von Systemmerkmalen wird in der Datei \texttt{src/input/detail/systemTraits.h} +zentral verwaltet. +Hier lassen sich neue Merkmale mit Hilfe des Makros \texttt{DEFINE\_SYSTEM\_TRAIT} definieren +und mit Hilfe des Präprozessors zwischen den Zeilen \texttt{BEGIN\_SYSTEM\_TRAITS} und +\texttt{END\_SYSTEM\_TRAITS} einfügen. +Diese Vorgehensweise beschränkt die Nutzung des Präprozessors auf eine Datei. +Wird kein \texttt{Require}-Parameter angegeben, so wird der entsprechende Handler als +immer lauffähig eingestuft. +Mehrere \texttt{Require}-Parameter werden mittels logischem ODER verknüpft. + +Weiterhin kann ein Templateparameter der Form \texttt{input\_policy::Security<\textit{Richtlinie}>}\index{Klasse!\texttt{input\_policy::Security}} +angegeben werden. Hierbei stehen für \textit{Richtlinie} die Klassen \texttt{input\_policy::AllowLocal\-OrPrivileged} +oder \texttt{input\_policy::AllowEverybody} zur Verfügung. +Hierdurch wird bestimmt, welche Sicherheitsanforderungen zur Ausführung des Handlers erfüllt sein +müssen. +Die Richtlinie \texttt{input\_policy::AllowLocalOrPrivileged} bestimmt, dass nur Benutzer, +deren Sitzung lokal ist, oder solche, die nach der Konfiguration des pvsprivinputd als privilegiert +gelten, die entsprechende Aktion aufrufen dürfen (hierbei geht es um den Benutzer, der den PVS-Client +ausführt, und nicht den Benutzer, der die Steuerkonsole bedient). +Die Richtlinie \texttt{input\_policy::AllowEverybody} erlaubt die Ausführung der Aktion ohne +besonderen Sicherheitskontext. +Neue Sicherheitsrichtlinien der Form \texttt{input\_policy::Security<\textit{T}>} lassen sich +nutzen, indem eine Klasse \textit{T} eingeführt wird, die eine Methode\\ +\makebox[1cm]{}\texttt{static bool allow(InputEventContext const*)}\\ +besitzt, an die die Entscheidung, ob eine Aktion zuzulassen ist, delegiert wird. + +Der zu implementierende Eingabehandler braucht weiterhin eine Implementierung der abstrakten +Methode\\ +\makebox[1cm]{}\texttt{virtual void handle(InputEvent const\&, InputEventContext const*)},\\ +in der die entsprechende Aktion ausgeführt wird. + +Die Aufnahme des neuen Handlers in die Liste der abzuarbeitenden Handle erfolgt, +je nachdem ob erweiterte Berechtigungen zur Bearbeitung notwendig sind, +in einer der Dateien \texttt{privilegedHandlerChain.cpp} oder \texttt{unprivilegedHandler\-Chain.cpp} +in \texttt{src/input}, wo dem Kettenaufruf eine Zeile der Form\\ +\makebox[1cm]{}\texttt{.add<\textit{Handler}>()}\\ +hinzugefügt wird. +Die Verwendung des Präprozessors zum Ausschluss von Handlern, die auf dem +Zielsystem nicht lauffähig sind, ist an dieser Stelle nicht notwendig und wird durch die +\texttt{Require}-Richtlinie umgesetzt. +Notwendig ist lediglich, die Übersetzung des Handlers auf inkompatiblen Systemen zu verhindern. +Dies kann mit Hilfe des Build-Systems oder durch die Klammerung der gesamten Übersetzungseinheit +in Präprozessorbedingungen geschehen. + +Eine API-Referenz zur libpvsinput (Stand: 4.~November~2010) findet sich im Projektwiki. + +\section{Netzwerkkommunikation} +\index{Netzwerkkommunikation} + +\subsection{PVS-Protokoll} +\index{Protokoll!PVS} \index{Protokoll} +Im Zuge der Entwicklung des PVS wurde ein sehr einfaches Messagingprotokoll entwickelt. +Die Nachrichten bzw. Messages bestehen dabei aus Header, Nachrichtentyp, Ident und dem eigentlichen Nachrichtentext. Die einzelnen Nachrichtenteile, welche bis auf den Header selbst definiert werden können, werden verknüpft und versendet. Es sind schon Nachrichtentypen vordefiniert, welche sich nur durch unterschiedliche Dispatcher unterscheiden. +Bereits vorhandene Typen sind COMMAND, LOGIN, MESSAGE und UNKNOWN. Die Dispatcher (\_commandDispatcher, \_loginDispatcher und \_chatDispatcher) befinden sich im Client in der Klasse \texttt{ServerConnection}, in der Steuerkonsole in der Klasse \texttt{ClientConnection} bzw. \texttt{ListenServer}. Ein Ident wie z.B. Username, Befehl oder Beschreibung des Nachrichteninhalts dient zur Unterscheidung verschiedener Nachrichten mit demselben Nachrichtentyp, wobei die Nachricht dann den dem Ident entsprechenden Nachrichtentext enthält. +Um eine Funktion zur Behandlung einer bestimmten Nachricht zu definieren, wird diese Funktion als Handler mit dem entsprechenden Dispatcher verknüpft. Im PVS-Client beispielsweise befindet sich der Dispatcher für Nachrichten vom Typ Command in der Klasse \texttt{pvsServerConnection}, daher wird in der Klasse \texttt{pvs} die Funktion \texttt{void PVS::onCommand(PVSMsg cmdMessage)} wie folgt als Handler registriert: +\texttt{\_pvsServerConnection->addCommandHandler("*", this, \&PVS::onCommand)}. Erhält nun der Client eine Nachricht vom Typ COMMAND, so wird die Funktion onCommand mit dem entsprechenden Nachrichtenobjekt aufgerufen. Auf die eigentliche Nachricht kann dann über die Methoden \texttt{getIdent()} und \texttt{getMessage()} des Objektes zugegriffen werden. + +\subsection{PVS-Messages} +\index{Message!PVS} \index{Message} +In Tabelle \ref{tab:messagelist} sind die Messages, die zwischen den einzelnen PVS Komponenenten ausgetauscht werden, aufgelistet. +Der Nachrichtentyp gibt dabei an, welcher Dispatcher die Nachricht behandelt. +Der Ident einer Nachricht wird zur Verarbeitung einer empfangenen Nachricht in der aufzurufenden Funktion benötigt (Unterscheidung von anderen Nachrichten gleichen Typs). + +\begin{table} +\begin{center} +\begin{tabular}{l | l | p{2cm} | p{4cm}} +\label{pvs-msg-liste} +Nachrichtentyp & Nachrichten Ident & Inhalt & Beschreibung \\ +\hline +PVSCOMMAND & PROJECT & hostname port password quality & Hostname, Port, Passwort und Qualität des VNC Servers zu dem verbunden werden soll (durch Space getrennt) \\ +PVSCOMMAND & UNPROJECT & & \\ +PVSCOMMAND & LOCKSTATION & & \\ +PVSCOMMAND & LOCKSTATION & Message & Client mit Nachricht sperren \\ +PVSCOMMAND & UNLOCKSTATION & & \\ +PVSLOGIN & USERNAME & username & Client Benutzername \\ +PVSLOGIN & PASSWORD & password & Serverpasswort \\ +PVSLOGIN & ID & id & \\ +PVSLOGIN & FAILED & "`Wrong Password"' & Wird bei falschem Passwort gesendet \\ +PVSCOMMAND & PORT & port & \\ +PVSCOMMAND & PASSWORD & password & VNC Passwort\\ +PVSCOMMAND & RWPASSWORD & rwpassword & Passwort für den Zugriff auf die Tastatur und Maus \\ +PVSCOMMAND & VNC & YES & Erlaube Zugriff \\ +PVSCOMMAND & VNC & NO & Verbiete Zugriff \\ +PVSCOMMAND & PING & & \\ +PVSCOMMAND & VNCREQUEST & & \\ +PVSCOMMAND & VNCSRVRESULT & result code & Der Rückgabewert des pvs-vncsrv Skripts \\ +PVSCOMMAND & INPUTEVENT & Base64-kodierte InputEvent-Struktur & Fernsteuerung \\ +PVSMESSAGE & BROADCAST & MESSAGE &\\ +PVSMESSAGE & clientToAdd & & Client hinzufügen (Chat)\\ +PVSMESSAGE & clientToRemove & & Client entfernen (Chat)\\ +PVSMESSAGE & assignedName & & Festgelegter Name (Chat)\\ +\end{tabular} +\end{center} +\caption{Liste der PVS Messages} +\label{tab:messagelist} +\end{table} diff --git a/doc/LaTeX/mystyle-pdf.tex b/doc/LaTeX/mystyle-pdf.tex index d2993f4..034ae31 100644 --- a/doc/LaTeX/mystyle-pdf.tex +++ b/doc/LaTeX/mystyle-pdf.tex @@ -108,3 +108,5 @@ % pdftitle={PVS Dokumentation} pdftitle={GZ:if expand("\%") == ""|browse confirm w|else|confirm w|endif} ]{hyperref} + +\usepackage{multirow} \ No newline at end of file diff --git a/doc/LaTeX/user/0000-chapter.tex b/doc/LaTeX/user/0000-chapter.tex index ae9276d..2c570f8 100644 --- a/doc/LaTeX/user/0000-chapter.tex +++ b/doc/LaTeX/user/0000-chapter.tex @@ -50,7 +50,9 @@ Sollte eine Nachricht eingegangen sein obwohl der Chat-Dialog geschlossen ist, s Der Konfigurationsdialog (Abb. \ref{png:config}) erlaubt es dem Benutzer des PVS-Clients diverse Einstellungen vornehmen: \begin{enumerate} \item Mit diesen Reitern kann die Gruppe der zur Verfügung stehenden Optionen gewechselt werden. Unter "`Permissions"' sind Einstellungen zu finden mit denen der Benutzer seine Privatsphäre schützen kann. Unter "`Display"' ist es möglich das Verhalten der Toolbar anzupassen (z.B. die Position selbiger). - \item Hier wird dem Dozenten das Recht erteilt eine VNC-Verbindung aufbauen zu können (z.Z ohne Funktion). + \item Hier wird dem Dozenten das Recht erteilt eine VNC-Verbindung aufbauen zu können. + Durch Auswahl der Option ,,View only'' wird das Ansehen des Bildschirminhalts erlaubt. + Die Wahl ,,Full access'' erlaubt die Fernsteuerung von der Steuerkonsole aus. \item Hier wird allen anderen Benutzern das Recht erteilt eine VNC-Verbindung aufbauen zu können (z.Z ohne Funktion). \item Durch diese zwei Checkboxen kann die Teilnahme am Chat oder das Akzeptieren von Dateiübertragungen aktiviert werden (z.Z ohne Funktion). \end{enumerate} diff --git a/doc/LaTeX/user/0001-chapter.tex b/doc/LaTeX/user/0001-chapter.tex index 35f1128..200ffa5 100644 --- a/doc/LaTeX/user/0001-chapter.tex +++ b/doc/LaTeX/user/0001-chapter.tex @@ -58,6 +58,40 @@ Für die Verbundene Clients besteht die Möglichkeit die VNC-Quality (HIGH, MEDI festlegen, ob die Clients zur Verbindung mit dem pvsmgr ein von System generiertes Passwort eingeben müssen oder nicht. Auf dem Toolbar werden weitere Funktionen wie: Screeshots aufnehmen, Chat mit dem einzelnen Client starten oder alle Clients auf einem Klick zu blockieren. Das Blockieren der Clients schließt natürlich der Dozent-Rechner aus. Der Dozent-Rechner hebt sich von einem anderer verbundenen Machine durch den Rot-Blau Zeichnen neben dem grünen Punkt hervor. +\\ +Befindet sich die Maus über einem VNC-Frame, so ist über dem Bildschirminhalt eine Reihe von +Buttons zu sehen (Siehe Abbildung \ref{png:buttons}). +\begin{figure}[h] + \centering + \includegraphics[scale=1]{bilder/vnc-frame-buttons.png} + \caption{Buttons} + \label{png:buttons} +\end{figure} +Diese erlauben die Ausfürung der folgenden Funktionen: +\begin{enumerate} + \item Anzeige maximieren + \item Bildschirmfoto + \item Bildschirm für den Benutzer sperren + \item Client zum ,,Super-Client'' machen + \item Fernsteuerung aktivieren + \item Fernsteuerung aller Clients +\end{enumerate} +Wird der Button für die Aktivierung der Fernsteuerung gedrückt, werden alle Tastatur- und Mauseingaben, +die getätigt werden, während sich der Mauszeiger über dem Anzeigebereich des VNC-Frames befindet, +an den betreffenden Client gesendet. +So ist es möglich, die Steuerung von Tastatur und Maus eines angeschlossenen Rechners zu übernehmen. +\\ +Davon sind auch Tastenkombinationen wie Alt+Tabulator betroffen. +Um solche Kombinationen am Rechner der Steuerkonsole einzugeben, muss der Mauszeiger von der +Anzeigefläche wegbewegt werden. +\\ +Weiterhin ist auch die Simulation von System-Tastenkombinationen möglich: +Hierzu muss 5 Sekunden lang die Menü-Taste + \includegraphics[height=1.6ex]{bilder/menu-key.png} +gedrückt werden; +es erscheint dann ein Menü, aus dem die gewünschte Aktion ausgewählt werden kann. +{\em Vorsicht:} Die Steuerkonsole fragt vor der Ausführung einer Aktion nicht noch einmal +nach. \\ \\ Im letzten Punkt dieser Abschnitt wollen wir die vorhandenen Tastenkürzel vorstellen. -- cgit v1.2.3-55-g7522 From 08e41e889698024165b051d4d576045e01ea3bb8 Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Thu, 4 Nov 2010 22:16:43 +0100 Subject: Doxygen configuration for pvsinput. The rest of the project does not use Doxygen anymore (or so I'm told). However, the vast majority of classes in src/input are annotated with Doxygen comments and it would be a shame not to use them. --- doc/doxconf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/doxconf b/doc/doxconf index e3e32a6..fefbae6 100644 --- a/doc/doxconf +++ b/doc/doxconf @@ -564,7 +564,7 @@ WARN_LOGFILE = ./doxwarnlog # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = ../pvsClient.h ../pvsClient.cpp ../pvs.h ../pvs.cpp ../pvsDaemon.h ../pvsDaemon.cpp ../src +INPUT = ../src/input # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is @@ -1341,7 +1341,7 @@ HIDE_UNDOC_RELATIONS = YES # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) -HAVE_DOT = NO +HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This -- cgit v1.2.3-55-g7522 From 1b0ca81aa07617eb9764451cf83d04454cd6b0e1 Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Fri, 5 Nov 2010 00:51:49 +0100 Subject: Documentation for multicast file transfer. --- doc/LaTeX/devel/0300-pvs.tex | 62 +++++++++++++++++++++++++++++++++++++++++ doc/LaTeX/user/0000-chapter.tex | 21 ++++++++++++-- 2 files changed, 81 insertions(+), 2 deletions(-) (limited to 'doc') 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)\\ diff --git a/doc/LaTeX/user/0000-chapter.tex b/doc/LaTeX/user/0000-chapter.tex index ae9276d..bf080d3 100644 --- a/doc/LaTeX/user/0000-chapter.tex +++ b/doc/LaTeX/user/0000-chapter.tex @@ -21,7 +21,7 @@ Das Hauptmenü des PVS-Clients besteht aus folgenden Elementen: \item Disconnect: Eine bestehende Verbindung trennen. \item Information: Zeigt in einem Dialog den Namen der aktuell verbundenen Steuerkonsole sowie das zugehörige Passwort. Diese Funktion ist für Dozenten nützlich, um beispielsweise über einen angeschlossenen Projektor die Daten für alle Clients bekannt zu geben. \item Chat: Öffnet den Chat-Dialog. - \item Send File: Ermöglicht das Senden einer Datei an einen Teilnehmer. + \item Send File: Ermöglicht das Senden einer Datei an einen oder alle Teilnehmer. \item Config: Öffnet den Konfigurationsdialog. \item About: Zeigt Versionsinformationen an. \item Quit: Beendet die Applikation sowie das zugehörige Backend. @@ -50,7 +50,9 @@ Sollte eine Nachricht eingegangen sein obwohl der Chat-Dialog geschlossen ist, s Der Konfigurationsdialog (Abb. \ref{png:config}) erlaubt es dem Benutzer des PVS-Clients diverse Einstellungen vornehmen: \begin{enumerate} \item Mit diesen Reitern kann die Gruppe der zur Verfügung stehenden Optionen gewechselt werden. Unter "`Permissions"' sind Einstellungen zu finden mit denen der Benutzer seine Privatsphäre schützen kann. Unter "`Display"' ist es möglich das Verhalten der Toolbar anzupassen (z.B. die Position selbiger). - \item Hier wird dem Dozenten das Recht erteilt eine VNC-Verbindung aufbauen zu können (z.Z ohne Funktion). + \item Hier wird dem Dozenten das Recht erteilt eine VNC-Verbindung aufbauen zu können. + Durch Auswahl der Option ,,View only'' wird das Ansehen des Bildschirminhalts erlaubt. + Die Wahl ,,Full access'' erlaubt die Fernsteuerung von der Steuerkonsole aus. \item Hier wird allen anderen Benutzern das Recht erteilt eine VNC-Verbindung aufbauen zu können (z.Z ohne Funktion). \item Durch diese zwei Checkboxen kann die Teilnahme am Chat oder das Akzeptieren von Dateiübertragungen aktiviert werden (z.Z ohne Funktion). \end{enumerate} @@ -61,3 +63,18 @@ Der Konfigurationsdialog (Abb. \ref{png:config}) erlaubt es dem Benutzer des PVS \label{png:config} \end{center} \end{figure} + +\section{Dateiversand} +Durch anklicken des Menüeintrags ,,Send File'' kann eine Datei versendet werden. +Nach der Auswahl des Menüeintrags erscheint ein Dialogfenster, in dem entweder ein Empfänger +ausgewählt werden (in diesem Fall erhält nur dieser Empfänger die Datei) +oder die Checkbox ,,Send to all'' aktiviert werden kann (dann wird die Datei an alle +angeschlossenen Rechner verschickt). + +Falls die Datei an alle verschickt wird, ist eine kurze Wartezeit vor Beginn des Versands und +nach dem (scheinbaren) Ende des Versands notwendig. +Es ist nicht sinnvoll, den Versand abzubrechen, wenn die Datei bereits vollständig verschickt +wurde und anscheinend nichts mehr passiert, da einzelne Clients eventuell noch verlorengegangene +Stücke der Datei nachfordern müssen. +Das Versandfenster schließt sich automatisch, wenn alle Clients die Datei vollständig +empfangen haben. -- cgit v1.2.3-55-g7522 From a9dd0c503641bf7dd16fc5c2900ad0694253761b Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Fri, 5 Nov 2010 00:55:30 +0100 Subject: Fix typo in documentation --- doc/LaTeX/devel/0300-pvs.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/LaTeX/devel/0300-pvs.tex b/doc/LaTeX/devel/0300-pvs.tex index 5aa5126..a2069de 100644 --- a/doc/LaTeX/devel/0300-pvs.tex +++ b/doc/LaTeX/devel/0300-pvs.tex @@ -223,7 +223,7 @@ alle bits gesetzt sind und dessen \texttt{data} die MD5-Prüfsumme der übertrag enthält. Zur Integration dieser -- prinzipiell von PVS unabhängigen -- Funktionalität -dienen die Klassen \texttt{PVSIncomingMulticastTransfer}\index{Klasse!\texttt{PVSIncomingMulticastTransfer} +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, -- cgit v1.2.3-55-g7522 From fc815ad2b711f0205801ddb04f85c9c776183efd Mon Sep 17 00:00:00 2001 From: Sebastien Braun Date: Fri, 5 Nov 2010 00:57:04 +0100 Subject: Remove accidentally added backup files --- doc/LaTeX/devel/0100-build.tex~ | 69 -------- doc/LaTeX/devel/0300-pvs.tex~ | 384 ---------------------------------------- 2 files changed, 453 deletions(-) delete mode 100644 doc/LaTeX/devel/0100-build.tex~ delete mode 100644 doc/LaTeX/devel/0300-pvs.tex~ (limited to 'doc') diff --git a/doc/LaTeX/devel/0100-build.tex~ b/doc/LaTeX/devel/0100-build.tex~ deleted file mode 100644 index 66d94da..0000000 --- a/doc/LaTeX/devel/0100-build.tex~ +++ /dev/null @@ -1,69 +0,0 @@ -\chapter{Erzeugen und Installieren der Applikation} -\index{Installieren} -Um den Pool Video Switch erfolgreich zu kompilieren, müssen zunächst die Quelldateien heruntergeladen werden. Hierzu sollte auf dem Arbeitsrechner ein Subversion-Client installiert sein. Ein Checkout kann in einem beliebigen Terminal erfolgen, wobei es zwei unterschiedliche Arten des Zugriffs gibt.\\ - -Anonym, nur Leserechte:\\ -\textbf{svn co http://svn.openslx.org/svn/pvs/trunk/pvs}\\ - -Mit Account, auch Schreibrechte (benutzer mit SSH Login ersetzen):\\ -\textbf{svn co svn+ssh://benutzer@openslx.org/srv/svn/pvs}\\ - - -\section{Voraussetzungen} -Der Pool Video Switch benötigt zum Kompilieren folgende Pakete (und ihre Abhängigkeiten): -\begin{itemize} - \item libvncserver-dev >= 0.9.3\\ - Eine angenehm kleine, wenn auch in C geschriebene, Bibliothek für die Erstellung von VNC Servern und Clients. - \item libx11-dev >= 1.3.3\\ - Diese Bibliothek wurde eingesetzt, um ausgewählten oder allen Zielrechnern den Zugriff auf Maus und Tastatur zu entziehen und den Bildschirm schwarz zu schalten. - \item libqt4-dev >= 4.5.3\\ - Sowohl die Server als auch die ClientGUI benutzen das Qt Framework in der Version 4. Ferner wird QtNetwork zur Kommunikation zwischen Server und Client benötigt und QtDbus zur Interprozesskommunikation zwischen Client-Daemon und GUI. - \item qt4-dev-tools >= 4.5.3\\ - Dies wird nur benötigt, falls Unterstützung weiterer Sprachen implementiert werden soll, da in diesem Paket das Hilfsprogramm \textbf{linguist} enthalten ist. - \item cmake >= 2.4.0\\ - Eingesetztes Buildsystem und der Makefile-Generator. Um distributionsspezifische Pakete zu erzeugen wird CPack benutzt. - \item libxtst-dev, libxi-dev\\ - Diese Bibliotheken dienen zur Implementierung der Fernsteuerungsfunktionen. -\end{itemize} - -\section{Kompilieren aus Quellen} -Sobald alle Voraussetzungen erfüllt und die Quellen installiert sind, kann das ausführbare Programm erzeugt werden. Falls gewünscht, kann zusätzlich in der Datei \textit{CMakeLists.txt} der Build-Type eingestellt werden. Gültige Werte sind \texttt{Debug} und \texttt{Release} und ihre Wirkung den zwei weiteren Zeilen zu entnehmen. -\begin{verbatim} -SET(CMAKE_BUILD_TYPE Debug) -SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall") -SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native") -\end{verbatim} -Damit das Wurzelverzeichnis des Projekts weiterhin sauber bleibt (Übersicht beibehalten, Arbeit mit SVN erleichtern), werden wir hier einen Out-Of-Source Build durchführen. Dies bedeutet, dass zum Kompilieren ein seperates Verzeichnis benutzt wird und sämtliche automatisch generierten Dateien sowie das Kompilat selbst hier abgelegt wird. In einem Terminal sollte nun in das Verzeichnis indem sich das Projekt befindet gewechselt werden, um folgende Befehle ausführen zu können:\\ - -\textbf{mkdir -p build}\\ -\textbf{cd build/}\\ -\textbf{cmake ..}\\ -\textbf{make}\\ - -Die verschiedenen Applikationen können nun folgendermaßen (in \textit{build/}) ausgeführt und getestet werden: -\begin{itemize} - \item Den Server starten: \textbf{./pvsmgr} - \item Den Server mit Touchscreenoberfläche starten: \textbf{./pvsmgrtouch} - \item Den ClientDaemon starten: \textbf{./pvs} - \item Die ClientGUI starten: \textbf{./pvsgui} -\end{itemize} - -\section{Installation} -\index{Paket!RPM} \index{Paket!DPKG} -Nachdem das Projekt kompiliert wurde, kann es (als Superuser z.B. root) auf dem lokalen System installiert werden:\\ -\textbf{make install}\\ - -Dabei werden folgende Dateien auf das aktuelle System übertragen:\\ -\textit{/usr/local/bin/pvsmgr}\\ -\textit{/usr/local/bin/pvs}\\ -\textit{/usr/local/bin/pvsgui}\\ -\textit{/usr/local/bin/pvsmgrtouch}\\ -\textit{/usr/local/share/dbus-1/services/org.openslx.pvs.service}\\ - -Ein Vorteil ist, dass nun ein seperates Ausführen des Client-Daemon nicht mehr notwendig ist. Dieser wird ab sofort automatisch gestartet und beendet, sobald die ClientGUI ausgeführt wurde.\\ - -Es ist ebenfalls möglich, distributionsspezifische Pakete zu erstellen (zur Zeit nur .deb):\\ -\textbf{make package}\\ - -Falls erfolgreich, befindet sich nun eine Installationsdatei (pvs--Linux.deb) in \textit{build/} die z.B. auf Debian-Derivaten mit \textbf{dpkg -i} installiert werden kann.\\ -Anmerkung: Falls Pakete für Rechner gebaut werden sollen, die vom Erstellungssystem her verschieden sind, muß der Schalter \texttt{-march=native} in der Datei \textit{CMakeLists.txt} angepasst werden! diff --git a/doc/LaTeX/devel/0300-pvs.tex~ b/doc/LaTeX/devel/0300-pvs.tex~ deleted file mode 100644 index ac88e46..0000000 --- a/doc/LaTeX/devel/0300-pvs.tex~ +++ /dev/null @@ -1,384 +0,0 @@ -\chapter{Aufbau und Funktionsweise des PVS} -\index{Aufbau} \index{Funktionsweise} \index{Konzept} - -Generelles Konzept - -\section{Einzelne Komponenten} -\index{Komponenten} - -\subsection{Zuordnung von Konsole und Clients} -\input{devel/0310-service-discovery} - -\section{Überblick über Aktivitäten auf Clients} - -\subsection{Projektion an Alle} -\index{Projektion} -Eine wichtige Eigenschaft des PVS ist die Verwaltung von Projektionen zwischen mehreren Clients. Eine Projektion ist hierbei das Anzeigen des Bildschirminhalts eines Clients - der sogenannten Source oder Quelle - auf einem oder mehreren anderen Clients - den Targets oder Zielen der Projektion. -Die für die Projektion benötigten Verbindungsdaten wie Passwort und IP werden von jedem Client bei der Anmeldung an der Steuerkonsole übermittelt und in einer Liste von PVSConnection Objekten in der Klasse \textit{PVSConnectionManager} gespeichert. Diese zentrale Verwaltung hat mehrere Vorteile: -\begin{itemize} - \item Die Quelle einer Projektion muss keine Aktion ausführen und kann passiv bleiben. - \item Redundanz der Daten wird verhindert, da diese auch in der Steuerkonsole zur Darstellung der Thumbnails benötigt werden. - \item Das Nachrichtenaufkommen wird reduziert, da lediglich eine Nachricht bei der Anmeldung an der Steuerkonsole übermittelt wird. -\end{itemize} - -Bei der Auswahl der Quelle und Ziele ist zu beachten, dass man für jede Projektion jeweils nur eine Quelle jedoch mehrere Ziele auswählen kann. -Quelle und Ziel müssen außerdem verschiedenen Kriterien genügen. -\begin{itemize} - \item Eine Quelle darf nicht gleichzeitig Ziel einer Projektion sein. - \item Ein Ziel einer Projektion darf nicht Ziel einer anderen Projektion sein. - \item Eine Quelle darf mehrfach als Quelle ausgewählt werden. -\end{itemize} -Diese Einschränkungen werden in der Steuerkonsole durchgesetzt, indem im Zielauswahldialog die Zielmenge eingeschränkt wird. -Siehe hierzu auch \ref{pvs-console-projection} Projektion. - -Der Projektionsvorgang an sich besteht aus mehreren Teilen. Wird eine Projektion angefordert, wird überprüft, ob auf der Quelle ein VNC Server gestartet ist. Falls nicht, wird versucht, einen VNC Server zu starten. Ist dies erfolgreich, so sendet die Steuerkonsole das entsprechende Tripel (IP, Passwort und Port der Quelle) an alle ausgewählten Ziele. Clients, welche eine Projektionsaufforderung erhalten, verbinden sich dann mit den Verbindungsdaten zum VNC Server der Quelle. Um die Einstellbarkeit der Qualität einer Projektion zu ermöglichen, kann die Steuerkonsole einen von drei Qualitätswerten an die Zielclients übermitteln. Siehe hierzu auch \ref{pvs-console-quality} Qualitätsoptionen. - - -\subsection{Projektion eines Clients auf dem Beamer} -\index{Beamer} - -Die Projektion eines Clients an den Beamer unterscheidet sich im Wesentlichen nicht von anderen Projektionen. Lediglich ist das Ziel der Projektion hierbei der Dozentenpc bzw. der PC, welcher an den Beamer angeschlossen ist. Eine spezielle Auszeichnung des Beamers erfolgt nicht. Die Anzahl der Ziele wird hierbei nicht beschränkt, da es wünschenswert sein kann, den auf dem Beamer dargestellten Bildschirminhalt auch gleichzeitig auf anderen Clients darzustellen. - -\subsection{Chat- und Informationskanal} -\index{Chat} - -Es gibt 2 Möglichkeiten um Kontakt mit den Clients aufzunehmen. Die erste ist über den Chat, wo Nachrichten sowohl über den offentlichen Kanal als -auch über einen privaten Kanäle verteilt werden können, und die zweite vom PVSManager aus über den Informationskanal. -Der Informationskanal ermöglich das Versenden von Nachrichten, die dringend zu lesen sind, an die Clients. -Im Gegenteil zum Chat erscheinen solche Nachrichten nicht im Chatfenster sondern in einem Pop-Up-Fenster und werden vom Bildschirm entfernt erst wenn man sie -als gelesen markiert durch das Drucken auf dem Knopf \textit{'OK'}. -\\ -\\ -\textbf{Behandlung der Nachrichten im Server} -\\ -\\ -Chat-Nachtichten werden von Server in der Klasse \texttt{PVSConnectionManager} mittels der Methode \texttt{onChat} behandelt. Dort wird aus der Nachrit den Empfänger -und den Absender ausglesen und die Nachricht an beide versendet. So gilt das Empfangen eine eigene Nachricht als Bestätigung, dass die Nachricht ordentlich vom Server -behandelt und versendet wurde. Das Gestalt von solchen Nachrichten sieht folgendermaßen aus - -\begin{center} - PVSMSG -\end{center} -\begin{center} -\begin{tabular}{|l | p{3cm} | p{3cm} | p{3cm}|} -\hline -Type & Ident & Msg & sndID\\ -\hline -\texttt{PVSMESSAGE} & \texttt{} & \texttt{<:} & \texttt{<}\\ -\end{tabular} -\end{center} - -Informationsnachrichten werden ausschließlich vom PVSManager versendet.Dies geschiet in der Klasse \texttt{ConnectionList} mittels der Methode \texttt{on\_Message}. - -\begin{center} - PVSMSG -\end{center} -\begin{center} -\begin{tabular}{|l | l | p{6cm} | p{6cm}} -\hline -Type & Ident & Msg\\ -\hline -\texttt{PVSMESSAGE} & \texttt{BROADCAST} & \texttt{} \\ -\end{tabular} -\end{center} - -Informationnachrichten können außerdem einen oder mehrere Clients sperren, wenn sie den Ident \texttt{LOCKSTATION} enthalten. Sobald ein Client die Nachricht empfängt, -wird diese auf dem Bilschirm angezeigt und 10 Sekunden später wird der Client gesperrt. - -Abgesehen von der Behandlung der Nachrichten muss sich der Server darum kümmern, dass jeder verbunde Client über alle nötige Informationionen verfügt damit er -Nachrichten mit andren Clients austauschen kann. Dies wird folgendermaßen erledigt: -\begin{itemize} - \item \textbf{Einfügen eines Clients:} um die Verwaltung von Clients kümmert sich die Klasse \texttt{PVSConnectionManager}, in der die Methode \texttt{onClientNew} für das Einfügen -von neuen Clients zuständigt ist. Sowald ein neuer Client in der Client-Liste des Servers eingefügt wird, wird an ihn die Liste aller im Server bereits angemeldete -Clients geschickt. Dazu dient die Methode \texttt{sendEventToClients}. - -Bis hier ist der neue Client noch unbekannt für den Rest der Nutzer. Der neuer Client wird erst bekannt gegeben sobald er vom Server einen Benutzername -zugewissen bekommen hat. Da es sein kann, dass den Name, mit dem der neue Client sich beim Server anmelden wollte, -bereits vergeben ist und muss unter Umständen verändert werden. Diese Zuweisung findet in der Methode \texttt{onLoginUsername} statt, -wo nicht nur alle andere Clients sondern auch der neue Client darüber informiert werden. Auch hier kümmert sich die Methoder \texttt{sendEventToClients} -ums Vesenden der entsprechenden Informationen. - - \item \textbf{Entfernen eines Clients:} das Entfernen von Clients wird von der Methode -\\ -\texttt{onClientRemove} erledigt, wo analog wie -Oben alle Clients darüber informiert werden. -\end{itemize} - -Für dei Übermittlung solche Informationen werden Nachrichten mit folgenden Gestal benutzt - -\begin{center} - PVSMSG -\end{center} -\begin{center} -\begin{tabular}{|l | l | p{6cm} |} -\hline -Type & Ident & Msg\\ -\hline -\texttt{PVSMESSAGE} & \texttt{} & \texttt{:} \\ -\end{tabular} -\end{center} - -Es gibt drei unterschiedliche Befehle, die welche Änderung in der localen Client-Liste der Clients vorgenommen werden soll angeben. -\begin{enumerate} - \item \texttt{clientToAdd} -\item \texttt{clientToRemove} -\item \texttt{assignedName} -\end{enumerate} - -Wie es bei Servern gewöhnt ist, werden alle relevante Ereignisse in Log-Dateien protokolliert. Ereignisse werden im Chat-Log mit folgendem -Befehl eingetragen - -\begin{center} -\texttt{ConsoleLog writeChat()} -\end{center} - -\textbf{Chat-Interface der Steuerkonsole} -\\ -\\ -So wie alle Clients ist der PVSManager auch ein Teilnehmer im Chat. Der PVSManager steht wie alle andere Teilnehmer auch in der Nutzer-Liste -jedes Chat-Fenster und kann ebenfalls über private Nachrichten direkt angesprochen werden. Die Arbeitsweise dieser Chat-Interface ist sehr simple. -Da sie sich im Server befindet, müssen einfach alle Ereignise (Nachrichten senden ist die einzige Ausnahme) von der Klasse \texttt{PVSConnectionManager} -an die Klasse \texttt{MainWindow} weitergegeben werden. Dies kümmert sich darum, alle Informationen zu verarbeiten und diesein der Chat-Fenster der -Steuerkonsole anzuzeigen. - -Folgende Methoden der Klasse \texttt{MainWindow} ermöglichen das Anzeigen einer empfangenen Nachricht im Chat-Fenster der Steuerkonsole und Änderungen (Clients einfügen -und entfernen) in der sowohl im Chat-Fenster als auch in der Steuerkonsole angezeigten Client-Liste. -\\ -\\ -\texttt{receiveChatMsg(, , )} -\\ -\texttt{removeConnection(*pvsClient)} -\\ -\texttt{addConnection(*pvsClient)} -\\ -\\ -Alle diese Methoden werden im Gegensatz von der Methode \texttt{sendChatMsg(PVSMsg myMsg)} von der Klasse \texttt{PVSConnectionManager} aus ausgeführt. Da alle durchs -Netz empfangene Nachrichten müssen an die GUI-Weitergegeben werden. Beim Versenden von Nachrichten funktioniert es genau umgekehrt. Die Nachricht wird -vom Nutzer in der GUI eingegeben und muss an die Klasse \texttt{PVSConnectionManager} weitergeleitet werden, damit diese ins Netz gesendet wird. Darum kümmert -sich die Methode in der Klasse \texttt{MainWindow}. -\\ -\\ -\texttt{MainWindow::sendChatMsg(PVSMsg myMsg)} -\\ -\\ -\textbf{Chat-Clients} -\\ -\\ -So weit haben wir die Funtionsweisen des Servers im Bezug auf dem Chat kennengelernt. -Nun wird erläutert wie die einzelnen Clients die Nachrichten bearbeiten. -\\ -\\ -Auf der Client-Seite in der Klasse \texttt{PVSConnectionServer} werden alle Nachrichten des PVS-Protokolls empfangen und gefiltert (Siehe Methode \texttt{handleClientMsg}). -Nachrichten mit dem Ident \texttt{PVSMESSAGE} werden durch den Dispatcher direkt an die Klasse \texttt{PVSChatClient} weitergeleitet, wo die Methode \texttt{receive} feststellen wird, -ob es sich dabei um eine Gespräch-Nachricht oder eine Befehl-Nachricht handelt. Um es feststellen zu können, wird aus der empfangenen Nachricht ein PVSChatMsg-Objekt -erzeugt (siehe Konstruktor) und mittels der Methode \texttt{isCommand} erfährt man ob es sich um einen Befehl handelt oder nicht. -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. - -\section{Fernsteuerung} - -Die Fernsteuerung eines Clients erfolgt durch den clientseitigen Empfang von \texttt{PVSCOMMAND}-Nachrichten -mit dem Ident \texttt{INPUTEVENT}. -Dieser ist die Base64-kodierte Binärdarstellung eines Eingabeereignisses angehängt, das -clientseitig nachvollzogen werden soll. -\begin{table} - \begin{tabular}{|l|l|p{4cm}|p{4cm}|} - \hline - \textbf{\texttt{type}} & \textbf{\texttt{code}} & \textbf{\texttt{value}} & \textbf{Beschreibung} \\ - \hline - \multirow{2}{*}{\texttt{ET\_KEY}} & - \texttt{EC\_PRESS} & - \multirow{2}{4cm}{Auslösende Taste und gehaltene Modifikatortasten} & - Taste gedrückt \\ - \cline{2-2}\cline{4-4} - & - \texttt{EC\_RELEASE} & - & - Taste losgelassen\newline \\ - \hline - \multirow{2}{*}{\texttt{ET\_BUTTON}} & - \texttt{EC\_PRESS} & - \multirow{2}{4cm}{Auslösende und - gedrückte Maustasten} & - Maustaste gedrückt \\ - \cline{2-2}\cline{4-4} - & - \texttt{EC\_RELEASE} & - & - Maustaste losgelassen \\ - \hline - \texttt{ET\_POINTER} & - --- & - Absolute Koordinaten & - Mauszeiger bewegt \\ - \hline - \multirow{4}{*}{\texttt{ET\_SPECIAL}} & - \texttt{EC\_REBOOT} & - --- & - Systemneustart \\ - \cline{2-4} - & - \texttt{EC\_KILL\_X} & - --- & - X-Server töten \\ - \cline{2-4} - & - \texttt{EC\_SYSRQ} & - Kommando & - Magic-SysRq-Taste \\ - \cline{2-4} - & - \texttt{EC\_SAY\_HELLO} & - --- & - Harmloses Kommando für Funktionstest \\ - \hline - \end{tabular} - \caption{Mögliche Eingabeereignisse\label{tab:input-events}\index{Eingabeereignis!\texttt{InputEvent}}} -\end{table} -Tabelle \ref{tab:input-events} zeigt die möglichen Eingabeereignisse. -Eingabeereignisse werden durch die PVS Input Library (libpvsinput) behandelt, -deren Funktion an dieser Stelle dargestellt werden soll. - -\subsection{Behandlung eines Eingabeereignisses} -\index{Eingabeereignis!Behandlung} - -Ein Eingabeereignis durchläuft die folgenden Stationen: -\begin{enumerate} - \item Die Steuerkonsole generiert ein Eingabeereignis und übergibt dieses an die Netzwerktransportschicht. - \item Der PVS-Client empfängt das Eingabeereignis und übergibt die Behandlung einer Instanz der - Klasse \texttt{InputEventHandlerChain}\index{Klasse!\texttt{InputEventHandlerChain}}. - \item Die Klasse \texttt{InputEventHandlerChain} arbeitet eine Liste von Instanzen der Klasse - \texttt{InputEventHandler}\index{Klasse!\texttt{InputEventHandler}} der Reihe nach ab, um zu sehen, ob eine dieser Instanzen - das Ereignis bearbeiten kann. - \item Falls die betrachtete Instanz das Ereignis bearbeiten kann, wird geprüft, ob der dafür - nötige Sicherheitskontext vorhanden ist. - \item Falls dies ebenfalls der Fall ist, wird die entsprechende Aktion in einer implementierung - der abstrakten Methode \texttt{InputEventHandler::handle} ausgeführt und die weitere Bearbeitung - beendet. - \item Falls keiner der vorherigen Handler das Ereignis behandelt hat, wird es durch - die Klasse \texttt{PrivilegedHandlerForwarder}\index{Klasse!\texttt{PrivilegedHandlerForwarder}} an den zusätzlichen Daemon \texttt{pvsprivinputd} - weitergegeben. - \item Der \texttt{pvsprivinputd}\index{pvsprivinputd} besitzt ebenfalls eine \texttt{InputEventHandlerChain}, die - nach dem gleichen Muster bearbeitet wird. - Falls hierbei kein passender Handler gefunden wird, wird das Ereignis in eine Logdatei geschrieben - und die Bearbeitung aufgegeben. -\end{enumerate} -Ereignishandler sind implementiert für Maus- und Tastatureingaben unter Linux/X11 (mit Hilfe der XTest-Erweiterung), -sowie zur Simulation von Strg+Alt+Entf, Strg+Alt+Rück und Magic SysRq. - -\subsection{Erweiterungen} - -Weitere Eingabehandler lassen sich der libpvsinput hinzufügen. -Dazu muss eine Klasse bereitgestellt werden, die von der Template-Klasse -\texttt{InputEventHandler} erbt. -Diese akzeptiert eine variable Anzahl\footnote{% - Bis zu 16, diese Zahl lässt sich jedoch durch Neugenerierung - der Datei \texttt{src/input/detail/ typelist\_autogen.h} erhöhen. - Ein entsprechendes Programm ist im Quellcode zu finden.} -von Templateparametern, die verschiedene Aspekte der Eingabeereignisbehandlung konfigurieren. - -Durch die Angabe eines Templateparameters \texttt{input\_policy::Match<\textit{typ}, \textit{code}, \textit{wert}>}\index{Klasse!\texttt{input\_policy::Match}}, -wobei \textit{code} und \textit{wert} weggelassen werden können, wird spezifiziert, -dass der betreffende Handler nur für Eingabeereignisse mit den entsprechenden Feldwerten aufgerufen wird. -Wird kein solcher Parameter angegeben, wird der betreffende Handler niemals aufgerufen. -Mehrere \texttt{Match}-Parameter werden mittels logischem ODER verknüpft. - -Ein Templateparameter der Form \texttt{input\_policy::Require<\textit{Merkmal\dots}>}\index{Klasse!\texttt{input\_policy::Require}} -gibt an, dass dieser Handler nur auf einem System lauffähig ist, das die entsprechenden \textit{Merkmale} -aufweist. -Eine Liste von Systemmerkmalen wird in der Datei \texttt{src/input/detail/systemTraits.h} -zentral verwaltet. -Hier lassen sich neue Merkmale mit Hilfe des Makros \texttt{DEFINE\_SYSTEM\_TRAIT} definieren -und mit Hilfe des Präprozessors zwischen den Zeilen \texttt{BEGIN\_SYSTEM\_TRAITS} und -\texttt{END\_SYSTEM\_TRAITS} einfügen. -Diese Vorgehensweise beschränkt die Nutzung des Präprozessors auf eine Datei. -Wird kein \texttt{Require}-Parameter angegeben, so wird der entsprechende Handler als -immer lauffähig eingestuft. -Mehrere \texttt{Require}-Parameter werden mittels logischem ODER verknüpft. - -Weiterhin kann ein Templateparameter der Form \texttt{input\_policy::Security<\textit{Richtlinie}>}\index{Klasse!\texttt{input\_policy::Security}} -angegeben werden. Hierbei stehen für \textit{Richtlinie} die Klassen \texttt{input\_policy::AllowLocal\-OrPrivileged} -oder \texttt{input\_policy::AllowEverybody} zur Verfügung. -Hierdurch wird bestimmt, welche Sicherheitsanforderungen zur Ausführung des Handlers erfüllt sein -müssen. -Die Richtlinie \texttt{input\_policy::AllowLocalOrPrivileged} bestimmt, dass nur Benutzer, -deren Sitzung lokal ist, oder solche, die nach der Konfiguration des pvsprivinputd als privilegiert -gelten, die entsprechende Aktion aufrufen dürfen (hierbei geht es um den Benutzer, der den PVS-Client -ausführt, und nicht den Benutzer, der die Steuerkonsole bedient). -Die Richtlinie \texttt{input\_policy::AllowEverybody} erlaubt die Ausführung der Aktion ohne -besonderen Sicherheitskontext. -Neue Sicherheitsrichtlinien der Form \texttt{input\_policy::Security<\textit{T}>} lassen sich -nutzen, indem eine Klasse \textit{T} eingeführt wird, die eine Methode\\ -\makebox[1cm]{}\texttt{static bool allow(InputEventContext const*)}\\ -besitzt, an die die Entscheidung, ob eine Aktion zuzulassen ist, delegiert wird. - -Der zu implementierende Eingabehandler braucht weiterhin eine Implementierung der abstrakten -Methode\\ -\makebox[1cm]{}\texttt{virtual void handle(InputEvent const\&, InputEventContext const*)},\\ -in der die entsprechende Aktion ausgeführt wird. - -Die Aufnahme des neuen Handlers in die Liste der abzuarbeitenden Handle erfolgt, -je nachdem ob erweiterte Berechtigungen zur Bearbeitung notwendig sind, -in einer der Dateien \texttt{privilegedHandlerChain.cpp} oder \texttt{unprivilegedHandler\-Chain.cpp} -in \texttt{src/input}, wo dem Kettenaufruf eine Zeile der Form\\ -\makebox[1cm]{}\texttt{.add<\textit{Handler}>()}\\ -hinzugefügt wird. -Die Verwendung des Präprozessors zum Ausschluss von Handlern, die auf dem -Zielsystem nicht lauffähig sind, ist an dieser Stelle nicht notwendig und wird durch die -\texttt{Require}-Richtlinie umgesetzt. -Notwendig ist lediglich, die Übersetzung des Handlers auf inkompatiblen Systemen zu verhindern. -Dies kann mit Hilfe des Build-Systems oder durch die Klammerung der gesamten Übersetzungseinheit -in Präprozessorbedingungen geschehen. - -Eine API-Referenz zur libpvsinput (Stand: 4.~November~2010) findet sich im Projektwiki. - -\section{Netzwerkkommunikation} -\index{Netzwerkkommunikation} - -\subsection{PVS-Protokoll} -\index{Protokoll!PVS} \index{Protokoll} -Im Zuge der Entwicklung des PVS wurde ein sehr einfaches Messagingprotokoll entwickelt. -Die Nachrichten bzw. Messages bestehen dabei aus Header, Nachrichtentyp, Ident und dem eigentlichen Nachrichtentext. Die einzelnen Nachrichtenteile, welche bis auf den Header selbst definiert werden können, werden verknüpft und versendet. Es sind schon Nachrichtentypen vordefiniert, welche sich nur durch unterschiedliche Dispatcher unterscheiden. -Bereits vorhandene Typen sind COMMAND, LOGIN, MESSAGE und UNKNOWN. Die Dispatcher (\_commandDispatcher, \_loginDispatcher und \_chatDispatcher) befinden sich im Client in der Klasse \texttt{ServerConnection}, in der Steuerkonsole in der Klasse \texttt{ClientConnection} bzw. \texttt{ListenServer}. Ein Ident wie z.B. Username, Befehl oder Beschreibung des Nachrichteninhalts dient zur Unterscheidung verschiedener Nachrichten mit demselben Nachrichtentyp, wobei die Nachricht dann den dem Ident entsprechenden Nachrichtentext enthält. -Um eine Funktion zur Behandlung einer bestimmten Nachricht zu definieren, wird diese Funktion als Handler mit dem entsprechenden Dispatcher verknüpft. Im PVS-Client beispielsweise befindet sich der Dispatcher für Nachrichten vom Typ Command in der Klasse \texttt{pvsServerConnection}, daher wird in der Klasse \texttt{pvs} die Funktion \texttt{void PVS::onCommand(PVSMsg cmdMessage)} wie folgt als Handler registriert: -\texttt{\_pvsServerConnection->addCommandHandler("*", this, \&PVS::onCommand)}. Erhält nun der Client eine Nachricht vom Typ COMMAND, so wird die Funktion onCommand mit dem entsprechenden Nachrichtenobjekt aufgerufen. Auf die eigentliche Nachricht kann dann über die Methoden \texttt{getIdent()} und \texttt{getMessage()} des Objektes zugegriffen werden. - -\subsection{PVS-Messages} -\index{Message!PVS} \index{Message} -In Tabelle \ref{tab:messagelist} sind die Messages, die zwischen den einzelnen PVS Komponenenten ausgetauscht werden, aufgelistet. -Der Nachrichtentyp gibt dabei an, welcher Dispatcher die Nachricht behandelt. -Der Ident einer Nachricht wird zur Verarbeitung einer empfangenen Nachricht in der aufzurufenden Funktion benötigt (Unterscheidung von anderen Nachrichten gleichen Typs). - -\begin{table} -\begin{center} -\begin{tabular}{l | l | p{2cm} | p{4cm}} -\label{pvs-msg-liste} -Nachrichtentyp & Nachrichten Ident & Inhalt & Beschreibung \\ -\hline -PVSCOMMAND & PROJECT & hostname port password quality & Hostname, Port, Passwort und Qualität des VNC Servers zu dem verbunden werden soll (durch Space getrennt) \\ -PVSCOMMAND & UNPROJECT & & \\ -PVSCOMMAND & LOCKSTATION & & \\ -PVSCOMMAND & LOCKSTATION & Message & Client mit Nachricht sperren \\ -PVSCOMMAND & UNLOCKSTATION & & \\ -PVSLOGIN & USERNAME & username & Client Benutzername \\ -PVSLOGIN & PASSWORD & password & Serverpasswort \\ -PVSLOGIN & ID & id & \\ -PVSLOGIN & FAILED & "`Wrong Password"' & Wird bei falschem Passwort gesendet \\ -PVSCOMMAND & PORT & port & \\ -PVSCOMMAND & PASSWORD & password & VNC Passwort\\ -PVSCOMMAND & RWPASSWORD & rwpassword & Passwort für den Zugriff auf die Tastatur und Maus \\ -PVSCOMMAND & VNC & YES & Erlaube Zugriff \\ -PVSCOMMAND & VNC & NO & Verbiete Zugriff \\ -PVSCOMMAND & PING & & \\ -PVSCOMMAND & VNCREQUEST & & \\ -PVSCOMMAND & VNCSRVRESULT & result code & Der Rückgabewert des pvs-vncsrv Skripts \\ -PVSCOMMAND & INPUTEVENT & Base64-kodierte InputEvent-Struktur & Fernsteuerung \\ -PVSMESSAGE & BROADCAST & MESSAGE &\\ -PVSMESSAGE & clientToAdd & & Client hinzufügen (Chat)\\ -PVSMESSAGE & clientToRemove & & Client entfernen (Chat)\\ -PVSMESSAGE & assignedName & & Festgelegter Name (Chat)\\ -\end{tabular} -\end{center} -\caption{Liste der PVS Messages} -\label{tab:messagelist} -\end{table} -- cgit v1.2.3-55-g7522