\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mer. sept. 25 18:33:10 CEST 2013}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={rfc2696},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Extension de contrôle pour la manipulation des résultats paginés},
CreationDate={D:20130925183310},
ModDate={D:20130925183310},
Keywords={LDAP;Lightweight Directory Access Protocol}
}}
\begin{document}
 
\begin{center}
{\Huge rfc2696 }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Extension de contrôle pour la manipulation des résultats paginés}
 
\vspace{10mm}
 
\hspace{1mm}  Ce contrôle permet à un client de contrôler la quantité de résultat retourné par le serveur lors d’une opération de recherche. Utile lorsqu’un client a des ressources limitées et peut ne pas être en mesure de traiter le résultat entièrement, ou lorsqu’un client est connecté sur un connection à faible bande passante.
\vspace{5mm} \\
\hspace{1mm}  Ce contrôle est inclus dans les messages \textbf{searchRequest} et \textbf{searchResultDone}.
\vspace{5mm} \\
 
 
\hspace{1mm} La structure de ce contrôle est la suivante:
 
{\ttfamily
pagedResultsControl ::= SEQUENCE \{\\ \hspace{2mm}controlType 1.2.840.113556.1.4.319,\\ \hspace{2mm}criticality BOOLEAN DEFAULT FALSE,\\ \hspace{2mm}controlValue searchControlValue\\ \}\\
}
\vspace{8mm}
 
\hspace{1mm} searchControlValue est une chaîne encodée BER de la séquence suivante:
 
{\ttfamily
realSearchControlValue ::= SEQUENCE \{\\ \hspace{2mm}size INTEGER (0..maxInt),\\ \hspace{2mm}-- requested page size from client\\ \hspace{2mm}-- result set size estimate from server\\ \hspace{2mm}cookie OCTET STRING\\ \}\\
}
\vspace{8mm}
 
\vspace{1cm}{\huge Intéraction client-serveur }
 
\
 
\hspace{1mm}  Un client peut spécifier un \textbf{pagedResultsControl} avec la taille de page et un cookie vide. La taille de page peut être supérieur à 0 et inférieur à \textbf{sizeLimit}.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si la taille de page est supérieur ou égale à \textbf{sizeLimit}, le serveur devrait ignorer ce contrôle. Si le serveur ne supporte pas ce contrôle le serveur doit retourner une erreur \textbf{unsupportedCriticalExtension} si le client a positionné \textbf{criticality}, sinon le serveur devrait ignorer le contrôle.
\vspace{5mm} \\
 
 
\hspace{1mm}  Chaque fois que le serveur retourne un jeu de résultat au client, le serveur inclus le contrôle \textbf{unsupportedCriticalExtension} dans le message \textbf{searchResultDone}. Dans le contrôle retourné, la taille peut être définie à l’estimation du serveur du nombre total d’entrées à retourner. les serveurs qui ne peuvent pas l’estimer devraient retourner 0. Le cookie doit être mis à une valeur vide s’il n’y plus d’entrée à retourner.
\vspace{5mm} \\
 
 
\hspace{1mm}  Le client doit considérer le cookie comme opaque et ne s’occupe pas de son contenu. Quand le client veut récupérer plus d’entrées, il doit envoyer une \textbf{searchRequest} avec toutes les valeurs identique à la requête initiale à l’exception du cookie, et optionnellement une taille de page modifiée. le cookie à fournir dans la requête est le dernier cookie reçu.
\vspace{5mm} \\
 
 
\hspace{1mm}  Une séquence est abandonnée par une requête qui contient \textbf{pagedResultsControl} de 0 et le dernier cookie retourné par le client. Un client peut utiliser l’opération \textbf{abandon} pour abandonner la recherche, mais ce n’est pas encouragé et peut invalider le cookie du client.
\vspace{5mm} \\
 
 
\hspace{1mm}  Si le serveur ne peut pas continuer une opération paginé, il devrait retourner l’erreur appropriée dans une entrée \textbf{searchResultDone}, le client et le serveur devraient considérer le jeu de résultat terminé et non-récupérable.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} le client envoie une requête avec une résultat paginé à 3: \\
\hspace{1mm} \textbf{C: SearchRequest + pagedResultsControl(3,"")} \\
\hspace{1mm} Le serveur répond avec 3 entrées et une indication du nombre total d’entrées (5) dans le résultat et un cookie à utiliser pour la suite \\
\hspace{1mm} \textbf{S: SearchResultEntry} \\
\hspace{1mm} \textbf{S: SearchResultEntry} \\
\hspace{1mm} \textbf{S: SearchResultEntry} \\
\hspace{1mm} \textbf{S: SearchResultDone + pagedResultsControl(5, "opaque")} \\
\hspace{1mm} Le client envoie la même requête en changeant simplement le cookie, demande la page suivante: \\
\hspace{1mm} \textbf{C: SearchRequest + PagedResultsControl(3, "opaque")} \\
\hspace{1mm} Le serveur répond avec le 2 dernière entrées en indiquant qu’il n’y a plus d’entrées: \\
\hspace{1mm} \textbf{S: SearchResultEntry} \\
\hspace{1mm} \textbf{S: SearchResultEntry} \\
\hspace{1mm} \textbf{S: SearchResultDone + pagedResultsControl(5,"")} \\
\end{flushleft}
\end{document}
