From db7a6de70013ec53780690154b335ec3cce39e88 Mon Sep 17 00:00:00 2001 From: JAJames Date: Sat, 30 Jan 2016 06:23:04 -0500 Subject: [PATCH] HTTP::Server: Implemented remove() functions --- Jupiter/HTTP_Server.cpp | 61 +++++++++++++++++++++++++++++++++++----- Jupiter/HTTP_Server.h | 6 ++-- Release/Jupiter.lib | Bin 300408 -> 300418 bytes 3 files changed, 58 insertions(+), 9 deletions(-) diff --git a/Jupiter/HTTP_Server.cpp b/Jupiter/HTTP_Server.cpp index a373cad..ffe8f70 100644 --- a/Jupiter/HTTP_Server.cpp +++ b/Jupiter/HTTP_Server.cpp @@ -103,7 +103,7 @@ void Jupiter::HTTP::Server::Directory::hook(const Jupiter::ReadableString &in_na directory = Jupiter::HTTP::Server::Directory::directories.get(--index); if (directory->name_checksum == dir_name_checksum && directory->name.equals(dir_name)) { - directory->hook(dir_name, in_content); + directory->hook(in_name_ref, in_content); return; } } @@ -134,8 +134,49 @@ void Jupiter::HTTP::Server::Directory::hook(const Jupiter::ReadableString &in_na } } -bool Jupiter::HTTP::Server::Directory::remove(const Jupiter::ReadableString &in_name) +bool Jupiter::HTTP::Server::Directory::remove(const Jupiter::ReadableString &path, const Jupiter::ReadableString &content_name) { + size_t index; + Jupiter::ReferenceString in_name_ref = path; + in_name_ref.shiftRight(in_name_ref.span('/')); + unsigned int checksum; + + if (in_name_ref.isEmpty()) // Remove content + { + Jupiter::HTTP::Server::Content *content_node; + index = Jupiter::HTTP::Server::Directory::content.size(); + while (index != 0) + { + content_node = Jupiter::HTTP::Server::Directory::content.get(--index); + if (content_node->name_checksum == checksum && content_node->name.equals(content_name)) + { + delete Jupiter::HTTP::Server::Directory::content.remove(index); + return true; + } + } + + return false; + } + else // Call remove() on next directory in path + { + index = in_name_ref.find('/'); + Jupiter::ReferenceString dir_name; + if (index == Jupiter::INVALID_INDEX) + dir_name = in_name_ref; + else + dir_name = in_name_ref.substring(0U, index); + + in_name_ref.shiftRight(dir_name.size()); + Jupiter::HTTP::Server::Directory *directory; + checksum = dir_name.calcChecksum(); + index = Jupiter::HTTP::Server::Directory::directories.size(); + while (index != 0) + { + directory = Jupiter::HTTP::Server::Directory::directories.get(--index); + if (directory->name_checksum == checksum && directory->name.equals(dir_name)) + return directory->remove(in_name_ref, content_name); + } + } return false; } @@ -234,7 +275,8 @@ struct Jupiter::HTTP::Server::Data /** Foward functions */ void hook(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path, Content *in_content); bool remove(const Jupiter::ReadableString &hostname); - bool remove(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &name); + //bool remove(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &path); + bool remove(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &path, const Jupiter::ReadableString &name); bool has(const Jupiter::ReadableString &hostname); bool has(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &name); Jupiter::HTTP::Server::Host *find_host(const Jupiter::ReadableString &name); @@ -311,12 +353,12 @@ bool Jupiter::HTTP::Server::Data::remove(const Jupiter::ReadableString &hostname } // name: path/to/resource OR path/ -bool Jupiter::HTTP::Server::Data::remove(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &name) +bool Jupiter::HTTP::Server::Data::remove(const Jupiter::ReadableString &hostname, const Jupiter::ReadableString &path, const Jupiter::ReadableString &name) { Jupiter::HTTP::Server::Host *host = Jupiter::HTTP::Server::Data::find_host(hostname); if (host == nullptr) return false; - return host->remove(name); + return host->remove(path, name); } bool Jupiter::HTTP::Server::Data::has(const Jupiter::ReadableString &hostname) @@ -683,9 +725,14 @@ bool Jupiter::HTTP::Server::remove(const Jupiter::ReadableString &host) return Jupiter::HTTP::Server::data_->remove(host); } -bool Jupiter::HTTP::Server::remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &name) +/*bool Jupiter::HTTP::Server::remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path) +{ + return Jupiter::HTTP::Server::data_->remove(host, path); +}*/ + +bool Jupiter::HTTP::Server::remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path, const Jupiter::ReadableString &name) { - return Jupiter::HTTP::Server::data_->remove(host, name); + return Jupiter::HTTP::Server::data_->remove(host, path, name); } bool Jupiter::HTTP::Server::has(const Jupiter::ReadableString &host) diff --git a/Jupiter/HTTP_Server.h b/Jupiter/HTTP_Server.h index a3af2bd..f02edfc 100644 --- a/Jupiter/HTTP_Server.h +++ b/Jupiter/HTTP_Server.h @@ -72,7 +72,8 @@ namespace Jupiter unsigned int name_checksum; virtual void hook(const Jupiter::ReadableString &path, Content *in_content); - virtual bool remove(const Jupiter::ReadableString &name); + //virtual bool remove(const Jupiter::ReadableString &path); + virtual bool remove(const Jupiter::ReadableString &path, const Jupiter::ReadableString &name); virtual bool has(const Jupiter::ReadableString &name); virtual Jupiter::HTTP::Server::Content *find(const Jupiter::ReadableString &name); virtual Jupiter::ReadableString *execute(const Jupiter::ReadableString &name, const Jupiter::ReadableString &query_string); @@ -95,7 +96,8 @@ namespace Jupiter void hook(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path, Content *in_content); bool remove(const Jupiter::ReadableString &host); - bool remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &name); + //bool remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path); + bool remove(const Jupiter::ReadableString &host, const Jupiter::ReadableString &path, const Jupiter::ReadableString &name); bool has(const Jupiter::ReadableString &host); bool has(const Jupiter::ReadableString &host, const Jupiter::ReadableString &name); Content *find(const Jupiter::ReadableString &name); diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index 014753ddb7c90bd03340b50aa8b800d820bfc099..e8099df6fa22141b2fe8fe7f5c55e38ee87947b9 100644 GIT binary patch delta 30101 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