Main Page | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members

plurlsrc.h

00001 /*
00002 /--------------------------------------------------------------------
00003 |
00004 |      $Id: plurlsrc.h,v 1.3 2003/04/20 12:44:47 uzadow Exp $
00005 |
00006 |      Copyright (c) 1996-2002 Ulrich von Zadow
00007 |
00008 \--------------------------------------------------------------------
00009 */
00010 
00011 #ifndef INCL_PLURLSRC
00012 #define INCL_PLURLSRC
00013 
00014 #ifndef INCL_PLDATASRC
00015 #include "pldatasrc.h"
00016 #endif
00017 
00018 #include <string>
00019 #include <curl/curl.h>
00020 
00021 // Internal singleton class that initializes and deinitializes curl
00022 class PLCurlInitializer
00023 {
00024 public:
00025   CURL * getHandle();
00026   void finalize();
00027 
00028 private:
00029   friend class PLURLSource;
00030   PLCurlInitializer();
00031   ~PLCurlInitializer();
00032 
00033   CURL * m_CurlHandle;
00034 
00035 };
00036 
00037 // This is a class which takes a URL as a source of
00038 // picture data.
00039 class PLURLSource : public PLDataSource
00040 {
00041 public:
00042   //!
00043   PLURLSource
00044     ();
00045 
00046   //!
00047   virtual ~PLURLSource
00048     ();
00049 
00050   //!
00051   virtual int Open(const char *pURL);
00052 
00053   //!
00054   virtual void Close
00055     ();
00056 
00057   virtual PLBYTE * ReadNBytes
00058     ( int n
00059     );
00060 
00061   //! Read but don't advance file pointer.
00062   virtual PLBYTE * GetBufferPtr
00063     ( int MinBytesInBuffer
00064     );
00065 
00066   //! This is a legacy routine that interferes with progress notifications.
00067   //! Don't call it!
00068   virtual PLBYTE * ReadEverything
00069     ();
00070 
00071   const char * GetCurlErrStr ();
00072   int GetCurlErrCode ();
00073 
00074 private:
00075   static size_t WriteCurlData(void *ptr, size_t size, size_t nmemb, void *stream);
00076   const std::string httpErr2Str(int HTTPCode);
00077   // So curl gets initialized once only.
00078   static PLCurlInitializer s_CurlInitializer;
00079   std::string m_RawData;
00080   int m_CurPos;
00081 
00082   std::string m_sErrStr;
00083   int m_ErrCode;
00084 };
00085 
00086 #endif
00087 /*
00088 /--------------------------------------------------------------------
00089 |
00090 |      $Log: plurlsrc.h,v $
00091 |      Revision 1.3  2003/04/20 12:44:47  uzadow
00092 |      Added EXIF documentation.
00093 |
00094 |      Revision 1.2  2003/04/14 10:48:19  uzadow
00095 |      Added connection reuse capability to PLURLSource.
00096 |
00097 |      Revision 1.1  2003/02/15 21:26:58  uzadow
00098 |      Added win32 version of url data source.
00099 |
00100 |
00101 \--------------------------------------------------------------------
00102 */

Generated on Sun Jun 6 13:42:22 2004 for paintlib by doxygen 1.3.2