Dependents:   TimeZoneDemo EthernetJackTestCode MMEx_Challenge ntp_mem ... more

Committer:
segundo
Date:
Tue Nov 09 20:54:15 2010 +0000
Revision:
0:ac1725ba162c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
segundo 0:ac1725ba162c 1
segundo 0:ac1725ba162c 2 /*
segundo 0:ac1725ba162c 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
segundo 0:ac1725ba162c 4
segundo 0:ac1725ba162c 5 Permission is hereby granted, free of charge, to any person obtaining a copy
segundo 0:ac1725ba162c 6 of this software and associated documentation files (the "Software"), to deal
segundo 0:ac1725ba162c 7 in the Software without restriction, including without limitation the rights
segundo 0:ac1725ba162c 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
segundo 0:ac1725ba162c 9 copies of the Software, and to permit persons to whom the Software is
segundo 0:ac1725ba162c 10 furnished to do so, subject to the following conditions:
segundo 0:ac1725ba162c 11
segundo 0:ac1725ba162c 12 The above copyright notice and this permission notice shall be included in
segundo 0:ac1725ba162c 13 all copies or substantial portions of the Software.
segundo 0:ac1725ba162c 14
segundo 0:ac1725ba162c 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
segundo 0:ac1725ba162c 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
segundo 0:ac1725ba162c 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
segundo 0:ac1725ba162c 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
segundo 0:ac1725ba162c 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
segundo 0:ac1725ba162c 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
segundo 0:ac1725ba162c 21 THE SOFTWARE.
segundo 0:ac1725ba162c 22 */
segundo 0:ac1725ba162c 23
segundo 0:ac1725ba162c 24 /** \file
segundo 0:ac1725ba162c 25 HTTP File data source/sink header file
segundo 0:ac1725ba162c 26 */
segundo 0:ac1725ba162c 27
segundo 0:ac1725ba162c 28 #ifndef HTTP_FILE_H
segundo 0:ac1725ba162c 29 #define HTTP_FILE_H
segundo 0:ac1725ba162c 30
segundo 0:ac1725ba162c 31 #include "../HTTPData.h"
segundo 0:ac1725ba162c 32 #include "mbed.h"
segundo 0:ac1725ba162c 33
segundo 0:ac1725ba162c 34 ///HTTP Client data container for files
segundo 0:ac1725ba162c 35 /**
segundo 0:ac1725ba162c 36 This class provides file access/storage for HTTP requests and responses' data payloads.
segundo 0:ac1725ba162c 37
segundo 0:ac1725ba162c 38
segundo 0:ac1725ba162c 39 */
segundo 0:ac1725ba162c 40 class HTTPFile : public HTTPData //Read or Write data from a file
segundo 0:ac1725ba162c 41 {
segundo 0:ac1725ba162c 42 public:
segundo 0:ac1725ba162c 43 ///Instantiates data source/sink with file in param.
segundo 0:ac1725ba162c 44 /**
segundo 0:ac1725ba162c 45 Uses file at path @a path.
segundo 0:ac1725ba162c 46 It will be opened when some data has to be read/written from/to it and closed when this operation is complete or on destruction of the instance.
segundo 0:ac1725ba162c 47 Note that the file will be opened with mode "w" for writing and mode "r" for reading, so the file will be cleared between each request if you are using it for writing.
segundo 0:ac1725ba162c 48
segundo 0:ac1725ba162c 49 @note
segundo 0:ac1725ba162c 50 Note that to use this you must instantiate a proper file system (such as the LocalFileSystem or the SDFileSystem).
segundo 0:ac1725ba162c 51 */
segundo 0:ac1725ba162c 52 HTTPFile(const char* path);
segundo 0:ac1725ba162c 53 virtual ~HTTPFile();
segundo 0:ac1725ba162c 54
segundo 0:ac1725ba162c 55 ///Forces file closure
segundo 0:ac1725ba162c 56 virtual void clear();
segundo 0:ac1725ba162c 57
segundo 0:ac1725ba162c 58 protected:
segundo 0:ac1725ba162c 59 virtual int read(char* buf, int len);
segundo 0:ac1725ba162c 60 virtual int write(const char* buf, int len);
segundo 0:ac1725ba162c 61
segundo 0:ac1725ba162c 62 virtual string getDataType(); //Internet media type for Content-Type header
segundo 0:ac1725ba162c 63 virtual void setDataType(const string& type); //Internet media type from Content-Type header
segundo 0:ac1725ba162c 64
segundo 0:ac1725ba162c 65 virtual bool getIsChunked(); //For Transfer-Encoding header
segundo 0:ac1725ba162c 66 virtual void setIsChunked(bool chunked); //From Transfer-Encoding header virtual
segundo 0:ac1725ba162c 67
segundo 0:ac1725ba162c 68 virtual int getDataLen(); //For Content-Length header
segundo 0:ac1725ba162c 69 virtual void setDataLen(int len); //From Content-Length header
segundo 0:ac1725ba162c 70
segundo 0:ac1725ba162c 71 private:
segundo 0:ac1725ba162c 72 bool openFile(const char* mode); //true on success, false otherwise
segundo 0:ac1725ba162c 73 void closeFile();
segundo 0:ac1725ba162c 74
segundo 0:ac1725ba162c 75 FILE* m_fp;
segundo 0:ac1725ba162c 76 string m_path;
segundo 0:ac1725ba162c 77 int m_len;
segundo 0:ac1725ba162c 78 bool m_chunked;
segundo 0:ac1725ba162c 79 };
segundo 0:ac1725ba162c 80
segundo 0:ac1725ba162c 81 #endif