summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpcomm.cpp33
1 files changed, 26 insertions, 7 deletions
diff --git a/noncore/net/ubrowser/httpcomm.cpp b/noncore/net/ubrowser/httpcomm.cpp
index b086b58..3c14053 100644
--- a/noncore/net/ubrowser/httpcomm.cpp
+++ b/noncore/net/ubrowser/httpcomm.cpp
@@ -141,35 +141,36 @@ void HttpComm::incoming()
141 } 141 }
142 while(!done) 142 while(!done)
143 { 143 {
144 switch(status) 144 switch(status)
145 { 145 {
146 //case 0=need to read chunk length 146 //case 0=need to read chunk length
147 case 0: 147 case 0:
148 j = tempQString.find('\n'); 148 j = tempQString.find('\n');
149 sclength = tempQString; 149 sclength = tempQString;
150 sclength.truncate(j); 150 sclength.truncate(j);
151 clength = sclength.toUInt(0, 16); 151 clength = sclength.toUInt(0, 16);
152 printf("HttpComm::Incoming: chunk length: %d\n", clength); 152 printf("HttpComm::Incoming: chunk length: %d\n", clength);
153 printf("HttpComm::Incoming: chunk length string: %s\n", sclength.latin1());
153 //end of data 154 //end of data
154 if(clength==0) 155 if(clength==0)
155 { 156 {
156 processBody(); 157 processBody();
157 done=true; 158 done=true;
158 return; 159 return;
159 } 160 }
160 //still more, but it hasnt been recieved yet 161 //still more, but it hasnt been recieved yet
161 if(ba <= j) 162 if(ba <= j)
162 { 163 {
163 status=1; 164 status=2;
164 done=true; 165 done=true;
165 break; 166 break;
166 } 167 }
167 //still more data waiting 168 //still more data waiting
168 else 169 else
169 { 170 {
170 done=false; 171 done=false;
171 //remove the chunk length header 172 //remove the chunk length header
172 tempQString.remove(0,j+1); 173 tempQString.remove(0,j+1);
173 } 174 }
174 bRead=0; 175 bRead=0;
175 // break; 176 // break;
@@ -178,63 +179,81 @@ void HttpComm::incoming()
178 case 1: 179 case 1:
179 //the current data extends beyond the end of the chunk 180 //the current data extends beyond the end of the chunk
180 if(bRead + tempQString.length() > clength) 181 if(bRead + tempQString.length() > clength)
181 { 182 {
182 QString newTQstring = tempQString; 183 QString newTQstring = tempQString;
183 newTQstring.truncate(clength-bRead); 184 newTQstring.truncate(clength-bRead);
184 bRead+=newTQstring.length(); 185 bRead+=newTQstring.length();
185 body+=newTQstring; 186 body+=newTQstring;
186 printf("HttpComm::incoming: start new body piece 1: \n"); 187 printf("HttpComm::incoming: start new body piece 1: \n");
187 printf("%s", newTQstring.latin1() ); 188 printf("%s", newTQstring.latin1() );
188 printf("HttpComm::incoming: end new body piece 1.\n"); 189 printf("HttpComm::incoming: end new body piece 1.\n");
189 status=0; 190 status=0;
190 j=clength-bRead; 191 tempQString = tempQString.remove(0, clength);
191 done=false; 192 done=false;
192 // break; 193 // break;
193 } 194 }
194 //the chunk extends beyond the current data; 195 //the chunk extends beyond the current data;
195 else 196 else
196 { 197 {
197 body+=tempQString; 198 if(tempQString.length() <= ba)
198 bRead+=tempQString.length(); 199 {
200 body+=tempQString;
201 bRead+=tempQString.length();
202 }
203 else
204 {
205 tempQString.truncate(ba);
206 body+=tempQString;
207 bRead+=tempQString.length();
208 }
199 printf("HttpComm::incoming: start new body piece 2: \n"); 209 printf("HttpComm::incoming: start new body piece 2: \n");
200 printf("%s", tempQString.latin1() ); 210 printf("%s", tempQString.latin1() );
201 printf("HttpComm::incoming: end new body piece 2.\n"); 211 printf("HttpComm::incoming: end new body piece 2.\n");
202 done=true; 212 done=true;
203 status=2; 213 status=2;
204 // break; 214 // break;
205 } 215 }
206 break; 216 break;
207 //just got data in, continue reading chunk 217 //just got data in, continue reading chunk
208 case 2: 218 case 2:
209 //the current data extends beyond the end of the chunk 219 //the current data extends beyond the end of the chunk
210 if(bRead + tempQString.length() > clength) 220 if(bRead + tempQString.length() > clength)
211 { 221 {
212 QString newTQstring = tempQString; 222 QString newTQstring = tempQString;
213 newTQstring.truncate(clength-bRead); 223 newTQstring.truncate(clength-bRead);
214 bRead+=newTQstring.length(); 224 bRead+=newTQstring.length();
215 body+=newTQstring; 225 body+=newTQstring;
216 printf("HttpComm::incoming: start new body piece 3: \n"); 226 printf("HttpComm::incoming: start new body piece 3: \n");
217 printf("%s", newTQstring.latin1() ); 227 printf("%s", newTQstring.latin1() );
218 printf("HttpComm::incoming: end new body piece 3.\n"); 228 printf("HttpComm::incoming: end new body piece 3.\n");
219 status=0; 229 status=0;
220 j=clength-bRead; 230 tempQString = tempQString.remove(0, clength);
221 done=false; 231 done=false;
222 // break; 232 // break;
223 } 233 }
224 //the chunk extends beyond the current data; 234 //the chunk extends beyond the current data;
225 else 235 else
226 { 236 {
227 body+=tempQString; 237 if(tempQString.length() <= ba)
228 bRead+=tempQString.length(); 238 {
239 body+=tempQString;
240 bRead+=tempQString.length();
241 }
242 else
243 {
244 tempQString.truncate(ba);
245 body+=tempQString;
246 bRead+=tempQString.length();
247 }
229 printf("HttpComm::incoming: start new body piece 4: \n"); 248 printf("HttpComm::incoming: start new body piece 4: \n");
230 printf("%s", tempQString.latin1() ); 249 printf("%s", tempQString.latin1() );
231 printf("HttpComm::incoming: end new body piece 4.\n"); 250 printf("HttpComm::incoming: end new body piece 4.\n");
232 done=true; 251 done=true;
233 status=2; 252 status=2;
234 // break; 253 // break;
235 } 254 }
236 break; 255 break;
237 } 256 }
238 printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead); 257 printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead);
239 } 258 }
240 } 259 }