X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fjson_server.cc;h=92d5c117152f837e4ba11624426f8c89cecd942d;hb=7274622a833c05eee36b7e59d8ec2ca3e136d140;hp=dd56b3124fea46550a2921ea96e813dd4a71f213;hpb=3339d3bce70afe9ae2ca10e9fcfc4b54b748fbf4;p=dcpomatic.git diff --git a/src/lib/json_server.cc b/src/lib/json_server.cc index dd56b3124..92d5c1171 100644 --- a/src/lib/json_server.cc +++ b/src/lib/json_server.cc @@ -19,11 +19,10 @@ */ -#include "json_server.h" -#include "job_manager.h" -#include "job.h" -#include "util.h" #include "film.h" +#include "job.h" +#include "job_manager.h" +#include "json_server.h" #include "transcode_job.h" #include #include @@ -32,14 +31,15 @@ #include -using std::string; using std::cout; -using std::map; +using std::dynamic_pointer_cast; using std::list; -using boost::thread; +using std::make_shared; +using std::map; using std::shared_ptr; -using std::dynamic_pointer_cast; +using std::string; using boost::asio::ip::tcp; +using boost::thread; using dcp::raw_convert; @@ -74,7 +74,7 @@ try tcp::acceptor a (io_service, tcp::endpoint (tcp::v4 (), port)); while (true) { try { - shared_ptr s (new tcp::socket (io_service)); + auto s = make_shared(io_service); a.accept (*s); handle (s); } @@ -151,6 +151,53 @@ JSONServer::handle (shared_ptr socket) } +map +split_get_request(string url) +{ + enum { + AWAITING_QUESTION_MARK, + KEY, + VALUE + } state = AWAITING_QUESTION_MARK; + + map r; + string k; + string v; + for (size_t i = 0; i < url.length(); ++i) { + switch (state) { + case AWAITING_QUESTION_MARK: + if (url[i] == '?') { + state = KEY; + } + break; + case KEY: + if (url[i] == '=') { + v.clear(); + state = VALUE; + } else { + k += url[i]; + } + break; + case VALUE: + if (url[i] == '&') { + r.insert(make_pair(k, v)); + k.clear (); + state = KEY; + } else { + v += url[i]; + } + break; + } + } + + if (state == VALUE) { + r.insert (make_pair (k, v)); + } + + return r; +} + + void JSONServer::request (string url, shared_ptr socket) {