author | spiralman <spiralman> | 2002-07-25 16:38:22 (UTC) |
---|---|---|
committer | spiralman <spiralman> | 2002-07-25 16:38:22 (UTC) |
commit | 11170a8b8c1a2755cb7d9416ea99fc5067d0c53d (patch) (unidiff) | |
tree | 0e2ea513139dfd146e8fe8f96f8fb791d2382e17 | |
parent | 8895e9bd55244f32f12ff619e020a23afac44808 (diff) | |
download | opie-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...
-rw-r--r-- | noncore/net/ubrowser/httpcomm.cpp | 11 | ||||
-rw-r--r-- | noncore/net/ubrowser/moc_httpcomm.cpp | 2 | ||||
-rw-r--r-- | noncore/net/ubrowser/moc_mainview.cpp | 2 |
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 | ||
244 | void HttpComm::connectionClosed() | 245 | void 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 | ||
250 | void HttpComm::parseHeader() | 251 | void 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 | ||
280 | void HttpComm::processBody() | 281 | void 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 | ||
22 | const char *HttpComm::className() const | 22 | const char *HttpComm::className() const |
23 | { | 23 | { |
24 | return "HttpComm"; | 24 | return "HttpComm"; |
25 | } | 25 | } |
26 | 26 | ||
27 | QMetaObject *HttpComm::metaObj = 0; | 27 | QMetaObject *HttpComm::metaObj = 0; |
28 | 28 | ||
29 | void HttpComm::initMetaObject() | 29 | void 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 | ||
40 | QString HttpComm::tr(const char* s) | 40 | QString 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 | ||
45 | QString HttpComm::tr(const char* s, const char * c) | 45 | QString 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 | ||
52 | QMetaObject* HttpComm::staticMetaObject() | 52 | QMetaObject* 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 | ||
22 | const char *MainView::className() const | 22 | const char *MainView::className() const |
23 | { | 23 | { |
24 | return "MainView"; | 24 | return "MainView"; |
25 | } | 25 | } |
26 | 26 | ||
27 | QMetaObject *MainView::metaObj = 0; | 27 | QMetaObject *MainView::metaObj = 0; |
28 | 28 | ||
29 | void MainView::initMetaObject() | 29 | void 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 | ||
40 | QString MainView::tr(const char* s) | 40 | QString 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 | ||
45 | QString MainView::tr(const char* s, const char * c) | 45 | QString 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 | ||
52 | QMetaObject* MainView::staticMetaObject() | 52 | QMetaObject* MainView::staticMetaObject() |