Fork of HttpServer_snapshot_mbed-os library
Fork of HttpServer_snapshot_mbed-os by
Handler/SnapshotHandler.cpp@12:95cc47e42b79, 2017-06-06 (annotated)
- Committer:
- dkato
- Date:
- Tue Jun 06 01:39:39 2017 +0000
- Revision:
- 12:95cc47e42b79
- Parent:
- 11:0700755d64ae
- Child:
- 13:d3571c244759
Fixed a bug that could not send large images.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkato | 6:d9e6379eefac | 1 | /******************************************************************************* |
dkato | 6:d9e6379eefac | 2 | * DISCLAIMER |
dkato | 6:d9e6379eefac | 3 | * This software is supplied by Renesas Electronics Corporation and is only |
dkato | 6:d9e6379eefac | 4 | * intended for use with Renesas products. No other uses are authorized. This |
dkato | 6:d9e6379eefac | 5 | * software is owned by Renesas Electronics Corporation and is protected under |
dkato | 6:d9e6379eefac | 6 | * all applicable laws, including copyright laws. |
dkato | 6:d9e6379eefac | 7 | * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING |
dkato | 6:d9e6379eefac | 8 | * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT |
dkato | 6:d9e6379eefac | 9 | * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
dkato | 6:d9e6379eefac | 10 | * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. |
dkato | 6:d9e6379eefac | 11 | * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS |
dkato | 6:d9e6379eefac | 12 | * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE |
dkato | 6:d9e6379eefac | 13 | * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR |
dkato | 6:d9e6379eefac | 14 | * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE |
dkato | 6:d9e6379eefac | 15 | * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
dkato | 6:d9e6379eefac | 16 | * Renesas reserves the right, without notice, to make changes to this software |
dkato | 6:d9e6379eefac | 17 | * and to discontinue the availability of this software. By using this software, |
dkato | 6:d9e6379eefac | 18 | * you agree to the additional terms and conditions found by accessing the |
dkato | 6:d9e6379eefac | 19 | * following link: |
dkato | 6:d9e6379eefac | 20 | * http://www.renesas.com/disclaimer* |
dkato | 6:d9e6379eefac | 21 | * Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved. |
dkato | 6:d9e6379eefac | 22 | *******************************************************************************/ |
dkato | 6:d9e6379eefac | 23 | |
dkato | 6:d9e6379eefac | 24 | #include "SnapshotHandler.h" |
dkato | 6:d9e6379eefac | 25 | |
dkato | 6:d9e6379eefac | 26 | int (*SnapshotHandler::callback_func_req)(const char ** pp_data); |
dkato | 6:d9e6379eefac | 27 | Semaphore SnapshotHandler::req_sem(1); |
dkato | 6:d9e6379eefac | 28 | |
dkato | 6:d9e6379eefac | 29 | |
dkato | 11:0700755d64ae | 30 | SnapshotHandler::SnapshotHandler(const char* rootPath, const char* path, TCPSocket* pTCPSocket) : HTTPRequestHandler(rootPath, path, pTCPSocket), m_err404(false) |
dkato | 6:d9e6379eefac | 31 | { |
dkato | 6:d9e6379eefac | 32 | } |
dkato | 6:d9e6379eefac | 33 | |
dkato | 6:d9e6379eefac | 34 | SnapshotHandler::~SnapshotHandler() |
dkato | 6:d9e6379eefac | 35 | { |
dkato | 6:d9e6379eefac | 36 | } |
dkato | 6:d9e6379eefac | 37 | |
dkato | 6:d9e6379eefac | 38 | void SnapshotHandler::doGet() |
dkato | 6:d9e6379eefac | 39 | { |
dkato | 6:d9e6379eefac | 40 | const char * p_data = NULL; |
dkato | 6:d9e6379eefac | 41 | int size = 0; |
dkato | 6:d9e6379eefac | 42 | |
dkato | 6:d9e6379eefac | 43 | req_sem.wait(); |
dkato | 6:d9e6379eefac | 44 | if (callback_func_req != NULL) { |
dkato | 6:d9e6379eefac | 45 | size = callback_func_req(&p_data); |
dkato | 6:d9e6379eefac | 46 | } |
dkato | 6:d9e6379eefac | 47 | |
dkato | 6:d9e6379eefac | 48 | if ((p_data == NULL) || (size <= 0)) { |
dkato | 6:d9e6379eefac | 49 | m_err404 = true; |
dkato | 6:d9e6379eefac | 50 | setErrCode(404); |
dkato | 6:d9e6379eefac | 51 | const char* msg = "File not found."; |
dkato | 6:d9e6379eefac | 52 | setContentLen(strlen(msg)); |
dkato | 6:d9e6379eefac | 53 | respHeaders()["Content-Type"] = "text/html"; |
dkato | 6:d9e6379eefac | 54 | respHeaders()["Connection"] = "close"; |
dkato | 6:d9e6379eefac | 55 | writeData(msg,strlen(msg)); //Only send header |
dkato | 6:d9e6379eefac | 56 | printf("\r\nExit SnapshotHandler::doGet() w Error 404\r\n"); |
dkato | 6:d9e6379eefac | 57 | req_sem.release(); |
dkato | 6:d9e6379eefac | 58 | return; |
dkato | 6:d9e6379eefac | 59 | } |
dkato | 6:d9e6379eefac | 60 | send_data_buf = p_data; |
dkato | 6:d9e6379eefac | 61 | send_size = size; |
dkato | 6:d9e6379eefac | 62 | send_index = 0; |
dkato | 6:d9e6379eefac | 63 | |
dkato | 6:d9e6379eefac | 64 | //Response |
dkato | 6:d9e6379eefac | 65 | setContentLen(send_size); |
dkato | 6:d9e6379eefac | 66 | |
dkato | 6:d9e6379eefac | 67 | //Make sure that the browser won't cache this request |
dkato | 6:d9e6379eefac | 68 | respHeaders()["Cache-Control"] = "no-store"; |
dkato | 6:d9e6379eefac | 69 | respHeaders()["Pragma"] = "no-cache"; |
dkato | 6:d9e6379eefac | 70 | respHeaders()["Expires"] = "0"; |
dkato | 6:d9e6379eefac | 71 | |
dkato | 6:d9e6379eefac | 72 | //Write data |
dkato | 6:d9e6379eefac | 73 | respHeaders()["Connection"] = "close"; |
dkato | 6:d9e6379eefac | 74 | onWriteable(); |
dkato | 6:d9e6379eefac | 75 | |
dkato | 6:d9e6379eefac | 76 | req_sem.release(); |
dkato | 6:d9e6379eefac | 77 | } |
dkato | 6:d9e6379eefac | 78 | |
dkato | 6:d9e6379eefac | 79 | void SnapshotHandler::doPost() |
dkato | 6:d9e6379eefac | 80 | { |
dkato | 6:d9e6379eefac | 81 | |
dkato | 6:d9e6379eefac | 82 | } |
dkato | 6:d9e6379eefac | 83 | |
dkato | 6:d9e6379eefac | 84 | void SnapshotHandler::doHead() |
dkato | 6:d9e6379eefac | 85 | { |
dkato | 6:d9e6379eefac | 86 | |
dkato | 6:d9e6379eefac | 87 | } |
dkato | 6:d9e6379eefac | 88 | |
dkato | 6:d9e6379eefac | 89 | void SnapshotHandler::onReadable() //Data has been read |
dkato | 6:d9e6379eefac | 90 | { |
dkato | 6:d9e6379eefac | 91 | |
dkato | 6:d9e6379eefac | 92 | } |
dkato | 6:d9e6379eefac | 93 | |
dkato | 6:d9e6379eefac | 94 | void SnapshotHandler::onWriteable() //Data has been written & buf is free |
dkato | 6:d9e6379eefac | 95 | { |
dkato | 6:d9e6379eefac | 96 | if (m_err404) { |
dkato | 6:d9e6379eefac | 97 | //Error has been served, now exit |
dkato | 6:d9e6379eefac | 98 | close(); |
dkato | 6:d9e6379eefac | 99 | } else { |
dkato | 6:d9e6379eefac | 100 | while (true) { |
dkato | 6:d9e6379eefac | 101 | int len = send_size - send_index; |
dkato | 6:d9e6379eefac | 102 | if (len > 0) { |
dkato | 6:d9e6379eefac | 103 | int writtenLen = writeData((char *)&send_data_buf[send_index], len); |
dkato | 6:d9e6379eefac | 104 | if (writtenLen < 0) { //Socket error |
dkato | 6:d9e6379eefac | 105 | close(); |
dkato | 6:d9e6379eefac | 106 | return; |
dkato | 6:d9e6379eefac | 107 | } else { |
dkato | 6:d9e6379eefac | 108 | send_index += writtenLen; |
dkato | 6:d9e6379eefac | 109 | } |
dkato | 6:d9e6379eefac | 110 | } else { |
dkato | 6:d9e6379eefac | 111 | close(); |
dkato | 6:d9e6379eefac | 112 | return; |
dkato | 6:d9e6379eefac | 113 | } |
dkato | 6:d9e6379eefac | 114 | } |
dkato | 6:d9e6379eefac | 115 | } |
dkato | 6:d9e6379eefac | 116 | } |
dkato | 6:d9e6379eefac | 117 | |
dkato | 6:d9e6379eefac | 118 | void SnapshotHandler::onClose() //Connection is closing |
dkato | 6:d9e6379eefac | 119 | { |
dkato | 6:d9e6379eefac | 120 | //Nothing to do |
dkato | 6:d9e6379eefac | 121 | } |
dkato | 11:0700755d64ae | 122 |