summaryrefslogtreecommitdiff
authorspiralman <spiralman>2002-07-25 16:38:22 (UTC)
committer spiralman <spiralman>2002-07-25 16:38:22 (UTC)
commit11170a8b8c1a2755cb7d9416ea99fc5067d0c53d (patch) (unidiff)
tree0e2ea513139dfd146e8fe8f96f8fb791d2382e17
parent8895e9bd55244f32f12ff619e020a23afac44808 (diff)
downloadopie-11170a8b8c1a2755cb7d9416ea99fc5067d0c53d.zip
opie-11170a8b8c1a2755cb7d9416ea99fc5067d0c53d.tar.gz
opie-11170a8b8c1a2755cb7d9416ea99fc5067d0c53d.tar.bz2
removed infinite loop with chunked encoding
fixed generation of context for http requests (QTextBrowser still ignores them) chunked encoding still misses large portions of data...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpcomm.cpp11
-rw-r--r--noncore/net/ubrowser/moc_httpcomm.cpp2
-rw-r--r--noncore/net/ubrowser/moc_mainview.cpp2
3 files changed, 9 insertions, 6 deletions
diff --git a/noncore/net/ubrowser/httpcomm.cpp b/noncore/net/ubrowser/httpcomm.cpp
index 54f7acf..b086b58 100644
--- a/noncore/net/ubrowser/httpcomm.cpp
+++ b/noncore/net/ubrowser/httpcomm.cpp
@@ -110,186 +110,189 @@ void HttpComm::incoming()
110 if(j != 0) 110 if(j != 0)
111 { 111 {
112 for( ; j<ba ; j++) 112 for( ; j<ba ; j++)
113 { 113 {
114 body+=tempString[j]; 114 body+=tempString[j];
115 bRead++; 115 bRead++;
116 // printf("bRead1: %d\n", bRead); 116 // printf("bRead1: %d\n", bRead);
117 } 117 }
118 } 118 }
119 else 119 else
120 { 120 {
121 body += tempString; 121 body += tempString;
122 bRead+=ba; 122 bRead+=ba;
123 // printf("bRead2: %d\n", bRead); 123 // printf("bRead2: %d\n", bRead);
124 } 124 }
125 125
126 if(bRead >= length) 126 if(bRead >= length)
127 { 127 {
128 printf("HttpComm::incoming: finished reading body\n"); 128 printf("HttpComm::incoming: finished reading body\n");
129 processBody(); 129 processBody();
130 socket->close(); 130 socket->close();
131 } 131 }
132 } 132 }
133 else 133 else
134 { 134 {
135 QString tempQString = tempString; 135 QString tempQString = tempString;
136 //remove the http header, if one exists 136 //remove the http header, if one exists
137 if(j != 0) 137 if(j != 0)
138 { 138 {
139 tempQString.remove(0, j+1); 139 tempQString.remove(0, j+1);
140 printf("HttpComm::incoming: removing http header. Result: \n%s", tempQString.latin1()); 140 printf("HttpComm::incoming: removing http header. Result: \n%s", tempQString.latin1());
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 //end of data 153 //end of data
154 if(clength==0) 154 if(clength==0)
155 { 155 {
156 processBody(); 156 processBody();
157 done=true; 157 done=true;
158 return;
158 } 159 }
159 //still more, but it hasnt been recieved yet 160 //still more, but it hasnt been recieved yet
160 if(ba <= j) 161 if(ba <= j)
161 { 162 {
162 status=1; 163 status=1;
163 done=true; 164 done=true;
164 break; 165 break;
165 } 166 }
166 //still more data waiting 167 //still more data waiting
167 else 168 else
168 { 169 {
169 done=false; 170 done=false;
170 //remove the chunk length header 171 //remove the chunk length header
171 tempQString.remove(0,j+1); 172 tempQString.remove(0,j+1);
172 } 173 }
173 bRead=0; 174 bRead=0;
174 // break; 175 // break;
175 //if there is more fall through to: 176 //if there is more fall through to:
176 //chunk length just read, still more in tempQstring 177 //chunk length just read, still more in tempQstring
177 case 1: 178 case 1:
178 //the current data extends beyond the end of the chunk 179 //the current data extends beyond the end of the chunk
179 if(bRead + tempQString.length() > clength) 180 if(bRead + tempQString.length() > clength)
180 { 181 {
181 QString newTQstring = tempQString; 182 QString newTQstring = tempQString;
182 newTQstring.truncate(clength-bRead); 183 newTQstring.truncate(clength-bRead);
183 bRead+=newTQstring.length(); 184 bRead+=newTQstring.length();
184 body+=newTQstring; 185 body+=newTQstring;
185 printf("HttpComm::incoming: start new body piece 1: \n"); 186 printf("HttpComm::incoming: start new body piece 1: \n");
186 printf("%s", newTQstring.latin1() ); 187 printf("%s", newTQstring.latin1() );
187 printf("HttpComm::incoming: end new body piece 1.\n"); 188 printf("HttpComm::incoming: end new body piece 1.\n");
188 status=0; 189 status=0;
189 j=clength-bRead; 190 j=clength-bRead;
190 done=false; 191 done=false;
191 // break; 192 // break;
192 } 193 }
193 //the chunk extends beyond the current data; 194 //the chunk extends beyond the current data;
194 else 195 else
195 { 196 {
196 body+=tempQString; 197 body+=tempQString;
197 bRead+=ba; 198 bRead+=tempQString.length();
198 printf("HttpComm::incoming: start new body piece 2: \n"); 199 printf("HttpComm::incoming: start new body piece 2: \n");
199 printf("%s", tempQString.latin1() ); 200 printf("%s", tempQString.latin1() );
200 printf("HttpComm::incoming: end new body piece 2.\n"); 201 printf("HttpComm::incoming: end new body piece 2.\n");
201 done=true; 202 done=true;
202 status=2; 203 status=2;
203 // break; 204 // break;
204 } 205 }
205 break; 206 break;
206 //just got data in, continue reading chunk 207 //just got data in, continue reading chunk
207 case 2: 208 case 2:
208 //the current data extends beyond the end of the chunk 209 //the current data extends beyond the end of the chunk
209 if(bRead + tempQString.length() > clength) 210 if(bRead + tempQString.length() > clength)
210 { 211 {
211 QString newTQstring = tempQString; 212 QString newTQstring = tempQString;
212 newTQstring.truncate(clength-bRead); 213 newTQstring.truncate(clength-bRead);
213 bRead+=newTQstring.length(); 214 bRead+=newTQstring.length();
214 body+=newTQstring; 215 body+=newTQstring;
215 printf("HttpComm::incoming: start new body piece 3: \n"); 216 printf("HttpComm::incoming: start new body piece 3: \n");
216 printf("%s", newTQstring.latin1() ); 217 printf("%s", newTQstring.latin1() );
217 printf("HttpComm::incoming: end new body piece 3.\n"); 218 printf("HttpComm::incoming: end new body piece 3.\n");
218 status=0; 219 status=0;
219 j=clength-bRead; 220 j=clength-bRead;
220 done=false; 221 done=false;
221 // break; 222 // break;
222 } 223 }
223 //the chunk extends beyond the current data; 224 //the chunk extends beyond the current data;
224 else 225 else
225 { 226 {
226 body+=tempQString; 227 body+=tempQString;
227 bRead+=ba; 228 bRead+=tempQString.length();
228 printf("HttpComm::incoming: start new body piece 4: \n"); 229 printf("HttpComm::incoming: start new body piece 4: \n");
229 printf("%s", tempQString.latin1() ); 230 printf("%s", tempQString.latin1() );
230 printf("HttpComm::incoming: end new body piece 4.\n"); 231 printf("HttpComm::incoming: end new body piece 4.\n");
231 done=true; 232 done=true;
232 status=2; 233 status=2;
233 // break; 234 // break;
234 } 235 }
235 break; 236 break;
236 } 237 }
237 printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead); 238 printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead);
238 } 239 }
239 } 240 }
240 } 241 }
241 delete tempString; 242 delete tempString;
242} 243}
243 244
244void HttpComm::connectionClosed() 245void HttpComm::connectionClosed()
245{ 246{
246 printf("HttpComm::connectionClosed: connection closed\n"); 247 printf("HttpComm::connectionClosed: connection closed\n");
247 processBody(); 248 processBody();
248} 249}
249 250
250void HttpComm::parseHeader() 251void HttpComm::parseHeader()
251{ 252{
252 QStringList headerLines, tempList; 253 QStringList headerLines, tempList;
253 int i; 254 int i;
254 255
255 printf("HttpComm::parseHeader: start header\n\n"); 256 printf("HttpComm::parseHeader: start header\n\n");
256 printf("%s", header.latin1()); 257 printf("%s", header.latin1());
257 printf("HttpComm::parseHeader: end header\n"); 258 printf("HttpComm::parseHeader: end header\n");
258 259
259 headerLines = QStringList::split('\n', header); 260 headerLines = QStringList::split('\n', header);
260 261
261 for(i=0; i<headerLines.count(); i++) 262 for(i=0; i<headerLines.count(); i++)
262 { 263 {
263 if(headerLines[i].startsWith("Content-Length:") ) 264 if(headerLines[i].startsWith("Content-Length:") )
264 { 265 {
265 tempList = QStringList::split(':', headerLines[i]); 266 tempList = QStringList::split(':', headerLines[i]);
266 tempList[1].stripWhiteSpace(); 267 tempList[1].stripWhiteSpace();
267 length = tempList[1].toUInt(); 268 length = tempList[1].toUInt();
268 } 269 }
269 else if(headerLines[i].startsWith("Transfer-Encoding: chunked") ) 270 else if(headerLines[i].startsWith("Transfer-Encoding: chunked") )
270 { 271 {
271 printf("HttpComm::parseHeader: using chunked encoding\n"); 272 printf("HttpComm::parseHeader: using chunked encoding\n");
272 chunked = true; 273 chunked = true;
273 status=0; 274 status=0;
274 } 275 }
275 } 276 }
276 277
277 printf("HttpConn::parseHeader: content-length: %d\n", length); 278 printf("HttpConn::parseHeader: content-length: %d\n", length);
278} 279}
279 280
280void HttpComm::processBody() 281void HttpComm::processBody()
281{ 282{
283 printf("HttpComm::processBody: processing body\n");
282 //printf("HttpComm::processBody: start body\n\n"); 284 //printf("HttpComm::processBody: start body\n\n");
283 //printf("%s", body.latin1()); 285 //printf("%s", body.latin1());
284 //printf("HttpComm::processBody: end body\n"); 286 //printf("HttpComm::processBody: end body\n");
285 287
286 int lastSlash = file.findRev('/'); 288 int lastSlash = file.findRev('/');
287 289
288 QString end = file; 290 QString end = file;
289 end.truncate(lastSlash-1); 291 end.truncate(lastSlash+1);
290 QString context("http://"+host+':'+portS+end); 292 QString context("http://"+host+':'+portS+end);
293 printf("HttpComm::processBody: context: %s\n", context.latin1() );
291 294
292 browser->setTextFormat(RichText); 295 browser->setTextFormat(RichText);
296 browser->mimeSourceFactory()->setFilePath(context);
293 browser->setText(body, context); 297 browser->setText(body, context);
294 printf("%s\n", context.latin1() );
295} 298}
diff --git a/noncore/net/ubrowser/moc_httpcomm.cpp b/noncore/net/ubrowser/moc_httpcomm.cpp
index ba2b939..5622531 100644
--- a/noncore/net/ubrowser/moc_httpcomm.cpp
+++ b/noncore/net/ubrowser/moc_httpcomm.cpp
@@ -1,52 +1,52 @@
1/**************************************************************************** 1/****************************************************************************
2** HttpComm meta object code from reading C++ file 'httpcomm.h' 2** HttpComm meta object code from reading C++ file 'httpcomm.h'
3** 3**
4** Created: Fri Jul 19 21:08:51 2002 4** Created: Thu Jul 25 10:24:04 2002
5** by: The Qt MOC ($Id$) 5** by: The Qt MOC ($Id$)
6** 6**
7** WARNING! All changes made in this file will be lost! 7** WARNING! All changes made in this file will be lost!
8*****************************************************************************/ 8*****************************************************************************/
9 9
10#if !defined(Q_MOC_OUTPUT_REVISION) 10#if !defined(Q_MOC_OUTPUT_REVISION)
11#define Q_MOC_OUTPUT_REVISION 9 11#define Q_MOC_OUTPUT_REVISION 9
12#elif Q_MOC_OUTPUT_REVISION != 9 12#elif Q_MOC_OUTPUT_REVISION != 9
13#error "Moc format conflict - please regenerate all moc files" 13#error "Moc format conflict - please regenerate all moc files"
14#endif 14#endif
15 15
16#include "httpcomm.h" 16#include "httpcomm.h"
17#include <qmetaobject.h> 17#include <qmetaobject.h>
18#include <qapplication.h> 18#include <qapplication.h>
19 19
20 20
21 21
22const char *HttpComm::className() const 22const char *HttpComm::className() const
23{ 23{
24 return "HttpComm"; 24 return "HttpComm";
25} 25}
26 26
27QMetaObject *HttpComm::metaObj = 0; 27QMetaObject *HttpComm::metaObj = 0;
28 28
29void HttpComm::initMetaObject() 29void HttpComm::initMetaObject()
30{ 30{
31 if ( metaObj ) 31 if ( metaObj )
32 return; 32 return;
33 if ( qstrcmp(QObject::className(), "QObject") != 0 ) 33 if ( qstrcmp(QObject::className(), "QObject") != 0 )
34 badSuperclassWarning("HttpComm","QObject"); 34 badSuperclassWarning("HttpComm","QObject");
35 (void) staticMetaObject(); 35 (void) staticMetaObject();
36} 36}
37 37
38#ifndef QT_NO_TRANSLATION 38#ifndef QT_NO_TRANSLATION
39 39
40QString HttpComm::tr(const char* s) 40QString HttpComm::tr(const char* s)
41{ 41{
42 return qApp->translate( "HttpComm", s, 0 ); 42 return qApp->translate( "HttpComm", s, 0 );
43} 43}
44 44
45QString HttpComm::tr(const char* s, const char * c) 45QString HttpComm::tr(const char* s, const char * c)
46{ 46{
47 return qApp->translate( "HttpComm", s, c ); 47 return qApp->translate( "HttpComm", s, c );
48} 48}
49 49
50#endif // QT_NO_TRANSLATION 50#endif // QT_NO_TRANSLATION
51 51
52QMetaObject* HttpComm::staticMetaObject() 52QMetaObject* HttpComm::staticMetaObject()
diff --git a/noncore/net/ubrowser/moc_mainview.cpp b/noncore/net/ubrowser/moc_mainview.cpp
index 9af282b..a188e12 100644
--- a/noncore/net/ubrowser/moc_mainview.cpp
+++ b/noncore/net/ubrowser/moc_mainview.cpp
@@ -1,52 +1,52 @@
1/**************************************************************************** 1/****************************************************************************
2** MainView meta object code from reading C++ file 'mainview.h' 2** MainView meta object code from reading C++ file 'mainview.h'
3** 3**
4** Created: Fri Jul 19 21:08:51 2002 4** Created: Thu Jul 25 10:24:03 2002
5** by: The Qt MOC ($Id$) 5** by: The Qt MOC ($Id$)
6** 6**
7** WARNING! All changes made in this file will be lost! 7** WARNING! All changes made in this file will be lost!
8*****************************************************************************/ 8*****************************************************************************/
9 9
10#if !defined(Q_MOC_OUTPUT_REVISION) 10#if !defined(Q_MOC_OUTPUT_REVISION)
11#define Q_MOC_OUTPUT_REVISION 9 11#define Q_MOC_OUTPUT_REVISION 9
12#elif Q_MOC_OUTPUT_REVISION != 9 12#elif Q_MOC_OUTPUT_REVISION != 9
13#error "Moc format conflict - please regenerate all moc files" 13#error "Moc format conflict - please regenerate all moc files"
14#endif 14#endif
15 15
16#include "mainview.h" 16#include "mainview.h"
17#include <qmetaobject.h> 17#include <qmetaobject.h>
18#include <qapplication.h> 18#include <qapplication.h>
19 19
20 20
21 21
22const char *MainView::className() const 22const char *MainView::className() const
23{ 23{
24 return "MainView"; 24 return "MainView";
25} 25}
26 26
27QMetaObject *MainView::metaObj = 0; 27QMetaObject *MainView::metaObj = 0;
28 28
29void MainView::initMetaObject() 29void MainView::initMetaObject()
30{ 30{
31 if ( metaObj ) 31 if ( metaObj )
32 return; 32 return;
33 if ( qstrcmp(QMainWindow::className(), "QMainWindow") != 0 ) 33 if ( qstrcmp(QMainWindow::className(), "QMainWindow") != 0 )
34 badSuperclassWarning("MainView","QMainWindow"); 34 badSuperclassWarning("MainView","QMainWindow");
35 (void) staticMetaObject(); 35 (void) staticMetaObject();
36} 36}
37 37
38#ifndef QT_NO_TRANSLATION 38#ifndef QT_NO_TRANSLATION
39 39
40QString MainView::tr(const char* s) 40QString MainView::tr(const char* s)
41{ 41{
42 return qApp->translate( "MainView", s, 0 ); 42 return qApp->translate( "MainView", s, 0 );
43} 43}
44 44
45QString MainView::tr(const char* s, const char * c) 45QString MainView::tr(const char* s, const char * c)
46{ 46{
47 return qApp->translate( "MainView", s, c ); 47 return qApp->translate( "MainView", s, c );
48} 48}
49 49
50#endif // QT_NO_TRANSLATION 50#endif // QT_NO_TRANSLATION
51 51
52QMetaObject* MainView::staticMetaObject() 52QMetaObject* MainView::staticMetaObject()