17 |
17 |
18 |
18 |
19 |
19 |
20 // INCLUDE FILES |
20 // INCLUDE FILES |
21 #include <e32std.h> |
21 #include <e32std.h> |
22 #include "base64.h" |
22 #include "Base64.h" |
23 |
23 |
24 // LOCAL CONSTANTS AND MACROS |
24 // LOCAL CONSTANTS AND MACROS |
25 LOCAL_C const TUint8* const KBase64Chars = |
25 LOCAL_C const TUint8* const KBase64Chars = |
26 _S8("ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
26 _S8("ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
27 "abcdefghijklmnopqrstuvwxyz" |
27 "abcdefghijklmnopqrstuvwxyz" |
28 "0123456789+/"); |
28 "0123456789+/"); |
29 |
29 |
30 // LOCAL FUNCTION PROTOTYPES |
30 // LOCAL FUNCTION PROTOTYPES |
85 charArray4[1] = static_cast<TUint8>( |
85 charArray4[1] = static_cast<TUint8>( |
86 ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4)); |
86 ((charArray3[0] & 0x03) << 4) + ((charArray3[1] & 0xf0) >> 4)); |
87 charArray4[2] = static_cast<TUint8>( |
87 charArray4[2] = static_cast<TUint8>( |
88 ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6)); |
88 ((charArray3[1] & 0x0f) << 2) + ((charArray3[2] & 0xc0) >> 6)); |
89 charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f); |
89 charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f); |
90 |
90 |
91 for (i = 0; i <4; i++) |
91 for (i = 0; i <4; i++) |
92 { |
92 { |
93 des.Append(KBase64Chars[charArray4[i]]); |
93 des.Append(KBase64Chars[charArray4[i]]); |
94 } |
94 } |
95 i = 0; |
95 i = 0; |
96 } |
96 } |
97 } |
97 } |
98 |
98 |
99 if (i != 0) |
99 if (i != 0) |
100 { |
100 { |
101 for (j = i; j < 3; j++) |
101 for (j = i; j < 3; j++) |
102 { |
102 { |
103 charArray3[j] = '\0'; |
103 charArray3[j] = '\0'; |
104 } |
104 } |
105 |
105 |
106 charArray4[0] = static_cast<TUint8>((charArray3[0] & 0xfc) >> 2); |
106 charArray4[0] = static_cast<TUint8>((charArray3[0] & 0xfc) >> 2); |
107 charArray4[1] = static_cast<TUint8>( |
107 charArray4[1] = static_cast<TUint8>( |
108 ((charArray3[0] & 0x03) << 4) +((charArray3[1] & 0xf0) >> 4)); |
108 ((charArray3[0] & 0x03) << 4) +((charArray3[1] & 0xf0) >> 4)); |
109 charArray4[2] = static_cast<TUint8>( |
109 charArray4[2] = static_cast<TUint8>( |
110 ((charArray3[1] & 0x0f) << 2) +((charArray3[2] & 0xc0) >> 6)); |
110 ((charArray3[1] & 0x0f) << 2) +((charArray3[2] & 0xc0) >> 6)); |
111 charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f); |
111 charArray4[3] = static_cast<TUint8>(charArray3[2] & 0x3f); |
112 |
112 |
113 for (j = 0; j < i + 1; j++) |
113 for (j = 0; j < i + 1; j++) |
114 { |
114 { |
115 des.Append(KBase64Chars[charArray4[j]]); |
115 des.Append(KBase64Chars[charArray4[j]]); |
116 } |
116 } |
117 |
117 |
118 while ((i++ < 3)) |
118 while ((i++ < 3)) |
119 { |
119 { |
120 des.Append('='); |
120 des.Append('='); |
121 } |
121 } |
122 } |
122 } |
123 |
123 |
124 return ret; |
124 return ret; |
125 } |
125 } |
126 |
126 |
127 // ----------------------------------------------------------------------------- |
127 // ----------------------------------------------------------------------------- |
128 // ?function_name implements... |
128 // ?function_name implements... |
139 TInt i = 0; |
139 TInt i = 0; |
140 TInt j = 0; |
140 TInt j = 0; |
141 TInt in = 0; |
141 TInt in = 0; |
142 TUint8 charArray4[4], charArray3[3]; |
142 TUint8 charArray4[4], charArray3[3]; |
143 HBufC8* ret; |
143 HBufC8* ret; |
144 |
144 |
145 ret = HBufC8::NewL((aInput.Length() * 3 + 1) / 4); |
145 ret = HBufC8::NewL((aInput.Length() * 3 + 1) / 4); |
146 TPtr8 des = ret->Des(); |
146 TPtr8 des = ret->Des(); |
147 while (len-- && aInput[in] != '=') |
147 while (len-- && aInput[in] != '=') |
148 { |
148 { |
149 if (FindBase64Char(aInput[in]) < 64) |
149 if (FindBase64Char(aInput[in]) < 64) |
152 } |
152 } |
153 else |
153 else |
154 { |
154 { |
155 in++; |
155 in++; |
156 } |
156 } |
157 |
157 |
158 if (i == 4) |
158 if (i == 4) |
159 { |
159 { |
160 for (i = 0; i < 4; i++) |
160 for (i = 0; i < 4; i++) |
161 { |
161 { |
162 charArray4[i] = FindBase64Char(charArray4[i]); |
162 charArray4[i] = FindBase64Char(charArray4[i]); |
163 } |
163 } |
164 |
164 |
165 charArray3[0] = static_cast<TUint8>( |
165 charArray3[0] = static_cast<TUint8>( |
166 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4)); |
166 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4)); |
167 charArray3[1] = static_cast<TUint8>( |
167 charArray3[1] = static_cast<TUint8>( |
168 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2)); |
168 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2)); |
169 charArray3[2] = static_cast<TUint8>( |
169 charArray3[2] = static_cast<TUint8>( |
170 ((charArray4[2] & 0x3) << 6) + charArray4[3]); |
170 ((charArray4[2] & 0x3) << 6) + charArray4[3]); |
171 |
171 |
172 for (i = 0; i < 3; i++) |
172 for (i = 0; i < 3; i++) |
173 { |
173 { |
174 des.Append(charArray3[i]); |
174 des.Append(charArray3[i]); |
175 } |
175 } |
176 i = 0; |
176 i = 0; |
177 } |
177 } |
178 } |
178 } |
179 |
179 |
180 if (i != 0) |
180 if (i != 0) |
181 { |
181 { |
182 for (j = i; j < 4; j++) |
182 for (j = i; j < 4; j++) |
183 { |
183 { |
184 charArray4[j] = 0; |
184 charArray4[j] = 0; |
185 } |
185 } |
186 |
186 |
187 for (j = 0; j < 4; j++) |
187 for (j = 0; j < 4; j++) |
188 { |
188 { |
189 charArray4[j] = FindBase64Char(charArray4[j]); |
189 charArray4[j] = FindBase64Char(charArray4[j]); |
190 } |
190 } |
191 |
191 |
192 charArray3[0] = static_cast<TUint8>( |
192 charArray3[0] = static_cast<TUint8>( |
193 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4)); |
193 (charArray4[0] << 2) + ((charArray4[1] & 0x30) >> 4)); |
194 charArray3[1] = static_cast<TUint8>( |
194 charArray3[1] = static_cast<TUint8>( |
195 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2)); |
195 ((charArray4[1] & 0xf) << 4) + ((charArray4[2] & 0x3c) >> 2)); |
196 charArray3[2] = static_cast<TUint8>( |
196 charArray3[2] = static_cast<TUint8>( |
197 ((charArray4[2] & 0x3) << 6) + charArray4[3]); |
197 ((charArray4[2] & 0x3) << 6) + charArray4[3]); |
198 |
198 |
199 for (j = 0; j < i - 1; j++) |
199 for (j = 0; j < i - 1; j++) |
200 { |
200 { |
201 des.Append(charArray3[j]); |
201 des.Append(charArray3[j]); |
202 } |
202 } |
203 } |
203 } |
204 |
204 |
205 return ret; |
205 return ret; |
206 } |
206 } |
207 |
207 |
208 // End of File |
208 // End of File |