summaryrefslogtreecommitdiff
authorspiralman <spiralman>2003-03-15 16:00:23 (UTC)
committer spiralman <spiralman>2003-03-15 16:00:23 (UTC)
commitede78d4ab60d2c78427c4b1cc51cd9accc0aed1c (patch) (unidiff)
treea1623ce4aad6b61e121e4e6fdbfe45b9ec38173f
parent90c05874265e7047c0ca933a43c433eb0d7f04e4 (diff)
downloadopie-ede78d4ab60d2c78427c4b1cc51cd9accc0aed1c.zip
opie-ede78d4ab60d2c78427c4b1cc51cd9accc0aed1c.tar.gz
opie-ede78d4ab60d2c78427c4b1cc51cd9accc0aed1c.tar.bz2
added code to force QTextBrowser to parse input as html if http header claims thats what it is (it was having problems autodetecting on certain pages)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpfactory.cpp5
-rw-r--r--noncore/net/ubrowser/httpfactory.h4
2 files changed, 7 insertions, 2 deletions
diff --git a/noncore/net/ubrowser/httpfactory.cpp b/noncore/net/ubrowser/httpfactory.cpp
index 0586e96..4ace4cb 100644
--- a/noncore/net/ubrowser/httpfactory.cpp
+++ b/noncore/net/ubrowser/httpfactory.cpp
@@ -162,128 +162,133 @@ const QMimeSource * HttpFactory::data(const QString &abs_name) const
162 image->setImage( QImage( data ) ); 162 image->setImage( QImage( data ) );
163 return image; 163 return image;
164 } 164 }
165} 165}
166 166
167const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const 167const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const
168{ 168{
169 printf("HttpFactory::data: using relative data func\n"); 169 printf("HttpFactory::data: using relative data func\n");
170 170
171 if(abs_or_rel_name.startsWith(context)) 171 if(abs_or_rel_name.startsWith(context))
172 { 172 {
173 return data(abs_or_rel_name); 173 return data(abs_or_rel_name);
174 } 174 }
175 else 175 else
176 { 176 {
177 return data(context + abs_or_rel_name); 177 return data(context + abs_or_rel_name);
178 } 178 }
179 179
180 return 0; 180 return 0;
181} 181}
182 182
183const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const 183const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const
184{ 184{
185 QByteArray inputBin( 1 ); 185 QByteArray inputBin( 1 );
186 QByteArray conClosedErr( 27 ); 186 QByteArray conClosedErr( 27 );
187 char conClosedErrMsg[] = "Connection to server closed"; 187 char conClosedErrMsg[] = "Connection to server closed";
188 QString currentLine; 188 QString currentLine;
189 bool done=false, chunked=false; 189 bool done=false, chunked=false;
190 int dataLength = 0; 190 int dataLength = 0;
191 191
192 for( int i = 0; i < 27; i++) 192 for( int i = 0; i < 27; i++)
193 { 193 {
194 conClosedErr[i] = conClosedErrMsg[i]; 194 conClosedErr[i] = conClosedErrMsg[i];
195 } 195 }
196 196
197 while( !done ) 197 while( !done )
198 { 198 {
199 recv( sockfd, inputBin.data(), inputBin.size(), 0 ); 199 recv( sockfd, inputBin.data(), inputBin.size(), 0 );
200 currentLine += *(inputBin.data()); 200 currentLine += *(inputBin.data());
201 201
202 if( *(inputBin.data()) == '\n' ) 202 if( *(inputBin.data()) == '\n' )
203 { 203 {
204 if( currentLine.isEmpty() || currentLine.startsWith( "\r") ) 204 if( currentLine.isEmpty() || currentLine.startsWith( "\r") )
205 { 205 {
206 printf( "HttpFactory::processResponse: end of header\n" ); 206 printf( "HttpFactory::processResponse: end of header\n" );
207 if( chunked ) 207 if( chunked )
208 { 208 {
209 return recieveChunked( sockfd ); 209 return recieveChunked( sockfd );
210 } else { 210 } else {
211 return recieveNormal( sockfd, dataLength ); 211 return recieveNormal( sockfd, dataLength );
212 } 212 }
213 done = true; 213 done = true;
214 } 214 }
215 215
216 if( currentLine.contains( "Transfer-Encoding: chunked", false) >= 1 ) 216 if( currentLine.contains( "Transfer-Encoding: chunked", false) >= 1 )
217 { 217 {
218 chunked = true; 218 chunked = true;
219 printf( "HttpFactory::processResponse: chunked encoding\n" ); 219 printf( "HttpFactory::processResponse: chunked encoding\n" );
220 } 220 }
221 221
222 if( currentLine.contains( "Content-Type: text", false ) >= 1 ) 222 if( currentLine.contains( "Content-Type: text", false ) >= 1 )
223 { 223 {
224 isText = true; 224 isText = true;
225 printf( "HttpFactory::processResponse: content type text\n" ); 225 printf( "HttpFactory::processResponse: content type text\n" );
226 if( currentLine.contains( "html", false ) )
227 {
228 browser->setTextFormat(Qt::RichText);
229 printf( "HttpFactory::processResponse: content type html\n" );
230 }
226 } 231 }
227 232
228 if( currentLine.contains( "Content-Type: image", false ) >= 1 ) 233 if( currentLine.contains( "Content-Type: image", false ) >= 1 )
229 { 234 {
230 isText = false; 235 isText = false;
231 printf( "HttpFactory::processResponse: content type image\n" ); 236 printf( "HttpFactory::processResponse: content type image\n" );
232 } 237 }
233 238
234 if( currentLine.contains( "Content-Length", false ) >= 1 ) 239 if( currentLine.contains( "Content-Length", false ) >= 1 )
235 { 240 {
236 currentLine.remove( 0, 16 ); 241 currentLine.remove( 0, 16 );
237 dataLength = currentLine.toInt(); 242 dataLength = currentLine.toInt();
238 printf( "HttpFactory::processResponse: content length: %d\n", dataLength ); 243 printf( "HttpFactory::processResponse: content length: %d\n", dataLength );
239 } 244 }
240 245
241 currentLine = ""; 246 currentLine = "";
242 printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() ); 247 printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() );
243 } 248 }
244 } 249 }
245} 250}
246 251
247const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const 252const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const
248{ 253{
249 printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" ); 254 printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" );
250 255
251 QByteArray data( dataLen ); 256 QByteArray data( dataLen );
252 QByteArray temp( dataLen ); 257 QByteArray temp( dataLen );
253 int recieved, i; 258 int recieved, i;
254 259
255 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 260 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
256 printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() ); 261 printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() );
257 for( i = 0; i < recieved; i++ ) 262 for( i = 0; i < recieved; i++ )
258 { 263 {
259 data[i] = temp[i]; 264 data[i] = temp[i];
260 } 265 }
261 dataLen -= recieved; 266 dataLen -= recieved;
262 while( dataLen > 0 ) 267 while( dataLen > 0 )
263 { 268 {
264 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 269 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
265 dataLen -= recieved; 270 dataLen -= recieved;
266 // printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() ); 271 // printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() );
267 for( int j = 0; j < recieved; j++ ) 272 for( int j = 0; j < recieved; j++ )
268 { 273 {
269 data[i] = temp[j]; 274 data[i] = temp[j];
270 i++; 275 i++;
271 } 276 }
272 temp.fill('\0'); 277 temp.fill('\0');
273 } 278 }
274 279
275 printf( "HttpFactory::recieveNormal: end of data\n" ); 280 printf( "HttpFactory::recieveNormal: end of data\n" );
276 return data; 281 return data;
277} 282}
278 283
279const QByteArray HttpFactory::recieveChunked( int sockfd ) const 284const QByteArray HttpFactory::recieveChunked( int sockfd ) const
280{ 285{
281 printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" ); 286 printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" );
282 287
283 QByteArray data; 288 QByteArray data;
284 QByteArray temp( 1 ); 289 QByteArray temp( 1 );
285 int recieved, i = 0, cSize = 0; 290 int recieved, i = 0, cSize = 0;
286 QString cSizeS; 291 QString cSizeS;
287 292
288 printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 293 printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
289 recv( sockfd, temp.data(), temp.size(), 0 ); 294 recv( sockfd, temp.data(), temp.size(), 0 );
diff --git a/noncore/net/ubrowser/httpfactory.h b/noncore/net/ubrowser/httpfactory.h
index 214120c..ec59ebb 100644
--- a/noncore/net/ubrowser/httpfactory.h
+++ b/noncore/net/ubrowser/httpfactory.h
@@ -1,51 +1,51 @@
1/* 1/*
2Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing 2Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
3Copyright (C) 2002 Thomas Stephens 3Copyright (C) 2002 Thomas Stephens
4 4
5This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public 5This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
6License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later 6License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
7version. 7version.
8 8
9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 9This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
10implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 10implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
11Public License for more details. 11Public License for more details.
12 12
13You should have received a copy of the GNU General Public License along with this program; if not, write to the Free 13You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
14Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 14Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15*/ 15*/
16 16
17#include <qmime.h> 17#include <qmime.h>
18//#include <qsocket.h> 18//#include <qsocket.h>
19#include <qstring.h> 19#include <qstring.h>
20#include <qdragobject.h> 20#include <qdragobject.h>
21#include <qtextbrowser.h> 21#include <qtextbrowser.h>
22#include <qmessagebox.h> 22#include <qmessagebox.h>
23 23
24#include <stdio.h> 24#include <stdio.h>
25 25
26#include <sys/types.h> 26#include <sys/types.h>
27#include <sys/socket.h> 27#include <sys/socket.h>
28#include <unistd.h> 28#include <unistd.h>
29#include <netinet/in.h> 29#include <netinet/in.h>
30#include <netdb.h> 30#include <netdb.h>
31#include <arpa/inet.h> 31#include <arpa/inet.h>
32 32
33#include "httpcomm.h" 33//#include "httpcomm.h"
34 34
35class HttpFactory : public QMimeSourceFactory 35class HttpFactory : public QMimeSourceFactory
36{ 36{
37public: 37public:
38 HttpFactory(QTextBrowser *newBrowser); 38 HttpFactory(QTextBrowser *newBrowser);
39 const QMimeSource * data(const QString &abs_name) const; 39 const QMimeSource * data(const QString &abs_name) const;
40 const QMimeSource * data(const QString &abs_or_rel_name, const QString & context) const; 40 const QMimeSource * data(const QString &abs_or_rel_name, const QString & context) const;
41private: 41private:
42 //QSocket *socket; 42 //QSocket *socket;
43 HttpComm *comm; 43 //HttpComm *comm;
44 QTextDrag *text; 44 QTextDrag *text;
45 QImageDrag *image; 45 QImageDrag *image;
46 QTextBrowser *browser; 46 QTextBrowser *browser;
47 47
48 const QByteArray processResponse( int sockfd, bool &isText) const; 48 const QByteArray processResponse( int sockfd, bool &isText) const;
49 const QByteArray recieveNormal( int sockfd, int dataLen ) const; 49 const QByteArray recieveNormal( int sockfd, int dataLen ) const;
50 const QByteArray recieveChunked( int sockfd ) const; 50 const QByteArray recieveChunked( int sockfd ) const;
51}; 51};