summaryrefslogtreecommitdiff
authorspiralman <spiralman>2003-03-15 15:27:49 (UTC)
committer spiralman <spiralman>2003-03-15 15:27:49 (UTC)
commit90c05874265e7047c0ca933a43c433eb0d7f04e4 (patch) (side-by-side diff)
treed86c5d52c226f2a873b3c5745716dcd5ee38de3d
parent2c53d85583ebece42b3b4c155540cd6a01542731 (diff)
downloadopie-90c05874265e7047c0ca933a43c433eb0d7f04e4.zip
opie-90c05874265e7047c0ca933a43c433eb0d7f04e4.tar.gz
opie-90c05874265e7047c0ca933a43c433eb0d7f04e4.tar.bz2
moved from using QSockets to normal unix sockets, images and chunked encoding **should** work <crosses fingers>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/ubrowser/httpcomm.cpp342
-rw-r--r--noncore/net/ubrowser/httpcomm.h61
-rw-r--r--noncore/net/ubrowser/httpfactory.cpp272
-rw-r--r--noncore/net/ubrowser/httpfactory.h16
-rw-r--r--noncore/net/ubrowser/ubrowser.pro4
5 files changed, 276 insertions, 419 deletions
diff --git a/noncore/net/ubrowser/httpcomm.cpp b/noncore/net/ubrowser/httpcomm.cpp
deleted file mode 100644
index 4f189ce..0000000
--- a/noncore/net/ubrowser/httpcomm.cpp
+++ b/dev/null
@@ -1,342 +0,0 @@
-/*
-Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
-Copyright (C) 2002 Thomas Stephens
-
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
-Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include "httpcomm.h"
-
-HttpComm::HttpComm(QSocket *newSocket, QTextBrowser *newBrowser):QObject()
-{
- socket = newSocket;
-
- connect(socket, SIGNAL(hostFound()), this, SLOT(hostFound()) );
- connect(socket, SIGNAL(connected()), this, SLOT(connected()) );
- connect(socket, SIGNAL(readyRead()), this, SLOT(incoming()) );
- connect(socket, SIGNAL(connectionClosed()), this, SLOT(connectionClosed()) );
-
- headerRead=false;
- length = 0;
- bRead = 0;
- chunked=false;
- lengthset=false;
-
- browser=newBrowser;
-}
-
-void HttpComm::setUp(QString *newName)
-{
- name = newName;
-}
-
-void HttpComm::setStuff(QString newHost, QString newPortS, QString newFile, QTextDrag *newText, QImageDrag *newImage, bool newIsImage)
-{
- host = newHost;
- portS = newPortS;
- file = newFile;
- text = newText;
- isImage = newIsImage;
- image = newImage;
-}
-
-void HttpComm::hostFound()
-{
- printf("HttpComm::hostFound: host found\n");
-}
-
-void HttpComm::connected()
-{
- QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n");
-// QString request("GET " + file + " HTTP/1.0\r\n\r\n");
- printf("HttpComm::data: bytes written: %d\n", socket->writeBlock(request.latin1(), request.length()) );
- printf("HttpComm::data: request sent:\n%s", request.latin1());
-
- headerRead=false;
- bRead=0;
- length = 0;
- header="";
- body="";
- chunked=false;
- lengthset=false;
-}
-
-void HttpComm::incoming()
-{
- int ba=socket->size(), i=0, j=0, semi=0;
- char *tempString = new char [ba];
- int br = socket->readBlock(tempString, ba);
- socket->flush();
- bool nextChunk=false;
- bool done=false;
- printf("HttpComm::incoming: ba: %d\n", ba);
- printf("HttpComm::incoming: bytes read from socket: %d\n", br);
-// printf("HttpComm::incoming: tempString length: %d\n");
- QString sclength;
-
- if(headerRead == false)
- {
- for(i=0; i<ba; i++)
- {
- if(tempString[i] != '\r')
- {
- if(tempString[i] == '\n' && header[header.length()-1] == '\n')
- {
- j=i;
- headerRead = true;
- parseHeader();
- goto body;
- }
- else
- {
- header+=tempString[i];
- }
- }
-// printf("%d %d\n", ba, i);
- }
- }
- else
- {
- body:
- printf("HttpComm::incoming: reading body\n");
- printf("HttpComm::incoming: j is: %d\n", j);
- if(!chunked)
- {
-//make sure we didnt just leave that break above...
- if(j != 0)
- {
- for( ; j<ba ; j++)
- {
- body+=tempString[j];
- bRead++;
-// printf("bRead1: %d\n", bRead);
- }
- }
- else
- {
- body += tempString;
- bRead+=ba;
-// printf("bRead2: %d\n", bRead);
- }
-
- if(bRead >= length)
- {
- printf("HttpComm::incoming: finished reading body\n");
- processBody();
- socket->close();
- }
- }
- else
- {
- int startclength=0;
- QString tempQString = tempString;
- //remove the http header, if one exists
- if(j != 0)
- {
- tempQString.remove(0, j+1);
- printf("HttpComm::incoming: removing http header. Result: \n%s", tempQString.latin1());
- }
- while(!done)
- {
- switch(status)
- {
- //case 0=need to read chunk length
- case 0:
- j = tempQString.find('\n');
- sclength = tempQString;
- sclength.truncate(j);
- clength = sclength.toUInt(0, 16);
- printf("HttpComm::Incoming: chunk length: %d\n", clength);
- printf("HttpComm::Incoming: chunk length string: %s\n", sclength.latin1());
- //end of data
- if(clength==0)
- {
- processBody();
- done=true;
- return;
- }
- //still more, but it hasnt been recieved yet
- if(ba <= j)
- {
- status=2;
- done=true;
- break;
- }
- //still more data waiting
- else
- {
- done=false;
- //remove the chunk length header
- tempQString.remove(0,j+1);
- }
- bRead=0;
-// break;
- //if there is more fall through to:
- //chunk length just read, still more in tempQstring
- case 1:
- //the current data extends beyond the end of the chunk
- if(bRead + tempQString.length() > clength)
- {
- QString newTQstring = tempQString;
- newTQstring.truncate(clength-bRead);
- bRead+=newTQstring.length();
- body+=newTQstring;
- printf("HttpComm::incoming: start new body piece 1: \n");
- printf("%s", newTQstring.latin1() );
- printf("HttpComm::incoming: end new body piece 1.\n");
- status=0;
- tempQString = tempQString.remove(0, newTQstring.length());
- startclength = tempQString.find('\n');
- printf("HttpComm::incoming: startclength: %d\n", startclength);
- tempQString = tempQString.remove(0, startclength+1);
- done=false;
-// break;
- }
- //the chunk extends beyond the current data;
- else
- {
- if(tempQString.length() <= ba)
- {
- printf("HttpComm::incoming: not truncating tempQString\n");
- body+=tempQString;
- bRead+=tempQString.length();
- }
- else
- {
- printf("HttpComm::incoming: truncating tempQString\n");
- tempQString.truncate(ba);
- body+=tempQString;
- bRead+=tempQString.length();
- }
- printf("HttpComm::incoming: start new body piece 2: \n");
- printf("%s", tempQString.latin1() );
- printf("HttpComm::incoming: end new body piece 2.\n");
- done=true;
- status=2;
-// break;
- }
- break;
- //just got data in, continue reading chunk
- case 2:
- //the current data extends beyond the end of the chunk
- if(bRead + tempQString.length() > clength)
- {
- QString newTQstring = tempQString;
- newTQstring.truncate(clength-bRead);
- bRead+=newTQstring.length();
- body+=newTQstring;
- printf("HttpComm::incoming: start new body piece 3: \n");
- printf("%s", newTQstring.latin1() );
- printf("HttpComm::incoming: end new body piece 3.\n");
- status=0;
- tempQString = tempQString.remove(0, newTQstring.length());
- startclength = tempQString.find('\n');
- printf("HttpComm::incoming: startclength, tempQString length: %d %d\n", startclength, tempQString.length());
- tempQString = tempQString.remove(0, startclength+1);
- done=false;
-// break;
- }
- //the chunk extends beyond the current data;
- else
- {
- if(tempQString.length() <= ba)
- {
- printf("HttpComm::incoming: not truncating tempQString\n");
- body+=tempQString;
- bRead+=tempQString.length();
- }
- else
- {
- printf("HttpComm::incoming: truncating tempQString\n");
- tempQString.truncate(ba);
- body+=tempQString;
- bRead+=tempQString.length();
- }
- printf("HttpComm::incoming: start new body piece 4: \n");
- printf("%s", tempQString.latin1() );
- printf("HttpComm::incoming: end new body piece 4.\n");
- done=true;
- status=2;
-// break;
- }
- break;
- }
- printf("HttpComm::incoming: chunked encoding: bRead: %d\n", bRead);
- }
- }
- }
- delete tempString;
-}
-
-void HttpComm::connectionClosed()
-{
- printf("HttpComm::connectionClosed: connection closed\n");
- processBody();
-}
-
-void HttpComm::parseHeader()
-{
- QStringList headerLines, tempList;
- int i;
-
- printf("HttpComm::parseHeader: start header\n\n");
- printf("%s", header.latin1());
- printf("HttpComm::parseHeader: end header\n");
-
- headerLines = QStringList::split('\n', header);
-
- for(i=0; i<headerLines.count(); i++)
- {
- if(headerLines[i].startsWith("Content-Length:") )
- {
- tempList = QStringList::split(':', headerLines[i]);
- tempList[1].stripWhiteSpace();
- length = tempList[1].toUInt();
- }
- else if(headerLines[i].startsWith("Transfer-Encoding: chunked") )
- {
- printf("HttpComm::parseHeader: using chunked encoding\n");
- chunked = true;
- status=0;
- }
- }
-
- printf("HttpConn::parseHeader: content-length: %d\n", length);
-}
-
-void HttpComm::processBody()
-{
- printf("HttpComm::processBody: processing body\n");
-// printf("HttpComm::processBody: start body\n\n");
-// printf("%s", body.latin1());
-// printf("HttpComm::processBody: end body\n");
-
- int lastSlash = file.findRev('/');
-
- QString end = file;
- end.truncate(lastSlash+1);
- QString context = "http://"+host+':'+portS+end;
- printf("HttpComm::processBody: context: %s\n", context.latin1() );
-
- if(!isImage)
- {
- browser->setTextFormat(RichText);
- browser->mimeSourceFactory()->setFilePath(context);
- browser->setText(body, context);
- }
- else
- {
- QImage tempImage(body.latin1());
- image->setImage(tempImage);
- browser->update();
- }
-}
diff --git a/noncore/net/ubrowser/httpcomm.h b/noncore/net/ubrowser/httpcomm.h
deleted file mode 100644
index d6f63fc..0000000
--- a/noncore/net/ubrowser/httpcomm.h
+++ b/dev/null
@@ -1,61 +0,0 @@
-/*
-Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
-Copyright (C) 2002 Thomas Stephens
-
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
-Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#include <qobject.h>
-#include <qstring.h>
-#include <qsocket.h>
-#include <qstringlist.h>
-#include <qdragobject.h>
-#include <qtextbrowser.h>
-#include <qcstring.h>
-#include <qimage.h>
-
-#include <stdio.h>
-
-class HttpComm : public QObject
-{
-Q_OBJECT
-public:
- HttpComm(QSocket *newSocket, QTextBrowser *newBrowser);
- void setUp(QString *newName);
- void setStuff(QString newHost, QString newPortS, QString newFile, QTextDrag *newText, QImageDrag *newImage, bool newIsImage);
- void parseHeader();
- void processBody();
-public slots:
- void hostFound();
- void connected();
- void connectionClosed();
- void incoming();
-private:
- QString *name;
- QSocket *socket;
- QString host;
- QString portS;
- QString file;
- bool headerRead;
- QString header;
- QString body;
- unsigned int length;
- unsigned int bRead;
- QTextDrag *text;
- QImageDrag *image;
- QTextBrowser *browser;
- bool chunked;
- bool lengthset;
- unsigned int clength;
- int status;
- bool isImage;
-};
diff --git a/noncore/net/ubrowser/httpfactory.cpp b/noncore/net/ubrowser/httpfactory.cpp
index 50a3c9a..0586e96 100644
--- a/noncore/net/ubrowser/httpfactory.cpp
+++ b/noncore/net/ubrowser/httpfactory.cpp
@@ -1,117 +1,365 @@
/*
Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
Copyright (C) 2002 Thomas Stephens
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "httpfactory.h"
HttpFactory::HttpFactory(QTextBrowser *newBrowser):QMimeSourceFactory()
{
- socket = new QSocket;
+// socket = new QSocket;
text = new QTextDrag;
browser=newBrowser;
- comm = new HttpComm(socket, browser);
+// comm = new HttpComm(socket, browser);
image = new QImageDrag;
}
const QMimeSource * HttpFactory::data(const QString &abs_name) const
{
printf("HttpFactory::data: using absolute data func\n");
int port=80, addrEnd, portSep;
QString host, file, portS, name, tempString;
- bool done=false, isImage=false;
+ bool done=false, isText=true;
- comm->setUp((QString *)&abs_name);
+// comm->setUp((QString *)&abs_name);
name = abs_name;
// name = name.lower();
name = name.stripWhiteSpace();
printf("%s\n", name.latin1());
if(name.startsWith("http://"))
{
name = name.remove(0, 7);
}
else
{
name.prepend(browser->context());
name = name.remove(0, 7);
}
addrEnd = name.find('/');
if(addrEnd == -1)
{
name += '/';
addrEnd = name.length()-1;
}
host = name;
file = name;
host.truncate(addrEnd);
file.remove(0, addrEnd);
portSep = host.find(':');
if(portSep != -1)
{
portS=host;
host.truncate(portSep);
portS.remove(0, portSep+1);
port = portS.toInt();
}
printf("%s %s %d\n", host.latin1(), file.latin1(), port);
if(port == 80)
{
portS="80";
}
- if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1)
- {
- isImage=true;
- }
+// if(file.find(".png", file.length()-4) != -1 || file.find(".gif", file.length()-4) != -1 || file.find(".jpg", file.length()-4) != -1)
+// {
+// isImage=true;
+// }
- comm->setStuff(host, portS, file, text, image, isImage);
+// comm->setStuff(host, portS, file, text, image, isImage);
- socket->connectToHost(host, port);
+// socket->connectToHost(host, port);
+
+ int con, bytesSent;
+ struct sockaddr_in serverAddr;
+ struct hostent * serverInfo = gethostbyname( host.latin1() );
+
+ if( serverInfo == NULL )
+ {
+ QMessageBox *mb = new QMessageBox("Error!",
+ "couldnt find ip address",
+ QMessageBox::NoIcon,
+ QMessageBox::Ok,
+ QMessageBox::NoButton,
+ QMessageBox::NoButton);
+ mb->exec();
+ perror("HttpFactory::data:");
+ return 0;
+ }
+
+ QByteArray data;
+ printf( "HttpFactory::data: %s\n", inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
+
+ QString request("GET " + file + " HTTP/1.1\r\nHost: " + host + ':' + portS + "\r\nConnection: close\r\n\r\n");
+
+ con = socket( AF_INET, SOCK_STREAM, 0 );
+ if( con == -1 )
+ {
+ QMessageBox *mb = new QMessageBox("Error!",
+ "couldnt create socket",
+ QMessageBox::NoIcon,
+ QMessageBox::Ok,
+ QMessageBox::NoButton,
+ QMessageBox::NoButton);
+ mb->exec();
+ perror("HttpFactory::data:");
+ return 0;
+ }
+
+ serverAddr.sin_family = AF_INET;
+ serverAddr.sin_port = htons( port );
+ serverAddr.sin_addr.s_addr = inet_addr( inet_ntoa(*((struct in_addr *)serverInfo->h_addr )) );
+ memset( &(serverAddr.sin_zero), '\0', 8 );
+
+ if(::connect( con, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)) == -1 )
+ {
+ QMessageBox *mb = new QMessageBox("Error!",
+ "couldnt connect to socket",
+ QMessageBox::NoIcon,
+ QMessageBox::Ok,
+ QMessageBox::NoButton,
+ QMessageBox::NoButton);
+ mb->exec();
+ perror("HttpFactory::data:");
+ return 0;
+ }
- if(!image)
+
+ bytesSent = send( con, request.latin1(), request.length(), 0);
+ printf("HttpFactory::data: bytes written: %d out of: %d\n", bytesSent, request.length() );
+ printf("HttpFactory::data: request sent:\n%s", request.latin1());
+
+ data = this->processResponse( con, isText );
+
+ ::close( con );
+
+ if(isText)
{
- text->setText("");
+ text->setText( QString( data ) );
return text;
}
else
{
+ image->setImage( QImage( data ) );
return image;
}
}
const QMimeSource * HttpFactory::data(const QString &abs_or_rel_name, const QString & context) const
{
printf("HttpFactory::data: using relative data func\n");
if(abs_or_rel_name.startsWith(context))
{
return data(abs_or_rel_name);
}
else
{
return data(context + abs_or_rel_name);
}
return 0;
}
+
+const QByteArray HttpFactory::processResponse( int sockfd, bool &isText ) const
+{
+ QByteArray inputBin( 1 );
+ QByteArray conClosedErr( 27 );
+ char conClosedErrMsg[] = "Connection to server closed";
+ QString currentLine;
+ bool done=false, chunked=false;
+ int dataLength = 0;
+
+ for( int i = 0; i < 27; i++)
+ {
+ conClosedErr[i] = conClosedErrMsg[i];
+ }
+
+ while( !done )
+ {
+ recv( sockfd, inputBin.data(), inputBin.size(), 0 );
+ currentLine += *(inputBin.data());
+
+ if( *(inputBin.data()) == '\n' )
+ {
+ if( currentLine.isEmpty() || currentLine.startsWith( "\r") )
+ {
+ printf( "HttpFactory::processResponse: end of header\n" );
+ if( chunked )
+ {
+ return recieveChunked( sockfd );
+ } else {
+ return recieveNormal( sockfd, dataLength );
+ }
+ done = true;
+ }
+
+ if( currentLine.contains( "Transfer-Encoding: chunked", false) >= 1 )
+ {
+ chunked = true;
+ printf( "HttpFactory::processResponse: chunked encoding\n" );
+ }
+
+ if( currentLine.contains( "Content-Type: text", false ) >= 1 )
+ {
+ isText = true;
+ printf( "HttpFactory::processResponse: content type text\n" );
+ }
+
+ if( currentLine.contains( "Content-Type: image", false ) >= 1 )
+ {
+ isText = false;
+ printf( "HttpFactory::processResponse: content type image\n" );
+ }
+
+ if( currentLine.contains( "Content-Length", false ) >= 1 )
+ {
+ currentLine.remove( 0, 16 );
+ dataLength = currentLine.toInt();
+ printf( "HttpFactory::processResponse: content length: %d\n", dataLength );
+ }
+
+ currentLine = "";
+ printf("HttpFactory::processResponse: reseting currentLine: %s\n", currentLine.latin1() );
+ }
+ }
+}
+
+const QByteArray HttpFactory::recieveNormal( int sockfd, int dataLen ) const
+{
+ printf( "HttpFactory::recieveNormal: recieving w/out chunked encoding\n" );
+
+ QByteArray data( dataLen );
+ QByteArray temp( dataLen );
+ int recieved, i;
+
+ recieved = recv( sockfd, temp.data(), temp.size(), 0 );
+ printf( "HttpFactory::recieveNormal: found some data: %s\n", (char *)temp.data() );
+ for( i = 0; i < recieved; i++ )
+ {
+ data[i] = temp[i];
+ }
+ dataLen -= recieved;
+ while( dataLen > 0 )
+ {
+ recieved = recv( sockfd, temp.data(), temp.size(), 0 );
+ dataLen -= recieved;
+// printf( "HttpFactory::recieveNormal: found some more data: %s\n", (char *)temp.data() );
+ for( int j = 0; j < recieved; j++ )
+ {
+ data[i] = temp[j];
+ i++;
+ }
+ temp.fill('\0');
+ }
+
+ printf( "HttpFactory::recieveNormal: end of data\n" );
+ return data;
+}
+
+const QByteArray HttpFactory::recieveChunked( int sockfd ) const
+{
+ printf( "HttpFactory::recieveChunked: recieving data with chunked encoding\n" );
+
+ QByteArray data;
+ QByteArray temp( 1 );
+ int recieved, i = 0, cSize = 0;
+ QString cSizeS;
+
+ printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
+ {
+// printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
+// printf( "HttpFactory::recieveChunked: temp.data(): %c\n", temp[0] );
+ cSizeS += temp[0];
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ }
+
+ printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
+ cSize = cSizeS.toInt( 0, 16 );
+ printf( "HttpFactory::recieveChunked: first chunk of size: %d\n", cSize );
+
+ if( *(temp.data()) == ';' )
+ {
+ while( *(temp.data()) != '\n' )
+ {
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ }
+ }
+
+ temp.fill( '\0', cSize );
+ data.fill( '\0', cSize );
+
+ while( cSize > 0 )
+ {
+ while( cSize > 0 )
+ {
+ recieved = recv( sockfd, temp.data(), temp.size(), 0 );
+ cSize -= recieved;
+ for( int j = 0; j < recieved; j++ )
+ {
+ data[i] = temp[j];
+ i++;
+ }
+ temp.fill('\0', cSize);
+ }
+
+ printf( "HttpFactory::recieveChunked: current data:\n%s", data.data() );
+
+ temp.fill('\0', 1);
+ cSizeS = "";
+ cSize = 0;
+
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ if( *(temp.data()) == '\r' )
+ {
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ }
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ while( *(temp.data()) != '\n' && *(temp.data()) != ';' )
+ {
+// printf( "HttpFactory::recieveChunked: temp.size(): %d\n", temp.size() );
+ printf( "HttpFactory::recieveChunked: temp.data(): %d\n", temp[0] );
+ cSizeS += temp[0];
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ }
+
+ printf( "HttpFactory::recieveChunked: cSizeS: %s\n", cSizeS.latin1() );
+ cSize = cSizeS.toInt( 0, 16 );
+ printf( "HttpFactory::recieveChunked: next chunk of size: %d\n", cSize );
+
+ if( *(temp.data()) == ';' )
+ {
+ while( *(temp.data()) != '\n' )
+ {
+ recv( sockfd, temp.data(), temp.size(), 0 );
+ }
+ }
+
+ temp.fill( '\0', cSize );
+ data.resize( data.size() + cSize );
+ }
+
+ printf( "HttpFactory::recieveChunked: end of data\n" );
+ return data;
+}
diff --git a/noncore/net/ubrowser/httpfactory.h b/noncore/net/ubrowser/httpfactory.h
index 1802f56..214120c 100644
--- a/noncore/net/ubrowser/httpfactory.h
+++ b/noncore/net/ubrowser/httpfactory.h
@@ -1,39 +1,51 @@
/*
Opie-uBrowser. a very small web browser, using on QTextBrowser for html display/parsing
Copyright (C) 2002 Thomas Stephens
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <qmime.h>
-#include <qsocket.h>
+//#include <qsocket.h>
#include <qstring.h>
#include <qdragobject.h>
#include <qtextbrowser.h>
+#include <qmessagebox.h>
#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+
#include "httpcomm.h"
class HttpFactory : public QMimeSourceFactory
{
public:
HttpFactory(QTextBrowser *newBrowser);
const QMimeSource * data(const QString &abs_name) const;
const QMimeSource * data(const QString &abs_or_rel_name, const QString & context) const;
private:
- QSocket *socket;
+// QSocket *socket;
HttpComm *comm;
QTextDrag *text;
QImageDrag *image;
QTextBrowser *browser;
+
+ const QByteArray processResponse( int sockfd, bool &isText) const;
+ const QByteArray recieveNormal( int sockfd, int dataLen ) const;
+ const QByteArray recieveChunked( int sockfd ) const;
};
diff --git a/noncore/net/ubrowser/ubrowser.pro b/noncore/net/ubrowser/ubrowser.pro
index cd1a989..a6943dd 100644
--- a/noncore/net/ubrowser/ubrowser.pro
+++ b/noncore/net/ubrowser/ubrowser.pro
@@ -1,13 +1,13 @@
TEMPLATE =app
CONFIG +=qt warn_on release
DESTDIR =../../../bin
-HEADERS = mainview.h httpfactory.h httpcomm.h
-SOURCES = main.cpp mainview.cpp httpfactory.cpp httpcomm.cpp
+HEADERS = mainview.h httpfactory.h
+SOURCES = main.cpp mainview.cpp httpfactory.cpp
INCLUDEPATH +=../../../include
DEPENDPATH +=../../../include
LIBS += -lqpe
TARGET = ubrowser
include ( $(OPIEDIR)/include.pro )