Skip to content

Instantly share code, notes, and snippets.

@mkozjak
Created April 24, 2016 16:39
Show Gist options
  • Save mkozjak/988a63d5e6fb44cdd0208a93d73abad2 to your computer and use it in GitHub Desktop.
Save mkozjak/988a63d5e6fb44cdd0208a93d73abad2 to your computer and use it in GitHub Desktop.
#include <QtCore>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
#include "../../lib/external/http-parser/http_parser.h"
class Srv
{
public:
Srv()
{
// define http-parser callbacks
m_parser_settings.on_url = on_url_cb;
m_parser_settings.on_header_field = on_header_cb;
// initialize http-parser
http_parser_init(&m_parser, HTTP_REQUEST);
qDebug() << "parser initialized";
QObject::connect(&srv, &QTcpServer::newConnection, [&]
{
QTcpSocket *socket = srv.nextPendingConnection();
QObject::connect(socket, &QTcpSocket::readyRead, [=]
{
const char *data = socket->readAll().constData();
qDebug() << "reading" << data;
qDebug() << "start exec\n";
auto nparsed = http_parser_execute(&m_parser, &m_parser_settings, data, qstrlen(data));
qDebug() << "end exec" << nparsed;
});
});
srv.listen(QHostAddress::Any, 1337);
};
private:
http_parser m_parser;
http_parser_settings m_parser_settings;
QTcpServer srv;
static int on_url_cb(http_parser *parser, const char *buf, size_t len)
{
qDebug() << "url test" << QString::fromUtf8(buf, len);
return 0;
};
static int on_header_cb(http_parser *parser, const char *buf, size_t len)
{
qDebug() << "header test" << QString::fromUtf8(buf, len);
return 0;
};
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Srv srv;
return a.exec();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment