Modified version of NetServices. Fixes an issue where connections failed should the HTTP response status line be received in a packet on its own prior to any further headers. Changes are made to the HTTPClient.cpp file's readHeaders method.

Committer:
andrewbonney
Date:
Fri Apr 08 14:39:41 2011 +0000
Revision:
0:ec559500a63f

        

Who changed what in which revision?

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