%%
%%====================================================================%%
%%                         Uniwersytet Śląski
%%                 Wydzial Matematyki, Fizyki i Chemii
%%
%%                   prezentacja pracy licencjackiej
%%               Implementacja protokołu komunikacyjnego
%%
%%       Autor : Marcin Malich
%%    Kierunek : Informatyka
%%   Nr albumu : 211137
%%    Promotor : dr Joachim Włodarz
%%  Data (wer) : 16.07.2009, v1.00
%%
%% Copyright (c) 2009 by Marcin 'Malcom' Malich <me@malcom.pl>
%%--------------------------------------------------------------------%%
%%

\documentclass{beamer}
\usetheme{Rochester}

\usepackage{polski}
\usepackage[utf8]{inputenc}

\title{Implementacja protokołu komunikacyjnego}
\subtitle{Praca licencjacka}
\author{Marcin Malich}
\institute{Uniwersytet Śląski\\ Wydział Matematyki, Fizyki i Chemii}
\date{Katowice, 2009}

\begin{document}

\begin{frame}
	\titlepage
\end{frame}

\begin{frame}
	\frametitle{Plan prezentacji}
	\tableofcontents
\end{frame}


\section{Wprowadzenie}

\begin{frame}
	\frametitle{Cel pracy}
	Cel pracy:
	\begin{itemize}
		\item Protokół SLCP
		\item Biblioteka slcp
		\item Program Lanek
	\end{itemize}
\end{frame}


\section{Protokół SLCP}

\subsection{Geneza}

\begin{frame}
	\frametitle{Geneza protokołu}
	\begin{itemize}
		\item Brak prostego i bezpiecznego protokołu komunikacyjnego w LAN
		\item Odmienne warunki i aspekty działania protokołu w sieci LAN
		\item Problemy z istniejącymi protokołami transportowymi
		\item Narzuty i koszta podtrzymywania sesji w TCP
		\item Prostota UDP
	\end{itemize}
\end{frame}

\subsection{Założenia i funkcje}

\begin{frame}
	\frametitle{Założenia i funkcje protokołu}
	\begin{itemize}
		\item Elastyczność i prostota
		\item Komunikacja
		\item Transmisja grupowa
		\item Identyfikacja punktów końcowych
		\item Zdalny nadzór i wywoływanie procedur
		\item Bezpieczeństwo
	\end{itemize}
\end{frame}

\subsection{Rozwiązania}

\begin{frame}
	\frametitle{Rozwiązania zastosowane w protokole}
	\begin{itemize}
		\item UDP jako fundament
		\item RSA jako algorytm szyfrowania danych
		\item Mechanizmy integralności danych
		\item Model zdalnego wywoływania procedur
	\end{itemize}
\end{frame}

\subsection{Scenariusze użycia}

\begin{frame}
	\frametitle{Scenariusze użycia protokołu}
	\begin{itemize}
		\item Prosta komunikacja tekstowa
		\item Zdalna kontrola i zarządzanie
	\end{itemize}
\end{frame}


\section{Specyfikacja}

\subsection{Format pakietu}

\begin{frame}[containsverbatim]
	\frametitle{Budowa pakietu}
	\begin{itemize}
		\item Segmentowa budowa pakietu
			\begin{verbatim}
+-----------------------------------+
|              header               |
+-----------------------------------+
|              payload              |
+-----------------------------------+
			\end{verbatim}
		\item Niezmienny nagłowek
		\item Dane zależne od typu pakietu
	\end{itemize}
\end{frame}


\begin{frame}[containsverbatim]
	\frametitle{Nagłówek}
	\begin{itemize}
		\item Niezmienny dla wszystkich pakietów
		\item Format nagłówka pakietu
	\begin{verbatim}
 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|            magic number           |
+--------+--------+--------+--------+
| flags  |  type  |     length      |
+--------+--------+--------+--------+
	\end{verbatim}
	\end{itemize}
\end{frame}

\subsection{Typy pakietów}

\begin{frame}
	\frametitle{Typy pakietów}
	\begin{itemize}
		\item \texttt{INIT}
		\item \texttt{BYE}
		\item \texttt{PING}
		\item \texttt{STATUS}
		\item \texttt{MESSAGE}
		\item \texttt{COMMAND}
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{INIT}}
	\begin{itemize}
		\item Pakiet rozpoczynający (inicjujący)
		\item Format danych pakietu
	\begin{verbatim}
 0                                31
+-----------------------------------+
|               name                |
+-----------------------------------+
|                                   |
|           cryptographic           |
|               data                |
|                                   |
+-----------------------------------+
	\end{verbatim}
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{BYE}}
	\begin{itemize}
		\item Pakiet zamykający
		\item Pakiet nie zawiera danych
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{PING}}
	\begin{itemize}
		\item Pakiet informujący o aktywności
		\item Pakiet nie zawiera danych
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{STATUS}}
	\begin{itemize}
		\item Informacja o zmianie statusu
		\item Format danych pakietu
	\begin{verbatim}
 0  4
+----+------------------------------+
| TP |         description ...
+------------------- ...
	\end{verbatim}
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{MESSAGE}}
	\begin{itemize}
		\item Wiadomość
		\item Format danych pakietu
	\begin{verbatim}
 0
+-----------------------------------+
|               body ...
+----------------- ...
	\end{verbatim}
	\end{itemize}
\end{frame}

\begin{frame}[containsverbatim]
	\frametitle{Pakiet \texttt{COMMAND}}
	\begin{itemize}
		\item Procedura zdalna
		\item Format danych pakietu
	\begin{verbatim}
 0  4     5    6  9 10
+----+--+--+--+----+------------------+
| ID |QR|RC|PR| CT |     cmd data ...
+-------------------------- ...
	\end{verbatim}
	\end{itemize}
\end{frame}


\section{Biblioteka slcp}

\begin{frame}
	\frametitle{Biblioteka slcp}
	\begin{itemize}
		\item Implementacja protokołu SLCP
		\item OOP w C++
		\item Licencja GPL
	\end{itemize}
\end{frame}

\subsection{Funkcje i możliwości}

\begin{frame}
	\frametitle{Funkcje i możliwości biblioteki}
	Obsługiwane elementy:
	\begin{itemize}
		\item Inicjacja i podtrzymanie połączenia
		\item Powiadomienia o aktywacji usługi, hostów w sieci
		\item Odbieranie oraz wysyłanie statusów i wiadomości
		\item Obsługa zdalnych procedur
	\end{itemize}
	\vskip 12pt
	Nieobsługiwane elementy:
	\begin{itemize}
		\item Szyfrowanie danych
	\end{itemize}
\end{frame}

\subsection{Budowa i architektura}

\begin{frame}
	\frametitle{Budowa i architektura biblioteki}
	\begin{itemize}
		\item Wzorzec obserwator
		\item namespace slcp
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Obsługa zdarzeń}
	Typy handlerów:
	\begin{itemize}
		\item \texttt{ConnectionHandler}
		\item \texttt{ConnectionDataHandler}
		\item \texttt{HostConnectionHandler}
		\item \texttt{StatusHandler}
		\item \texttt{MessageHandler}
		\item \texttt{CommandHandler}
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Klasa Client}
	\begin{itemize}
		\item Klasa bazowa aplikacji
		\item Podstawowa funkcjonalność klienta protokołu SLCP
		\item Metoda Connect() inicjuje połączenie
		\item Blokujący tryb działania
		\item Powiadamianie podłączonych obserwatorów
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Reprezentacja pakietów}
	\begin{itemize}
		\item Abstrakcyjne reprezentacje pakietów \texttt{MESSAGE}, \texttt{STATUS} i \texttt{COMMAND}:
			\begin{itemize}
				\item klasa \texttt{Message}
				\item klasa \texttt{Status}
				\item klasa \texttt{Command}
			\end{itemize}
		\item Pakiety \texttt{INIT}, \texttt{BYE} i \texttt{PING} obsługiwane wewnętrznie
		\item Interfejs \texttt{Packet}
		\item Klasa \texttt{RawPacket}
			\begin{itemize}
				\item Reprezentacja surowego pakietu
				\item Łatwy dostęp do nagłowka (\texttt{PacketHeader}) i danych (\texttt{PacketData})
				\item Wrapper
				\item (de)alokacja pamieci
				\item Idiom RAII
			\end{itemize}
	\end{itemize}
\end{frame}


\section{Program Lanek}

\begin{frame}
	\frametitle{Program Lanek}
	\begin{itemize}
		\item Prosta komunikacja tekstowa w sieci LAN
		\item Wykorzystanie biblioteki slcp i wxWidgets
		\item Napisana w języku C++
	\end{itemize}
\end{frame}

\subsection{Budowa i architektura}

\begin{frame}
	\frametitle{Budowa i architektura programu}
	\begin{itemize}
		\item OOP w C++
		\item Aplikacja wielowątkowa
			\begin{itemize}
				\item wątek główny (GUI)
				\item wątek klienta slcp (\texttt{SlcpClient})
			\end{itemize}
		\item Zasoby oparte na XRC (\texttt{resources.xrs})
	\end{itemize}
\end{frame}

\subsection{Możliwości programu}

\begin{frame}
	\frametitle{Możliwości programu}
	\begin{itemize}
		\item Okno główne z listą kontaktów
		\item Statusy
		\item Rozmowa
		\item Opcje
		\item Monitor protokołu
	\end{itemize}
\end{frame}


\section{Podsumowanie}

\begin{frame}
	\frametitle{Podsumowanie}
	\begin{itemize}
		\item Wszystkie założenia i  cele zostały zrealizowane
		\item Łatwa rozszerzalność biblioteki i protokołu
		\item Realne zastosowania
	\end{itemize}
	\vfill
	Doświadczenie i zgromadzone materiały oraz  analizy są idealnym źródłem i punktem wyjścia skłaniającym do dalszych analiz i testów oraz dają szerokie spojrzenie na wszystkie ważne aspekty, związane z projektowaniem protokołu.
\end{frame}


\begin{frame}
	\frametitle{}
	{\bf {Marcin Malich} \par}
	\href{mailto:me@malcom.pl}{me@malcom.pl}\\
	web: \href{http://malcom.pl}{malcom.pl}\\
	xmpp: \href{xmpp:me@malcom.pl}{me@malcom.pl}\\
\end{frame}

\end{document}
