summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpfactory.cpp40
-rw-r--r--noncore/net/ubrowser/main.cpp4
-rw-r--r--noncore/net/ubrowser/mainview.cpp24
-rw-r--r--noncore/net/ubrowser/mainview.h2
4 files changed, 44 insertions, 26 deletions
diff --git a/noncore/net/ubrowser/httpfactory.cpp b/noncore/net/ubrowser/httpfactory.cpp
index 154d5d0..b57149f 100644
--- a/noncore/net/ubrowser/httpfactory.cpp
+++ b/noncore/net/ubrowser/httpfactory.cpp
@@ -1,376 +1,376 @@
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 "httpfactory.h" 17#include "httpfactory.h"
18 18
19HttpFactory::HttpFactory(QTextBrowser *newBrowser):QMimeSourceFactory() 19HttpFactory::HttpFactory(QTextBrowser *newBrowser):QMimeSourceFactory()
20{ 20{
21 //socket = new QSocket; 21 //socket = new QSocket;
22 text = new QTextDrag; 22 text = new QTextDrag;
23 browser=newBrowser; 23 browser=newBrowser;
24 //comm = new HttpComm(socket, browser); 24 //comm = new HttpComm(socket, browser);
25 image = new QImageDrag; 25 image = new QImageDrag;
26} 26}
27 27
28const QMimeSource * HttpFactory::data(const QString &abs_name) const 28const QMimeSource * HttpFactory::data(const QString &abs_name) const
29{ 29{
30 printf("HttpFactory::data: using absolute data func\n"); 30 printf("HttpFactory::data: using absolute data func\n");
31 31
32 int port=80, addrEnd, portSep; 32 int port=80, addrEnd, portSep;
33 QString host, file, portS, name, tempString; 33 QString host, file, portS, name, tempString;
34 bool done=false, isText=true; 34 bool done=false, isText=true;
35 35
36 //comm->setUp((QString *)&abs_name); 36 //comm->setUp((QString *)&abs_name);
37 37
38 name = abs_name; 38 name = abs_name;
39 //name = name.lower(); 39 //name = name.lower();
40 name = name.stripWhiteSpace(); 40 name = name.stripWhiteSpace();
41 41
42 printf("%s\n", name.latin1()); 42 //printf("%s\n", name.latin1());
43 43
44 if(name.startsWith("http://")) 44 if(name.startsWith("http://"))
45 { 45 {
46 name = name.remove(0, 7); 46 name = name.remove(0, 7);
47 } 47 }
48 else 48 else
49 { 49 {
50 name.prepend(browser->context()); 50 name.prepend(browser->context());
51 name = name.remove(0, 7); 51 name = name.remove(0, 7);
52 } 52 }
53 53
54 addrEnd = name.find('/'); 54 addrEnd = name.find('/');
55 if(addrEnd == -1) 55 if(addrEnd == -1)
56 { 56 {
57 name += '/'; 57 name += '/';
58 addrEnd = name.length()-1; 58 addrEnd = name.length()-1;
59 } 59 }
60 60
61 host = name; 61 host = name;
62 file = name; 62 file = name;
63 63
64 host.truncate(addrEnd); 64 host.truncate(addrEnd);
65 file.remove(0, addrEnd); 65 file.remove(0, addrEnd);
66 66
67 portSep = host.find(':'); 67 portSep = host.find(':');
68 if(portSep != -1) 68 if(portSep != -1)
69 { 69 {
70 portS=host; 70 portS=host;
71 host.truncate(portSep); 71 host.truncate(portSep);
72 portS.remove(0, portSep+1); 72 portS.remove(0, portSep+1);
73 port = portS.toInt(); 73 port = portS.toInt();
74 } 74 }
75 75
76 printf("%s %s %d\n", host.latin1(), file.latin1(), port); 76 //printf("%s %s %d\n", host.latin1(), file.latin1(), port);
77 77
78 if(port == 80) 78 if(port == 80)
79 { 79 {
80 portS="80"; 80 portS="80";
81 } 81 }
82 82
83 //if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1) 83 //if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1)
84 //{ 84 //{
85 // isImage=true; 85 // isImage=true;
86 //} 86 //}
87 87
88 //comm->setStuff(host, portS, file, text, image, isImage); 88 //comm->setStuff(host, portS, file, text, image, isImage);
89 89
90 //socket->connectToHost(host, port); 90 //socket->connectToHost(host, port);
91 91
92 int con, bytesSent; 92 int con, bytesSent;
93 struct sockaddr_in serverAddr; 93 struct sockaddr_in serverAddr;
94 struct hostent * serverInfo = gethostbyname( host.latin1() ); 94 struct hostent * serverInfo = gethostbyname( host.latin1() );
95 95
96 if( serverInfo == NULL ) 96 if( serverInfo == NULL )
97 { 97 {
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 ) >= 1) 226 if( currentLine.contains( "html", false ) >= 1)
227 { 227 {
228 browser->setTextFormat(Qt::RichText); 228 browser->setTextFormat(Qt::RichText);
229 printf( "HttpFactory::processResponse: content type html\n" ); 229 // printf( "HttpFactory::processResponse: content type html\n" );
230 } 230 }
231 } 231 }
232 232
233 if( currentLine.contains( "Content-Type: image", false ) >= 1 ) 233 if( currentLine.contains( "Content-Type: image", false ) >= 1 )
234 { 234 {
235 isText = false; 235 isText = false;
236 printf( "HttpFactory::processResponse: content type image\n" ); 236 // printf( "HttpFactory::processResponse: content type image\n" );
237 } 237 }
238 238
239 if( currentLine.contains( "Content-Length", false ) >= 1 ) 239 if( currentLine.contains( "Content-Length", false ) >= 1 )
240 { 240 {
241 currentLine.remove( 0, 16 ); 241 currentLine.remove( 0, 16 );
242 dataLength = currentLine.toInt(); 242 dataLength = currentLine.toInt();
243 printf( "HttpFactory::processResponse: content length: %d\n", dataLength ); 243 // printf( "HttpFactory::processResponse: content length: %d\n", dataLength );
244 } 244 }
245 245
246 if( currentLine.contains( "404", false ) >= 1 ) 246 if( currentLine.contains( "404", false ) >= 1 )
247 { 247 {
248 printf( "HttpFactory::processResponse: 404 error\n" ); 248 // printf( "HttpFactory::processResponse: 404 error\n" );
249 return 0; 249 return 0;
250 } 250 }
251 251
252 currentLine = ""; 252 currentLine = "";
253 printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() ); 253 // printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() );
254 } 254 }
255 } 255 }
256} 256}
257 257
258const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const 258const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const
259{ 259{
260 printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" ); 260 //printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" );
261 261
262 QByteArray data( dataLen ); 262 QByteArray data( dataLen );
263 QByteArray temp( dataLen ); 263 QByteArray temp( dataLen );
264 int recieved, i; 264 int recieved, i;
265 265
266 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 266 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
267 //printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() ); 267 //printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() );
268 for( i = 0; i < recieved; i++ ) 268 for( i = 0; i < recieved; i++ )
269 { 269 {
270 data[i] = temp[i]; 270 data[i] = temp[i];
271 } 271 }
272 dataLen -= recieved; 272 dataLen -= recieved;
273 while( dataLen > 0 ) 273 while( dataLen > 0 )
274 { 274 {
275 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 275 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
276 dataLen -= recieved; 276 dataLen -= recieved;
277 // printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() ); 277 // printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() );
278 for( int j = 0; j < recieved; j++ ) 278 for( int j = 0; j < recieved; j++ )
279 { 279 {
280 data[i] = temp[j]; 280 data[i] = temp[j];
281 i++; 281 i++;
282 } 282 }
283 temp.fill('\0'); 283 temp.fill('\0');
284 } 284 }
285 285
286 printf( "HttpFactory::recieveNormal: end of data\n" ); 286 //printf( "HttpFactory::recieveNormal: end of data\n" );
287 return data; 287 return data;
288} 288}
289 289
290const QByteArray HttpFactory::recieveChunked( int sockfd ) const 290const QByteArray HttpFactory::recieveChunked( int sockfd ) const
291{ 291{
292 printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" ); 292 //printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" );
293 293
294 QByteArray data; 294 QByteArray data;
295 QByteArray temp( 1 ); 295 QByteArray temp( 1 );
296 int recieved, i = 0, cSize = 0; 296 int recieved, i = 0, cSize = 0;
297 QString cSizeS; 297 QString cSizeS;
298 298
299 //printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 299 //printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
300 recv( sockfd, temp.data(), temp.size(), 0 ); 300 recv( sockfd, temp.data(), temp.size(), 0 );
301 while( *(temp.data()) != '\n' && *(temp.data()) != ';' ) 301 while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
302 { 302 {
303 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 303 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
304 // printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] ); 304 // printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] );
305 cSizeS += temp[0]; 305 cSizeS += temp[0];
306 recv( sockfd, temp.data(), temp.size(), 0 ); 306 recv( sockfd, temp.data(), temp.size(), 0 );
307 } 307 }
308 308
309 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() ); 309 //printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
310 cSize = cSizeS.toInt( 0, 16 ); 310 cSize = cSizeS.toInt( 0, 16 );
311 printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize ); 311 //printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize );
312 312
313 if( *(temp.data()) == ';' ) 313 if( *(temp.data()) == ';' )
314 { 314 {
315 while( *(temp.data()) != '\n' ) 315 while( *(temp.data()) != '\n' )
316 { 316 {
317 recv( sockfd, temp.data(), temp.size(), 0 ); 317 recv( sockfd, temp.data(), temp.size(), 0 );
318 } 318 }
319 } 319 }
320 320
321 temp.fill( '\0', cSize ); 321 temp.fill( '\0', cSize );
322 data.fill( '\0', cSize ); 322 data.fill( '\0', cSize );
323 323
324 while( cSize > 0 ) 324 while( cSize > 0 )
325 { 325 {
326 while( cSize > 0 ) 326 while( cSize > 0 )
327 { 327 {
328 recieved = recv( sockfd, temp.data(), temp.size(), 0 ); 328 recieved = recv( sockfd, temp.data(), temp.size(), 0 );
329 cSize -= recieved; 329 cSize -= recieved;
330 for( int j = 0; j < recieved; j++ ) 330 for( int j = 0; j < recieved; j++ )
331 { 331 {
332 data[i] = temp[j]; 332 data[i] = temp[j];
333 i++; 333 i++;
334 } 334 }
335 temp.fill('\0', cSize); 335 temp.fill('\0', cSize);
336 } 336 }
337 337
338 // printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() ); 338 // printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() );
339 339
340 temp.fill('\0', 1); 340 temp.fill('\0', 1);
341 cSizeS = ""; 341 cSizeS = "";
342 cSize = 0; 342 cSize = 0;
343 343
344 recv( sockfd, temp.data(), temp.size(), 0 ); 344 recv( sockfd, temp.data(), temp.size(), 0 );
345 if( *(temp.data()) == '\r' ) 345 if( *(temp.data()) == '\r' )
346 { 346 {
347 recv( sockfd, temp.data(), temp.size(), 0 ); 347 recv( sockfd, temp.data(), temp.size(), 0 );
348 } 348 }
349 recv( sockfd, temp.data(), temp.size(), 0 ); 349 recv( sockfd, temp.data(), temp.size(), 0 );
350 while( *(temp.data()) != '\n' && *(temp.data()) != ';' ) 350 while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
351 { 351 {
352 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() ); 352 // printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
353 // printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] ); 353 // printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] );
354 cSizeS += temp[0]; 354 cSizeS += temp[0];
355 recv( sockfd, temp.data(), temp.size(), 0 ); 355 recv( sockfd, temp.data(), temp.size(), 0 );
356 } 356 }
357 357
358 printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() ); 358 // printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
359 cSize = cSizeS.toInt( 0, 16 ); 359 cSize = cSizeS.toInt( 0, 16 );
360 printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize ); 360 // printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize );
361 361
362 if( *(temp.data()) == ';' ) 362 if( *(temp.data()) == ';' )
363 { 363 {
364 while( *(temp.data()) != '\n' ) 364 while( *(temp.data()) != '\n' )
365 { 365 {
366 recv( sockfd, temp.data(), temp.size(), 0 ); 366 recv( sockfd, temp.data(), temp.size(), 0 );
367 } 367 }
368 } 368 }
369 369
370 temp.fill( '\0', cSize ); 370 temp.fill( '\0', cSize );
371 data.resize( data.size() + cSize ); 371 data.resize( data.size() + cSize );
372 } 372 }
373 373
374 printf( "HttpFactory::recieveChunked: end of data\n" ); 374 //printf( "HttpFactory::recieveChunked: end of data\n" );
375 return data; 375 return data;
376} 376}
diff --git a/noncore/net/ubrowser/main.cpp b/noncore/net/ubrowser/main.cpp
index fe0f243..e4a873d 100644
--- a/noncore/net/ubrowser/main.cpp
+++ b/noncore/net/ubrowser/main.cpp
@@ -1,29 +1,29 @@
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 <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
18 18
19#include "mainview.h" 19#include "mainview.h"
20 20
21int main( int argc, char **argv ) 21int main( int argc, char **argv )
22{ 22{
23 QPEApplication a( argc, argv ); 23 QPEApplication a( argc, argv );
24 MainView w; 24 MainView w;
25 25
26 a.setMainWidget( &w ); 26 //a.setMainWidget( &w );
27 w.showMaximized(); 27 a.showMainDocumentWidget( &w );
28 return a.exec(); 28 return a.exec();
29} 29}
diff --git a/noncore/net/ubrowser/mainview.cpp b/noncore/net/ubrowser/mainview.cpp
index d3f4c57..f68c5db 100644
--- a/noncore/net/ubrowser/mainview.cpp
+++ b/noncore/net/ubrowser/mainview.cpp
@@ -1,105 +1,121 @@
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 17
18#include "mainview.h" 18#include "mainview.h"
19 19
20MainView::MainView(QWidget *parent, const char *name) : QMainWindow(parent, name) 20MainView::MainView(QWidget *parent, const char *name) : QMainWindow(parent, name)
21{ 21{
22 setIcon( Resource::loadPixmap( "remote" ) ); 22 setIcon( Resource::loadPixmap( "remote" ) );
23 setCaption("uBrowser"); 23 setCaption("uBrowser");
24 24
25 setToolBarsMovable( false ); 25 setToolBarsMovable( false );
26 26
27 QPEToolBar *toolbar = new QPEToolBar(this, "toolbar"); 27 QPEToolBar *toolbar = new QPEToolBar(this, "toolbar");
28 back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back"); 28 back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back");
29 forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward"); 29 forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward");
30 home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home"); 30 home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home");
31 location = new QComboBox(true, toolbar, "location"); 31 location = new QComboBox(true, toolbar, "location");
32 go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go"); 32 go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go");
33 33
34 toolbar->setStretchableWidget(location); 34 toolbar->setStretchableWidget(location);
35 toolbar->setHorizontalStretchable(true); 35 toolbar->setHorizontalStretchable(true);
36 location->setAutoCompletion( true );
36 37
37 addToolBar(toolbar); 38 addToolBar(toolbar);
38 39
39 browser = new QTextBrowser(this, "browser"); 40 browser = new QTextBrowser(this, "browser");
40 setCentralWidget(browser); 41 setCentralWidget(browser);
41 42
42//make the button take you to the location 43//make the button take you to the location
43 connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) ); 44 connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) );
44 connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) ); 45 connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) );
45 46
46//make back, forward and home do their thing (isnt QTextBrowser great?) 47//make back, forward and home do their thing (isnt QTextBrowser great?)
47 connect(back, SIGNAL(clicked()), browser, SLOT(backward()) ); 48 connect(back, SIGNAL(clicked()), browser, SLOT(backward()) );
48 connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) ); 49 connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) );
49 connect(home, SIGNAL(clicked()), browser, SLOT(home()) ); 50 connect(home, SIGNAL(clicked()), browser, SLOT(home()) );
50 51
51//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser) 52//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser)
52//this doesnt seem to work, but doesnt break anything either... 53//this doesnt seem to work, but doesnt break anything either...
53 connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) ); 54 connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) );
54 connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) ); 55 connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) );
55 56
56//notify me when the text of the browser has changed (like when the user clicks a link) 57//notify me when the text of the browser has changed (like when the user clicks a link)
57 connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) ); 58 connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) );
58 59
59 http = new HttpFactory(browser); 60 http = new HttpFactory(browser);
60 61
61 if( qApp->argc() > 1 ) 62 if( qApp->argc() > 1 )
62 { 63 {
63 char **argv = qApp->argv(); 64 char **argv = qApp->argv();
64 QString *argv1 = new QString( argv[1] ); 65 int i = 0;
65 if( !argv1->startsWith( "http://" ) && !argv1->startsWith( "/" ) ) 66 QString *openfile = new QString( argv[0] );
67 while( openfile->contains( "ubrowser" ) == 0 && i < qApp->argc() )
66 { 68 {
67 argv1->insert( 0, QDir::currentDirPath()+"/" ); 69 i++;
70 *openfile = argv[i];
68 } 71 }
69 location->setEditText( *argv1 ); 72 *openfile = argv[i+1];
73 if( !openfile->startsWith( "http://" ) && !openfile->startsWith( "/" ) )
74 {
75 openfile->insert( 0, QDir::currentDirPath()+"/" );
76 }
77 location->setEditText( *openfile );
70 goClicked(); 78 goClicked();
71 } 79 }
72} 80}
73 81
74void MainView::goClicked() 82void MainView::goClicked()
75{ 83{
76 location->insertItem( location->currentText() ); 84 location->insertItem( location->currentText() );
77 85
78 if(location->currentText().startsWith("http://") ) 86 if(location->currentText().startsWith("http://") )
79 { 87 {
80 location->setEditText(location->currentText().lower()); 88 location->setEditText(location->currentText().lower());
81 browser->setMimeSourceFactory(http); 89 browser->setMimeSourceFactory(http);
82 printf("MainView::goClicked: using http source factory\n"); 90 printf("MainView::goClicked: using http source factory\n");
83 } 91 }
84 else 92 else
85 { 93 {
86 browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory()); 94 browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory());
87 printf("MainView::goClicked: using default source factory\n"); 95 printf("MainView::goClicked: using default source factory\n");
88 } 96 }
89 97
90 browser->setSource(location->currentText()); 98 browser->setSource(location->currentText());
91} 99}
92 100
93void MainView::textChanged() 101void MainView::textChanged()
94{ 102{
95 if(browser->documentTitle().isNull()) 103 if(browser->documentTitle().isNull())
96 { 104 {
97 setCaption(browser->source() + " - uBrowser"); 105 setCaption(browser->source() + " - uBrowser");
98 } 106 }
99 else 107 else
100 { 108 {
101 setCaption(browser->documentTitle() + " - uBrowser"); 109 setCaption(browser->documentTitle() + " - uBrowser");
102 } 110 }
103 111
104 location->setEditText(browser->source()); 112 location->setEditText(browser->source());
105} 113}
114
115void MainView::setDocument( const QString& applnk_filename )
116{
117 DocLnk *file = new DocLnk( applnk_filename );
118
119 location->setEditText( file->file() );
120 goClicked();
121}
diff --git a/noncore/net/ubrowser/mainview.h b/noncore/net/ubrowser/mainview.h
index 1a9b0db..20e2c70 100644
--- a/noncore/net/ubrowser/mainview.h
+++ b/noncore/net/ubrowser/mainview.h
@@ -1,50 +1,52 @@
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 <qpe/resource.h> 17#include <qpe/resource.h>
18#include <qpe/qpetoolbar.h> 18#include <qpe/qpetoolbar.h>
19#include <qpe/applnk.h>
19 20
20#include <qapplication.h> 21#include <qapplication.h>
21#include <qmainwindow.h> 22#include <qmainwindow.h>
22#include <qwidget.h> 23#include <qwidget.h>
23#include <qtextbrowser.h> 24#include <qtextbrowser.h>
24#include <qtoolbutton.h> 25#include <qtoolbutton.h>
25#include <qcombobox.h> 26#include <qcombobox.h>
26#include <qlayout.h> 27#include <qlayout.h>
27#include <qlineedit.h> 28#include <qlineedit.h>
28#include <qdir.h> 29#include <qdir.h>
29 30
30#include <stdio.h> 31#include <stdio.h>
31 32
32#include "httpfactory.h" 33#include "httpfactory.h"
33 34
34class MainView : public QMainWindow 35class MainView : public QMainWindow
35{ 36{
36 Q_OBJECT 37 Q_OBJECT
37public: 38public:
38 MainView(QWidget *parent=0, const char *name=0); 39 MainView(QWidget *parent=0, const char *name=0);
39public slots: 40public slots:
40 void goClicked(); 41 void goClicked();
41 void textChanged(); 42 void textChanged();
43 void setDocument( const QString& applnk_filename );
42private: 44private:
43 QToolButton *back; 45 QToolButton *back;
44 QToolButton *forward; 46 QToolButton *forward;
45 QToolButton *home; 47 QToolButton *home;
46 QToolButton *go; 48 QToolButton *go;
47 QComboBox *location; 49 QComboBox *location;
48 QTextBrowser *browser; 50 QTextBrowser *browser;
49 HttpFactory *http; 51 HttpFactory *http;
50}; 52};