acl  3.5.3.0
mime_quoted_printable.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "mime_code.hpp"
4 
5 #if !defined(ACL_MIME_DISABLE)
6 
7 namespace acl {
8 
9 class string;
10 
12 {
13 public:
14  /**
15  * 构造函数
16  * @param addCrlf {bool} 非流式编码时是否在末尾添加 "\r\n"
17  * @param addInvalid {bool} 流式解码时是否遇到非法字符是否原样拷贝
18  */
19  mime_quoted_printable(bool addCrlf = false, bool addInvalid = false);
20  ~mime_quoted_printable(void);
21 
22  // 基类的虚函数重载
23 
24  /* 流式编码函数,使用方法: encode_update->encode_update->...->encode_finish */
25 
26  /**
27  * 流式编码函数
28  * @param src {const char*} 原始数据
29  * @param n {int} src 数据长度
30  * @param out {string*} 存储编码结果,可以通过 out->empty()
31  * 来测试 out 中是否有结果数据,用 out->length() 获得 out 中结果
32  * 数据的长度,注意当用完 out 中的结果数据后一定要调用 out->clear()
33  * 来清空用过的结果数据;也可以多次调用该函数后,在最后调用
34  * encode_finish 后一次性取出所有数据
35  */
36  void encode_update(const char *src, int n, string* out);
37 
38  /**
39  * 流式编码结束函数,调用该函数后,取出最后的结果数据
40  * @param out {string*} 存储编码结果,可以通过 out->empty()
41  * 来测试 out 中是否有结果数据,用 out->length() 获得 out 中结果
42  * 数据的长度,注意当用完 out 中的结果数据后一定要调用 out->clear()
43  * 来清空用过的结果数据
44  */
45  void encode_finish(string* out);
46 
47  /* 流式解码函数,使用方法: decode_update->decode_update->...->decode_finish */
48 
49  /**
50  * 流式解码函数
51  * @param src {const char*} 原始数据
52  * @param n {int} src 数据长度
53  * @param out {string*} 存储解码结果,可以通过 out->empty()
54  * 来测试 out 中是否有结果数据,用 out->length() 获得 out 中结果
55  * 数据的长度,注意当用完 out 中的结果数据后一定要调用 out->clear()
56  * 来清空用过的结果数据;也可以多次调用该函数后,在最后调用
57  * decode_finish 后一次性取出所有数据
58  */
59  void decode_update(const char *src, int n, string* out);
60 
61  /**
62  * 流式解码结束函数,调用该函数后,取出最后的结果数据
63  * @param out {string*} 存储解码结果,可以通过 out->empty()
64  * 来测试 out 中是否有结果数据,用 out->length() 获得 out 中结果
65  * 数据的长度,注意当用完 out 中的结果数据后一定要调用 out->clear()
66  * 来清空用过的结果数据
67  */
68  void decode_finish(string* out);
69 
70  /**
71  * 静态编码函数,直接将输入数据进行编码同时存入用户缓冲区
72  * 用户缓冲区
73  * @param in {const char*} 输入数据地址
74  * @param n {int} 输入数据长度
75  * @param out {string*} 存储结果的缓冲区
76  */
77  static void encode(const char* in, int n, string* out);
78 
79  /**
80  * 静态解码函数,直接将输入数据进行解析并存入用户缓冲区
81  * @param in {const char*} 输入数据地址
82  * @param n {int} 数据长度
83  * @param out {string*} 存储解析结果
84  */
85  static void decode(const char* in, int n, string* out);
86 
87  /**
88  * 重置编、解码器状态
89  */
90  void reset(void);
91 
92  /**
93  * 设置在编码结束时是否添加 "\r\n"
94  * @param on {bool}
95  */
96  void add_crlf(bool on);
97 
98  /**
99  * 设置在解码过程中是否拷贝非法字符
100  * @param on {bool}
101  */
102  void add_invalid(bool on);
103 
104 protected:
105 private:
106  void encode(string* out);
107  void decode(string* out);
108 
109  bool hex_decode(unsigned char first, unsigned char second,
110  unsigned int *result);
111 
112  char m_encodeBuf[72];
113  int m_encodeCnt;
114  char m_decodeBuf[144];
115  int m_decodeCnt;
116  bool m_addCrLf;
117  bool m_addInvalid;
118 };
119 
120 } // namespace acl
121 
122 #endif // !defined(ACL_MIME_DISABLE)
#define ACL_CPP_API