1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "UrlHandler.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "microhttpd.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "../Request.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "../Response.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotusing namespace Response; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotbool ImgHandler::canHandle(const char* method, const char* url) { 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const char* kBasePath = "/img"; 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0 == strcmp(method, MHD_HTTP_METHOD_GET) && 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 0 == strncmp(url, kBasePath, strlen(kBasePath)); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotint ImgHandler::handle(Request* request, MHD_Connection* connection, 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* url, const char* method, 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* upload_data, size_t* upload_data_size) { 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTArray<SkString> commands; 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkStrSplit(url, "/", &commands); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!request->hasPicture() || commands.count() > 3) { 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return MHD_NO; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int n, m = -1; 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // /img or /img/N 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (commands.count() == 1) { 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot n = request->fDebugCanvas->getSize() - 1; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } else if (commands.count() == 2) { 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sscanf(commands[1].c_str(), "%d", &n); 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } else { 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sscanf(commands[1].c_str(), "%d", &n); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sscanf(commands[2].c_str(), "%d", &m); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkData> data(request->drawToPng(n, m)); 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SendData(connection, data.get(), "image/png"); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 46