diff --git a/CMakeLists.txt b/CMakeLists.txt
index 94ce514c3..1b16d1b87 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -71,7 +71,6 @@ option(USE_SHARED_HARFBUZZ "Use shared HarfBuzz library" off)
option(ENABLE_MEMLEAK "Enable memory-leaks detector (only for developers)" off)
option(ENABLE_UPDATER "Enable automatic check for updates" on)
option(ENABLE_SCRIPTING "Compile with scripting support" on)
-option(ENABLE_WEBSERVER "Enable support to run a webserver (for HTML5 gamedev)" off)
option(ENABLE_TESTS "Compile unit tests" off)
option(ENABLE_BENCHMARKS "Compile benchmarks" off)
option(ENABLE_TRIAL_MODE "Compile the trial version" off)
diff --git a/data/www/aseprite.css b/data/www/aseprite.css
deleted file mode 100644
index f8845f18c..000000000
--- a/data/www/aseprite.css
+++ /dev/null
@@ -1,17 +0,0 @@
-body, h2 {
- font-family: Segoe UI, Arial;
-}
-
-h2 {
- font-size: 14pt;
- font-weight: normal;
- color: #669;
-}
-
-#console {
- border:8px solid #eee;
- background-color:#eee;
- width:80%;
- height:128px;
- overflow:auto;
-}
diff --git a/data/www/aseprite.js b/data/www/aseprite.js
deleted file mode 100644
index 029d16d10..000000000
--- a/data/www/aseprite.js
+++ /dev/null
@@ -1,22 +0,0 @@
-window.Aseprite = window.Aseprite || {};
-(function(Aseprite) {
- 'use strict';
-
- Aseprite.host = 'http://127.0.0.1:10453';
-
- Aseprite.get = function(uri, callback) {
- $.ajax({
- type: 'GET',
- url: Aseprite.host + uri,
- dataType: 'json',
- cache: false,
- success: function(data) {
- callback(data);
- }
- });
- }
-
- Aseprite.get_version = function(callback) {
- Aseprite.get('/version', callback);
- }
-})(window.Aseprite);
diff --git a/data/www/aseprite.png b/data/www/aseprite.png
deleted file mode 100644
index 740a6f826..000000000
Binary files a/data/www/aseprite.png and /dev/null differ
diff --git a/data/www/index.html b/data/www/index.html
deleted file mode 100644
index 6fb915033..000000000
--- a/data/www/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
- Aseprite
-
-
-
-
-
-
-
-
- Console:
-
-
- Test your code:
-
-
-
-
-
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d803a6a85..01dc47f55 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -104,10 +104,6 @@ if(ENABLE_UPDATER)
add_subdirectory(updater)
endif()
-if(ENABLE_WEBSERVER)
- add_subdirectory(webserver)
-endif()
-
if(ENABLE_STEAM)
add_subdirectory(steam)
endif()
diff --git a/src/README.md b/src/README.md
index 8fb284ac5..617232622 100644
--- a/src/README.md
+++ b/src/README.md
@@ -28,7 +28,6 @@ because they don't depend on any other component.
* [cfg](cfg/) (base): Library to load/save .ini files.
* [gen](gen/) (base): Helper utility to generate C++ files from different XMLs.
* [net](net/) (base): Networking library to send HTTP requests.
- * [webserver](webserver/) (base): HTTP web server
## Level 2
@@ -48,7 +47,7 @@ because they don't depend on any other component.
## Level 5
- * [app](app/) (base, doc, dio, filters, fixmath, flic, gfx, pen, render, scripting, os, ui, undo, updater, webserver)
+ * [app](app/) (base, doc, dio, filters, fixmath, flic, gfx, pen, render, scripting, os, ui, undo, updater)
## Level 6
diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt
index 41c1ea20c..28e872309 100644
--- a/src/app/CMakeLists.txt
+++ b/src/app/CMakeLists.txt
@@ -557,7 +557,6 @@ add_library(app-lib
util/range_utils.cpp
util/readable_time.cpp
util/wrap_point.cpp
- webserver.cpp
xml_document.cpp
xml_exception.cpp
${ui_app_files}
@@ -604,10 +603,6 @@ if(ENABLE_UPDATER)
target_link_libraries(app-lib updater-lib)
endif()
-if(ENABLE_WEBSERVER)
- target_link_libraries(app-lib webserver-lib)
-endif()
-
if(ENABLE_STEAM)
add_definitions(-DENABLE_STEAM)
target_link_libraries(app-lib steam-lib)
diff --git a/src/app/app.cpp b/src/app/app.cpp
index 04ad679cd..f49cd71ed 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -51,7 +51,6 @@
#include "app/ui/workspace.h"
#include "app/ui_context.h"
#include "app/util/clipboard.h"
-#include "app/webserver.h"
#include "base/exception.h"
#include "base/fs.h"
#include "base/scoped_lock.h"
@@ -334,12 +333,6 @@ void App::run()
checkUpdate.launch();
#endif
-#ifdef ENABLE_WEBSERVER
- // Launch the webserver.
- app::WebServer webServer;
- webServer.start();
-#endif
-
app::SendCrash sendCrash;
sendCrash.search();
diff --git a/src/app/webserver.cpp b/src/app/webserver.cpp
deleted file mode 100644
index 047f2fce5..000000000
--- a/src/app/webserver.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// Aseprite
-// Copyright (C) 2001-2015 David Capello
-//
-// This program is distributed under the terms of
-// the End-User License Agreement for Aseprite.
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef ENABLE_WEBSERVER
-
-#include "app/webserver.h"
-
-#include "base/fs.h"
-#include "base/path.h"
-#include "app/resource_finder.h"
-#include "webserver/webserver.h"
-
-#include
-
-#define API_VERSION 1
-
-namespace app {
-
-WebServer::WebServer()
- : m_webServer(NULL)
-{
- ResourceFinder rf;
- rf.includeDataDir("www");
-
- while (rf.next()) {
- if (base::is_directory(rf.filename())) {
- m_wwwpath = rf.filename();
- break;
- }
- }
-}
-
-WebServer::~WebServer()
-{
- delete m_webServer;
-}
-
-void WebServer::start()
-{
- m_webServer = new webserver::WebServer(this);
-}
-
-void WebServer::onProcessRequest(webserver::IRequest* request,
- webserver::IResponse* response)
-{
- std::string uri = request->getUri();
- if (!uri.empty() && uri[uri.size()-1] == '/')
- uri.erase(uri.size()-1);
-
- if (uri == "/version") {
- response->setContentType("text/plain");
- response->getStream() << "{\"package\":\"" << PACKAGE "\","
- << "\"version\":\"" << VERSION << "\","
- << "\"webserver\":\"" << m_webServer->getName() << "\","
- << "\"api\":\"" << API_VERSION << "\"}";
- }
- else {
- if (uri == "/" || uri.empty())
- uri = "/index.html";
-
- std::string fn = base::join_path(m_wwwpath, uri);
- if (base::is_file(fn)) {
- response->sendFile(fn.c_str());
- }
- else {
- response->setStatusCode(404);
- response->getStream() << "Not found\n"
- << "URI = " << uri << "\n"
- << "Local file = " << fn;
- }
- }
-}
-
-}
-
-#endif // ENABLE_WEBSERVER
diff --git a/src/app/webserver.h b/src/app/webserver.h
deleted file mode 100644
index 4c45093e4..000000000
--- a/src/app/webserver.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Aseprite
-// Copyright (C) 2001-2015 David Capello
-//
-// This program is distributed under the terms of
-// the End-User License Agreement for Aseprite.
-
-#ifndef APP_WEBSERVER_H_INCLUDED
-#define APP_WEBSERVER_H_INCLUDED
-#pragma once
-
-#ifdef ENABLE_WEBSERVER
-
-#include "webserver/webserver.h"
-
-namespace app {
-
- class WebServer : public webserver::IDelegate {
- public:
- WebServer();
- ~WebServer();
-
- void start();
-
- // webserver::IDelegate implementation
- virtual void onProcessRequest(webserver::IRequest* request,
- webserver::IResponse* response) override;
-
- private:
- webserver::WebServer* m_webServer;
- std::string m_wwwpath;
- };
-
-} // namespace app
-
-#endif // ENABLE_WEBSERVER
-
-#endif // APP_WEBSERVER_H_INCLUDED
diff --git a/src/webserver/CMakeLists.txt b/src/webserver/CMakeLists.txt
deleted file mode 100644
index 508692246..000000000
--- a/src/webserver/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# ASEPRITE
-# Copyright (C) 2001-2013, 2015, 2016 David Capello
-
-add_library(webserver-lib
- webserver.cpp)
diff --git a/src/webserver/webserver.cpp b/src/webserver/webserver.cpp
deleted file mode 100644
index 78717e5e2..000000000
--- a/src/webserver/webserver.cpp
+++ /dev/null
@@ -1,247 +0,0 @@
-// Aseprite
-// Copyright (C) 2001-2016 David Capello
-//
-// This program is distributed under the terms of
-// the End-User License Agreement for Aseprite.
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#error Not implemented
-
-#include "webserver/webserver.h"
-
-#include "base/bind.h"
-
-#include
-
-namespace webserver {
-
-static int begin_request_handler(mg_connection* conn);
-
-class RequestResponseImpl : public IRequest
- , public IResponse
-{
-public:
- RequestResponseImpl(mg_connection* conn, std::ostream& stream)
- : m_conn(conn)
- , m_requestInfo(mg_get_request_info(conn))
- , m_stream(stream)
- , m_code(200)
- , m_done(false)
- , m_contentType("text/plain")
- {
- }
-
- // IRequest implementation
-
- virtual const char* getRequestMethod() override {
- return m_requestInfo->request_method;
- }
-
- virtual const char* getUri() override {
- return m_requestInfo->uri;
- }
-
- virtual const char* getHttpVersion() override {
- return m_requestInfo->http_version;
- }
-
- virtual const char* getQueryString() override {
- return m_requestInfo->query_string;
- }
-
- // IResponse implementation
-
- virtual void setStatusCode(int code) override {
- m_code = code;
- }
-
- virtual void setContentType(const char* contentType) override {
- m_contentType = contentType;
- }
-
- virtual std::ostream& getStream() override {
- return m_stream;
- }
-
- virtual void sendFile(const char* path) override {
- mg_send_file(m_conn, path);
- m_done = true;
- }
-
- int getStatusCode() const {
- return m_code;
- }
-
- const char* getContentType() const {
- return m_contentType.c_str();
- }
-
- bool done() {
- return m_done;
- }
-
-private:
- mg_connection* m_conn;
- const mg_request_info* m_requestInfo;
- std::ostream& m_stream;
- int m_code;
- bool m_done;
- std::string m_contentType;
-};
-
-class WebServer::WebServerImpl
-{
-public:
- WebServerImpl(IDelegate* delegate)
- : m_delegate(delegate) {
- const char* options[] = {
- "listening_ports", "10453",
- NULL
- };
-
- memset(&m_callbacks, 0, sizeof(m_callbacks));
- m_callbacks.begin_request = &begin_request_handler;
-
- m_context = mg_start(&m_callbacks, (void*)this, options);
- }
-
- ~WebServerImpl() {
- mg_stop(m_context);
- }
-
- std::string getName() const {
- std::string name;
- name = "mongoose ";
- name += mg_version();
- return name;
- }
-
- int onBeginRequest(mg_connection* conn) {
- std::stringstream body;
- RequestResponseImpl rr(conn, body);
- m_delegate->onProcessRequest(&rr, &rr);
-
- if (rr.done())
- return 1;
-
- // Send HTTP reply to the client
- std::string bodyStr = body.str();
- std::stringstream headers;
-
- headers << "HTTP/1.1 "
- << rr.getStatusCode() << " "
- << getStatusCodeString(rr.getStatusCode()) << "\r\n"
- << "Server: mongoose/" << mg_version() << "\r\n"
- << "Content-Type: " << rr.getContentType() << "\r\n"
- << "Content-Length: " << bodyStr.size() << "\r\n"
- << "Access-Control-Allow-Origin: *\r\n"
- << "\r\n";
-
- std::string headersStr = headers.str();
-
- mg_write(conn, (const void*)headersStr.c_str(), headersStr.size());
- mg_write(conn, (const void*)bodyStr.c_str(), bodyStr.size());
-
- // Returning non-zero tells mongoose that our function has replied to
- // the client, and mongoose should not send client any more data.
- return 1;
- }
-
-private:
- const char* getStatusCodeString(int code) {
- switch (code) {
- case 100: return "Continue";
- case 101: return "Switching Protocols";
- case 102: return "Processing";
- case 200: return "OK";
- case 201: return "Created";
- case 202: return "Accepted";
- case 203: return "Non-Authoritative Information";
- case 204: return "No Content";
- case 205: return "Reset Content";
- case 206: return "Partial Content";
- case 207: return "Multi-Status";
- case 208: return "Already Reported";
- case 226: return "IM Used";
- case 300: return "Multiple Choices";
- case 301: return "Moved Permanently";
- case 302: return "Found";
- case 303: return "See Other";
- case 304: return "Not Modified";
- case 305: return "Use Proxy";
- case 306: return "Reserved";
- case 307: return "Temporary Redirect";
- case 308: return "Permanent Redirect";
- case 400: return "Bad Request";
- case 401: return "Unauthorized";
- case 402: return "Payment Required";
- case 403: return "Forbidden";
- case 404: return "Not Found";
- case 405: return "Method Not Allowed";
- case 406: return "Not Acceptable";
- case 407: return "Proxy Authentication Required";
- case 408: return "Request Timeout";
- case 409: return "Conflict";
- case 410: return "Gone";
- case 411: return "Length Required";
- case 412: return "Precondition Failed";
- case 413: return "Request Entity Too Large";
- case 414: return "Request-URI Too Long";
- case 415: return "Unsupported Media Type";
- case 416: return "Requested Range Not Satisfiable";
- case 417: return "Expectation Failed";
- case 422: return "Unprocessable Entity";
- case 423: return "Locked";
- case 424: return "Failed Dependency";
- case 426: return "Upgrade Required";
- case 428: return "Precondition Required";
- case 429: return "Too Many Requests";
- case 431: return "Request Header Fields Too Large";
- case 500: return "Internal Server Error";
- case 501: return "Not Implemented";
- case 502: return "Bad Gateway";
- case 503: return "Service Unavailable";
- case 504: return "Gateway Timeout";
- case 505: return "HTTP Version Not Supported";
- case 506: return "Variant Also Negotiates (Experimental)";
- case 507: return "Insufficient Storage";
- case 508: return "Loop Detected";
- case 510: return "Not Extended";
- case 511: return "Network Authentication Required";
- default: return "Unassigned";
- }
- }
-
- IDelegate* m_delegate;
- mg_context* m_context;
- mg_callbacks m_callbacks;
-};
-
-static int begin_request_handler(mg_connection* conn)
-{
- const mg_request_info* request_info = mg_get_request_info(conn);
- WebServer::WebServerImpl* webServer =
- reinterpret_cast(request_info->user_data);
-
- return webServer->onBeginRequest(conn);
-}
-
-WebServer::WebServer(IDelegate* delegate)
- : m_impl(new WebServerImpl(delegate))
-{
-}
-
-WebServer::~WebServer()
-{
- delete m_impl;
-}
-
-std::string WebServer::getName() const
-{
- return m_impl->getName();
-}
-
-}
diff --git a/src/webserver/webserver.h b/src/webserver/webserver.h
deleted file mode 100644
index 95e2f6875..000000000
--- a/src/webserver/webserver.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Aseprite
-// Copyright (C) 2001-2015 David Capello
-//
-// This program is distributed under the terms of
-// the End-User License Agreement for Aseprite.
-
-#ifndef WEBSERVER_WEBSERVER_H_INCLUDED
-#define WEBSERVER_WEBSERVER_H_INCLUDED
-#pragma once
-
-#include "base/disable_copying.h"
-#include
-#include
-
-namespace webserver {
-
- class IRequest {
- public:
- virtual ~IRequest() { }
- virtual const char* getRequestMethod() = 0;
- virtual const char* getUri() = 0;
- virtual const char* getHttpVersion() = 0;
- virtual const char* getQueryString() = 0;
- };
-
- class IResponse {
- public:
- virtual ~IResponse() { }
- virtual void setStatusCode(int code) = 0;
- virtual void setContentType(const char* contentType) = 0;
- virtual std::ostream& getStream() = 0;
- virtual void sendFile(const char* path) = 0;
- };
-
- class IDelegate {
- public:
- virtual ~IDelegate() { }
- virtual void onProcessRequest(IRequest* request, IResponse* response) = 0;
- };
-
- class WebServer {
- public:
- class WebServerImpl;
-
- WebServer(IDelegate* delegate);
- ~WebServer();
-
- std::string getName() const;
-
- private:
- WebServerImpl* m_impl;
-
- DISABLE_COPYING(WebServer);
- };
-
-} // namespace webserver
-
-#endif