summaryrefslogtreecommitdiff
path: root/noncore/unsupported
Side-by-side diff
Diffstat (limited to 'noncore/unsupported') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/ubrowser/.cvsignore4
-rw-r--r--noncore/unsupported/ubrowser/config.in4
-rw-r--r--noncore/unsupported/ubrowser/gnu-license-header15
-rw-r--r--noncore/unsupported/ubrowser/httpfactory.cpp376
-rw-r--r--noncore/unsupported/ubrowser/httpfactory.h51
-rw-r--r--noncore/unsupported/ubrowser/main.cpp26
-rw-r--r--noncore/unsupported/ubrowser/mainview.cpp121
-rw-r--r--noncore/unsupported/ubrowser/mainview.h53
-rw-r--r--noncore/unsupported/ubrowser/new_chunked_algo_thoughts12
-rw-r--r--noncore/unsupported/ubrowser/old_chunked_algo57
-rw-r--r--noncore/unsupported/ubrowser/opie-ubrowser.control10
-rw-r--r--noncore/unsupported/ubrowser/ubrowser.pro11
12 files changed, 740 insertions, 0 deletions
diff --git a/noncore/unsupported/ubrowser/.cvsignore b/noncore/unsupported/ubrowser/.cvsignore
new file mode 100644
index 0000000..93b952d
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/.cvsignore
@@ -0,0 +1,4 @@
+Makefile*
+moc_*
+.moc
+.obj
diff --git a/noncore/unsupported/ubrowser/config.in b/noncore/unsupported/ubrowser/config.in
new file mode 100644
index 0000000..55f2825
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/config.in
@@ -0,0 +1,4 @@
+ config UBROWSER
+ boolean "opie-ubrowser (a very small web brower)"
+ default "n"
+ depends ( LIBQPE || LIBQPE-X11 )
diff --git a/noncore/unsupported/ubrowser/gnu-license-header b/noncore/unsupported/ubrowser/gnu-license-header
new file mode 100644
index 0000000..9973e8c
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/gnu-license-header
@@ -0,0 +1,15 @@
+/*
+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
+*/ \ No newline at end of file
diff --git a/noncore/unsupported/ubrowser/httpfactory.cpp b/noncore/unsupported/ubrowser/httpfactory.cpp
new file mode 100644
index 0000000..369f206
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/httpfactory.cpp
@@ -0,0 +1,376 @@
+/*
+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;
+ text = new QTextDrag;
+ browser=newBrowser;
+// 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, isText=true;
+
+// 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;
+// }
+
+// comm->setStuff(host, portS, file, text, image, isImage);
+
+// socket->connectToHost(host, port);
+
+ int con, bytesSent;
+ struct sockaddr_in serverAddr;
+ struct hostent * serverInfo = gethostbyname( host.latin1() );
+
+ if( serverInfo == NULL )
+ {
+ QMessageBox *mb = new QMessageBox(QObject::tr("Error!"),
+ QObject::tr("IP-Address not found"),
+ 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(QObject::tr("Error!"),
+ QObject::tr("Error creating 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(QObject::tr("Error!"),
+ QObject::tr("Error connecting to socket"),
+ QMessageBox::NoIcon,
+ QMessageBox::Ok,
+ QMessageBox::NoButton,
+ QMessageBox::NoButton);
+ mb->exec();
+ perror("HttpFactory::data:");
+ return 0;
+ }
+
+
+ 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( 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( "html", false ) >= 1)
+ {
+ browser->setTextFormat(Qt::RichText);
+// printf( "HttpFactory::processResponse: content type html\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 );
+ }
+
+ if( currentLine.contains( "404", false ) >= 1 )
+ {
+// printf( "HttpFactory::processResponse: 404 error\n" );
+ return 0;
+ }
+
+ 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/unsupported/ubrowser/httpfactory.h b/noncore/unsupported/ubrowser/httpfactory.h
new file mode 100644
index 0000000..ec59ebb
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/httpfactory.h
@@ -0,0 +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 <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;
+// 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/unsupported/ubrowser/main.cpp b/noncore/unsupported/ubrowser/main.cpp
new file mode 100644
index 0000000..0736f1f
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/main.cpp
@@ -0,0 +1,26 @@
+/*
+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 <qpe/qpeapplication.h>
+
+#include "mainview.h"
+
+#include <opie2/oapplicationfactory.h>
+
+
+using namespace Opie::Core;
+OPIE_EXPORT_APP( OApplicationFactory<MainView> )
+
diff --git a/noncore/unsupported/ubrowser/mainview.cpp b/noncore/unsupported/ubrowser/mainview.cpp
new file mode 100644
index 0000000..f299b54
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/mainview.cpp
@@ -0,0 +1,121 @@
+/*
+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 "mainview.h"
+
+MainView::MainView(QWidget *parent, const char *name, WFlags fl) : QMainWindow(parent, name, fl)
+{
+ setIcon( Resource::loadPixmap( "remote" ) );
+ setCaption(tr("uBrowser"));
+
+ setToolBarsMovable( false );
+
+ QToolBar *toolbar = new QToolBar(this, "toolbar");
+ back = new QToolButton(Resource::loadPixmap("ubrowser/back"), 0, 0, 0, 0, toolbar, "back");
+ forward = new QToolButton(Resource::loadPixmap("ubrowser/forward"), 0, 0, 0, 0, toolbar, "forward");
+ home = new QToolButton(Resource::loadPixmap("ubrowser/home"), 0, 0, 0, 0, toolbar, "home");
+ location = new QComboBox(true, toolbar, "location");
+ go = new QToolButton(Resource::loadPixmap("ubrowser/go"), 0, 0, 0, 0, toolbar, "go");
+
+ toolbar->setStretchableWidget(location);
+ toolbar->setHorizontalStretchable(true);
+ location->setAutoCompletion( true );
+
+ addToolBar(toolbar);
+
+ browser = new QTextBrowser(this, "browser");
+ setCentralWidget(browser);
+
+//make the button take you to the location
+ connect(go, SIGNAL(clicked()), this, SLOT(goClicked()) );
+ connect(location->lineEdit(), SIGNAL(returnPressed()), this, SLOT(goClicked()) );
+
+//make back, forward and home do their thing (isnt QTextBrowser great?)
+ connect(back, SIGNAL(clicked()), browser, SLOT(backward()) );
+ connect(forward, SIGNAL(clicked()), browser, SLOT(forward()) );
+ connect(home, SIGNAL(clicked()), browser, SLOT(home()) );
+
+//make back and forward buttons be enabled, only when you can go back or forward (again, i love QTextBrowser)
+//this doesnt seem to work, but doesnt break anything either...
+ connect(browser, SIGNAL(backwardAvailable(bool)), back, SLOT(setOn(bool)) );
+ connect(browser, SIGNAL(forwardAvailable(bool)), forward, SLOT(setOn(bool)) );
+
+//notify me when the text of the browser has changed (like when the user clicks a link)
+ connect(browser, SIGNAL(textChanged()), this, SLOT(textChanged()) );
+
+ http = new HttpFactory(browser);
+
+ if( qApp->argc() > 1 )
+ {
+ char **argv = qApp->argv();
+ int i = 0;
+ QString *openfile = new QString( argv[0] );
+ while( openfile->contains( "ubrowser" ) == 0 && i < qApp->argc() )
+ {
+ i++;
+ *openfile = argv[i];
+ }
+ *openfile = argv[i+1];
+ if( !openfile->startsWith( "http://" ) && !openfile->startsWith( "/" ) )
+ {
+ openfile->insert( 0, QDir::currentDirPath()+"/" );
+ }
+ location->setEditText( *openfile );
+ goClicked();
+ }
+}
+
+void MainView::goClicked()
+{
+ location->insertItem( location->currentText() );
+
+ if(location->currentText().startsWith("http://") )
+ {
+ location->setEditText(location->currentText().lower());
+ browser->setMimeSourceFactory(http);
+ printf("MainView::goClicked: using http source factory\n");
+ }
+ else
+ {
+ browser->setMimeSourceFactory(QMimeSourceFactory::defaultFactory());
+ printf("MainView::goClicked: using default source factory\n");
+ }
+
+ browser->setSource(location->currentText());
+}
+
+void MainView::textChanged()
+{
+ if(browser->documentTitle().isNull())
+ {
+ setCaption( tr("%1 - uBrowser").arg( browser->source() ) );
+ }
+ else
+ {
+ setCaption(tr(" - uBrowser").arg( browser->documentTitle() ));
+ }
+
+ location->setEditText(browser->source());
+}
+
+void MainView::setDocument( const QString& applnk_filename )
+{
+ DocLnk *file = new DocLnk( applnk_filename );
+
+ location->setEditText( file->file() );
+ goClicked();
+}
diff --git a/noncore/unsupported/ubrowser/mainview.h b/noncore/unsupported/ubrowser/mainview.h
new file mode 100644
index 0000000..7ce890c
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/mainview.h
@@ -0,0 +1,53 @@
+/*
+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 <qpe/resource.h>
+#include <qtoolbar.h>
+#include <qpe/applnk.h>
+
+#include <qapplication.h>
+#include <qmainwindow.h>
+#include <qwidget.h>
+#include <qtextbrowser.h>
+#include <qtoolbutton.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qdir.h>
+
+#include <stdio.h>
+
+#include "httpfactory.h"
+
+class MainView : public QMainWindow
+{
+ Q_OBJECT
+public:
+ static QString appName() { return QString::fromLatin1("ubrowser"); }
+ MainView(QWidget *parent=0, const char *name=0, WFlags fl = 0);
+public slots:
+ void goClicked();
+ void textChanged();
+ void setDocument( const QString& applnk_filename );
+private:
+ QToolButton *back;
+ QToolButton *forward;
+ QToolButton *home;
+ QToolButton *go;
+ QComboBox *location;
+ QTextBrowser *browser;
+ HttpFactory *http;
+};
diff --git a/noncore/unsupported/ubrowser/new_chunked_algo_thoughts b/noncore/unsupported/ubrowser/new_chunked_algo_thoughts
new file mode 100644
index 0000000..8ca9318
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/new_chunked_algo_thoughts
@@ -0,0 +1,12 @@
+use a switch case, with each case being one potential way that the data is when the function is entered, or
+another one exits.
+
+while(!done)
+{
+ switch(status)
+ {
+ case chunk header:
+ case after chunk header:
+ case no chunk header:
+ }
+} \ No newline at end of file
diff --git a/noncore/unsupported/ubrowser/old_chunked_algo b/noncore/unsupported/ubrowser/old_chunked_algo
new file mode 100644
index 0000000..9b4ccda
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/old_chunked_algo
@@ -0,0 +1,57 @@
+readchunk:
+ if(semi != 0)
+ {
+ printf("HttpComm::incoming: semi !=0\n");
+ QString newBody = tempString;
+ if(i != 0)
+ {
+ printf("HttpComm::incoming: striping header2\n");
+ newBody.remove(0,i);
+ }
+ newBody=newBody.remove(0, semi);
+ if(newBody.length() > clength)
+ {
+ newBody.truncate(clength);
+ nextChunk = true;
+ }
+ body += newBody;
+ bRead += newBody.length();
+ printf("HttpComm::incoming: start body chunk1\n");
+ printf("%s", newBody.latin1());
+ printf("\nHttpComm::incoming: end body chunk\n");
+ printf("HttpComm::incoming: bRead: %d\n", bRead);
+ if(nextChunk)
+ {
+ QString tmpQString = tempString;
+ tmpQString=tmpQString.remove(0, clength);
+ tempString = (char *)tmpQString.latin1();
+ lengthset=false;
+ goto topchunk;
+ }
+ }
+ else
+ {
+ if( (bRead + ba) > clength)
+ {
+// int bRead2=bRead;
+ for(; bRead < clength; bRead++)
+ {
+ body+=tempString[j];
+// bRead++;
+ }
+ }
+ else
+ {
+ body += tempString;
+ bRead += ba;
+ }
+ printf("HttpComm::incoming: start body chunk2\n");
+ printf("%s", tempString);
+ printf("\nHttpComm::incoming: end body chunk\n");
+ printf("HttpComm::incoming: bRead: %d\n", bRead);
+ }
+ if(bRead >= clength)
+ {
+ printf("HttpComm::incoming: end chunk\n");
+ lengthset=false;
+ } \ No newline at end of file
diff --git a/noncore/unsupported/ubrowser/opie-ubrowser.control b/noncore/unsupported/ubrowser/opie-ubrowser.control
new file mode 100644
index 0000000..cf96888
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/opie-ubrowser.control
@@ -0,0 +1,10 @@
+Package: opie-ubrowser
+Files: bin/ubrowser apps/Applications/ubrowser.desktop pics/ubrowser/*.png plugins/application/libubrowser.so*
+Priority: optional
+Section: opie/applications
+Maintainer: Thomas Stephens <spiralman@softhome.net>
+Architecture: arm
+Version: 0.1-$SUB_VERSION
+Depends: task-opie-minimal
+License: GPL
+Description: A very small web browser
diff --git a/noncore/unsupported/ubrowser/ubrowser.pro b/noncore/unsupported/ubrowser/ubrowser.pro
new file mode 100644
index 0000000..bcdb4f4
--- a/dev/null
+++ b/noncore/unsupported/ubrowser/ubrowser.pro
@@ -0,0 +1,11 @@
+CONFIG +=qt warn_on quick-app
+HEADERS = mainview.h httpfactory.h
+SOURCES = main.cpp mainview.cpp httpfactory.cpp
+INCLUDEPATH +=../../../include
+DEPENDPATH +=../../../include
+LIBS += -lqpe
+TARGET = ubrowser
+
+
+
+include ( $(OPIEDIR)/include.pro )