]>
Commit | Line | Data |
---|---|---|
0f9db2d6 | 1 | /* |
b8ae064d | 2 | * Copyright (C) 1996-2023 The Squid Software Foundation and contributors |
0f9db2d6 | 3 | * |
bbc27441 AJ |
4 | * Squid software is distributed under GPLv2+ license and includes |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
0f9db2d6 AJ |
7 | */ |
8 | ||
bbc27441 AJ |
9 | /* DEBUG: section 25 MiME Header Parsing */ |
10 | ||
582c2af2 | 11 | #include "squid.h" |
675b8408 | 12 | #include "debug/Stream.h" |
8b082ed9 | 13 | #include "mime_header.h" |
8b082ed9 | 14 | #include "sbuf/SBuf.h" |
0f9db2d6 | 15 | |
0f9db2d6 | 16 | size_t |
00237269 | 17 | headersEnd(const char *mime, size_t l, bool &containsObsFold) |
0f9db2d6 AJ |
18 | { |
19 | size_t e = 0; | |
20 | int state = 1; | |
00237269 | 21 | containsObsFold = false; |
0f9db2d6 | 22 | |
0f9db2d6 AJ |
23 | while (e < l && state < 3) { |
24 | switch (state) { | |
25 | ||
26 | case 0: | |
27 | ||
28 | if ('\n' == mime[e]) | |
29 | state = 1; | |
30 | ||
31 | break; | |
32 | ||
33 | case 1: | |
34 | if ('\r' == mime[e]) | |
35 | state = 2; | |
36 | else if ('\n' == mime[e]) | |
37 | state = 3; | |
00237269 AJ |
38 | else if (' ' == mime[e] || '\t' == mime[e]) { |
39 | containsObsFold = true; | |
40 | state = 0; | |
41 | } else | |
0f9db2d6 AJ |
42 | state = 0; |
43 | ||
44 | break; | |
45 | ||
46 | case 2: | |
47 | if ('\n' == mime[e]) | |
48 | state = 3; | |
49 | else | |
50 | state = 0; | |
51 | ||
52 | break; | |
53 | ||
54 | default: | |
55 | break; | |
56 | } | |
57 | ||
95dc7ff4 | 58 | ++e; |
0f9db2d6 | 59 | } |
0f9db2d6 AJ |
60 | |
61 | if (3 == state) | |
62 | return e; | |
63 | ||
64 | return 0; | |
65 | } | |
f53969cc | 66 | |
8b082ed9 FC |
67 | size_t |
68 | headersEnd(const SBuf &buf, bool &containsObsFold) | |
69 | { | |
70 | return headersEnd(buf.rawContent(), buf.length(), containsObsFold); | |
71 | } | |
72 |