Copy of NetServicesMin with the HTTP Client library. Includes modification for HTTP servers which send the HTTP status line in its own packet.

Committer:
andrewbonney
Date:
Thu May 26 10:02:40 2011 +0000
Revision:
0:18dd877d2c77

        

Who changed what in which revision?

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