security/manager/boot/src/nsSecurityHeaderParser.h

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:06e9681860b9
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #ifndef nsSecurityHeaderParser_h__
6 #define nsSecurityHeaderParser_h__
7
8 #include "nsString.h"
9 #include "mozilla/LinkedList.h"
10 #include "nsCOMPtr.h"
11
12 // Utility class for handing back parsed directives and (optional) values
13 class nsSecurityHeaderDirective : public mozilla::LinkedListElement<nsSecurityHeaderDirective> {
14 public:
15 nsAutoCString mName;
16 nsAutoCString mValue;
17 };
18
19 // This class parses security-related HTTP headers like
20 // Strict-Transport-Security. The Augmented Backus-Naur Form syntax for this
21 // header is reproduced below, for reference:
22 //
23 // Strict-Transport-Security = "Strict-Transport-Security" ":"
24 // [ directive ] *( ";" [ directive ] )
25 //
26 // directive = directive-name [ "=" directive-value ]
27 // directive-name = token
28 // directive-value = token | quoted-string
29 //
30 // where:
31 //
32 // token = <token, defined in [RFC2616], Section 2.2>
33 // quoted-string = <quoted-string, defined in [RFC2616], Section 2.2>/
34 //
35 // For further reference, see [RFC6797], Section 6.1
36
37 class nsSecurityHeaderParser {
38 public:
39 explicit nsSecurityHeaderParser(const char *aHeader);
40 ~nsSecurityHeaderParser();
41
42 // Only call Parse once.
43 nsresult Parse();
44 // The caller does not take ownership of the memory returned here.
45 mozilla::LinkedList<nsSecurityHeaderDirective> *GetDirectives();
46
47 private:
48 bool Accept(char aChr);
49 bool Accept(bool (*aClassifier) (signed char));
50 void Expect(char aChr);
51 void Advance();
52 void Header(); // header = [ directive ] *( ";" [ directive ] )
53 void Directive(); // directive = directive-name [ "=" directive-value ]
54 void DirectiveName(); // directive-name = token
55 void DirectiveValue(); // directive-value = token | quoted-string
56 void Token(); // token = 1*<any CHAR except CTLs or separators>
57 void QuotedString(); // quoted-string = (<"> *( qdtext | quoted-pair ) <">)
58 void QuotedText(); // qdtext = <any TEXT except <"> and "\">
59 void QuotedPair(); // quoted-pair = "\" CHAR
60
61 // LWS = [CRLF] 1*( SP | HT )
62 void LWSMultiple(); // Handles *( LWS )
63 void LWSCRLF(); // Handles the [CRLF] part of LWS
64 void LWS(); // Handles the 1*( SP | HT ) part of LWS
65
66 mozilla::LinkedList<nsSecurityHeaderDirective> mDirectives;
67 const char *mCursor;
68 nsSecurityHeaderDirective *mDirective;
69
70 nsAutoCString mOutput;
71 bool mError;
72 };
73
74 #endif /* nsSecurityHeaderParser_h__ */

mercurial