summaryrefslogtreecommitdiff
Unidiff
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
@@ -98,256 +98,261 @@ const QMimeSource * HttpFactory::data(const QString &abs_name) const
98 QMessageBox *mb = new QMessageBox("Error!", 98 QMessageBox *mb = new QMessageBox("Error!",
99 "couldnt find ip address", 99 "couldnt find ip address",
100 QMessageBox::NoIcon, 100 QMessageBox::NoIcon,
101 QMessageBox::Ok, 101 QMessageBox::Ok,
102 QMessageBox::NoButton, 102 QMessageBox::NoButton,
103 QMessageBox::NoButton); 103 QMessageBox::NoButton);
104 mb->exec(); 104 mb->exec();
105 perror("HttpFactory::data:"); 105 perror("HttpFactory::data:");
106 return 0; 106 return 0;
107 } 107 }
108 108
109 QByteArray data; 109 QByteArray data;
110 printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) ); 110 printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
111 111
112 QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n"); 112 QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n");
113 113
114 con = socket( AF_INET, SOCK_STREAM, 0 ); 114 con = socket( AF_INET, SOCK_STREAM, 0 );
115 if( con == -1 ) 115 if( con == -1 )
116 { 116 {
117 QMessageBox *mb = new QMessageBox("Error!", 117 QMessageBox *mb = new QMessageBox("Error!",
118 "couldnt create socket", 118 "couldnt create socket",
119 QMessageBox::NoIcon, 119 QMessageBox::NoIcon,
120 QMessageBox::Ok, 120 QMessageBox::Ok,
121 QMessageBox::NoButton, 121 QMessageBox::NoButton,
122 QMessageBox::NoButton); 122 QMessageBox::NoButton);
123 mb->exec(); 123 mb->exec();
124 perror("HttpFactory::data:"); 124 perror("HttpFactory::data:");
125 return 0; 125 return 0;
126 } 126 }
127 127
128 serverAddr.sin_family = AF_INET; 128 serverAddr.sin_family = AF_INET;
129 serverAddr.sin_port = htons( port ); 129 serverAddr.sin_port = htons( port );
130 serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) ); 130 serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
131 memset( &(serverAddr.sin_zero), '\0', 8 ); 131 memset( &(serverAddr.sin_zero), '\0', 8 );
132 132
133 if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 ) 133 if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 )
134 { 134 {
135 QMessageBox *mb = new QMessageBox("Error!", 135 QMessageBox *mb = new QMessageBox("Error!",
136 "couldnt connect to socket", 136 "couldnt connect to socket",
137 QMessageBox::NoIcon, 137 QMessageBox::NoIcon,
138 QMessageBox::Ok, 138 QMessageBox::Ok,
139 QMessageBox::NoButton, 139 QMessageBox::NoButton,
140 QMessageBox::NoButton); 140 QMessageBox::NoButton);
141 mb->exec(); 141 mb->exec();
142 perror("HttpFactory::data:"); 142 perror("HttpFactory::data:");
143 return 0; 143 return 0;
144 } 144 }
145 145
146 146
147 bytesSent = send( con, request.latin1(), request.length(), 0); 147 bytesSent = send( con, request.latin1(), request.length(), 0);
148 printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() ); 148 printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() );
149 printf("HttpFactory::data: request sent:\n%s", request.latin1()); 149 printf("HttpFactory::data: request sent:\n%s", request.latin1());
150 150
151 data = this->processResponse( con, isText ); 151 data = this->processResponse( con, isText );
152 152
153 ::close( con ); 153 ::close( con );
154 154
155 if(isText) 155 if(isText)
156 { 156 {
157 text->setText( QString( data ) ); 157 text->setText( QString( data ) );
158 return text; 158 return text;
159 } 159 }
160 else 160 else
161 { 161 {
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 );
290 while( *(temp.data()) != '\n' && *(temp.data()) != ';' ) 295 while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
291 { 296 {
292 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 297 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
293 // printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] ); 298 // printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] );
294 cSizeS += temp[0]; 299 cSizeS += temp[0];
295 recv( sockfd, temp.data(), temp.size(), 0 ); 300 recv( sockfd, temp.data(), temp.size(), 0 );
296 } 301 }
297 302
298 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() ); 303 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
299 cSize = cSizeS.toInt( 0, 16 ); 304 cSize = cSizeS.toInt( 0, 16 );
300 printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize ); 305 printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize );
301 306
302 if( *(temp.data()) == ';' ) 307 if( *(temp.data()) == ';' )
303 { 308 {
304 while( *(temp.data()) != '\n' ) 309 while( *(temp.data()) != '\n' )
305 { 310 {
306 recv( sockfd, temp.data(), temp.size(), 0 ); 311 recv( sockfd, temp.data(), temp.size(), 0 );
307 } 312 }
308 } 313 }
309 314
310 temp.fill( '\0', cSize ); 315 temp.fill( '\0', cSize );
311 data.fill( '\0', cSize ); 316 data.fill( '\0', cSize );
312 317
313 while( cSize > 0 ) 318 while( cSize > 0 )
314 { 319 {
315 while( cSize > 0 ) 320 while( cSize > 0 )
316 { 321 {
317 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 322 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
318 cSize -= recieved; 323 cSize -= recieved;
319 for( int j = 0; j < recieved; j++ ) 324 for( int j = 0; j < recieved; j++ )
320 { 325 {
321 data[i] = temp[j]; 326 data[i] = temp[j];
322 i++; 327 i++;
323 } 328 }
324 temp.fill('\0', cSize); 329 temp.fill('\0', cSize);
325 } 330 }
326 331
327 printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() ); 332 printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() );
328 333
329 temp.fill('\0', 1); 334 temp.fill('\0', 1);
330 cSizeS = ""; 335 cSizeS = "";
331 cSize = 0; 336 cSize = 0;
332 337
333 recv( sockfd, temp.data(), temp.size(), 0 ); 338 recv( sockfd, temp.data(), temp.size(), 0 );
334 if( *(temp.data()) == '\r' ) 339 if( *(temp.data()) == '\r' )
335 { 340 {
336 recv( sockfd, temp.data(), temp.size(), 0 ); 341 recv( sockfd, temp.data(), temp.size(), 0 );
337 } 342 }
338 recv( sockfd, temp.data(), temp.size(), 0 ); 343 recv( sockfd, temp.data(), temp.size(), 0 );
339 while( *(temp.data()) != '\n' && *(temp.data()) != ';' ) 344 while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
340 { 345 {
341 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 346 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
342 printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] ); 347 printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] );
343 cSizeS += temp[0]; 348 cSizeS += temp[0];
344 recv( sockfd, temp.data(), temp.size(), 0 ); 349 recv( sockfd, temp.data(), temp.size(), 0 );
345 } 350 }
346 351
347 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() ); 352 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
348 cSize = cSizeS.toInt( 0, 16 ); 353 cSize = cSizeS.toInt( 0, 16 );
349 printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize ); 354 printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize );
350 355
351 if( *(temp.data()) == ';' ) 356 if( *(temp.data()) == ';' )
352 { 357 {
353 while( *(temp.data()) != '\n' ) 358 while( *(temp.data()) != '\n' )
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};