C/C++ User's Journal STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ... ATLSTL - where the Standard Template Library meets the Active Template Library COMSTL - where the Standard Template Library meets the Component Object Model
Synesis Software InetSTL - where the Standard Template Library meets the Internet UNIXSTL - Template Software for the UNIX Operating System WinSTL - where the Standard Template Library meets the Win32 API

H:/freelibs/recls/current/src/ReclsFtpSearch.hpp

00001 /* /////////////////////////////////////////////////////////////////////////////
00002  * File:        ReclsFtpSearch.hpp
00003  *
00004  * Purpose:     Definition of the ReclsFtpSearch class.
00005  *
00006  * Created:     31st May 2004
00007  * Updated:     3rd October 2006
00008  *
00009  * Home:        http://recls.org/
00010  *
00011  * Copyright (c) 2004-2006, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without 
00015  * modification, are permitted provided that the following conditions are met:
00016  *
00017  * - Redistributions of source code must retain the above copyright notice, this
00018  *   list of conditions and the following disclaimer. 
00019  * - Redistributions in binary form must reproduce the above copyright notice,
00020  *   this list of conditions and the following disclaimer in the documentation
00021  *   and/or other materials provided with the distribution.
00022  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of
00023  *   any contributors may be used to endorse or promote products derived from
00024  *   this software without specific prior written permission.
00025  *
00026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00036  * POSSIBILITY OF SUCH DAMAGE.
00037  *
00038  * ////////////////////////////////////////////////////////////////////////// */
00039 
00040 
00044 /* /////////////////////////////////////////////////////////////////////////////
00045  * Includes
00046  */
00047 
00048 #include <recls/recls.h>
00049 #include "ReclsSearch.hpp"
00050 
00051 #include <inetstl/inetstl.h>
00052 
00053 /* /////////////////////////////////////////////////////////////////////////////
00054  * Namespace
00055  */
00056 
00057 #if !defined(RECLS_NO_NAMESPACE)
00058 namespace recls
00059 {
00060 #endif /* !RECLS_NO_NAMESPACE */
00061 
00062 /* /////////////////////////////////////////////////////////////////////////////
00063  * Forward declarations
00064  */
00065 
00066 class ReclsFtpSearchDirectoryNode;
00067 
00068 /* /////////////////////////////////////////////////////////////////////////////
00069  * Classes
00070  */
00071 
00072 // class ReclsFtpSearch
00076 class ReclsFtpSearch
00077     : public ReclsSearch
00078 {
00079 public:
00080     typedef ReclsFtpSearch  class_type;
00081 
00082 // Allocation
00083 private:
00084     void *operator new(size_t cb, size_t cDirParts, size_t cbRootDir);
00085 #ifdef RECLS_COMPILER_REQUIRES_MATCHING_PLACEMENT_DELETE
00086     void operator delete(void *pv, size_t cDirParts, size_t cbRootDir); 
00087 #endif /* RECLS_COMPILER_REQUIRES_MATCHING_PLACEMENT_DELETE */
00088 public:
00089     void operator delete(void *pv);
00090 
00091 // Construction
00092 protected:
00093     ReclsFtpSearch( HINTERNET           hSess
00094                 ,   HINTERNET           hConn
00095                 ,   size_t              cDirParts
00096                 ,   recls_char_t const  *rootDir
00097                 ,   recls_char_t const  *pattern
00098                 ,   recls_uint32_t      flags);
00099     ~ReclsFtpSearch();
00100 public:
00101     static recls_rc_t FindAndCreate(recls_char_t const  *host
00102                                 ,   recls_char_t const  *username
00103                                 ,   recls_char_t const  *password
00104                                 ,   recls_char_t const  *rootDir
00105                                 ,   recls_char_t const  *pattern
00106                                 ,   recls_uint32_t      flags
00107                                 ,   class_type          **ppsi);
00108 
00109 // Implementation
00110 private:
00111     recls_char_t const *calc_rootDir_(size_t cDirParts, recls_char_t const *rootDir);
00112 
00113 // Members
00114 private:
00115     HINTERNET const             m_session;
00116     HINTERNET const             m_connection;
00117     recls_uint32_t              m_flags;
00118     recls_char_t const * const  m_rootDir;
00119 
00121     recls_byte_t                data[1];
00122     /*
00123      * The data comprises:
00124      *
00125      *  - root dir
00126      *
00127      */
00128 
00129 // Not to be implemented
00130 private:
00131     ReclsFtpSearch(class_type const &);
00132     class_type &operator =(class_type const &);
00133 };
00134 
00135 /* /////////////////////////////////////////////////////////////////////////////
00136  * Namespace
00137  */
00138 
00139 #if !defined(RECLS_NO_NAMESPACE)
00140 } /* namespace recls */
00141 #endif /* !RECLS_NO_NAMESPACE */
00142 
00143 /* ////////////////////////////////////////////////////////////////////////// */

recls Library documentation © Synesis Software Pty Ltd, 2001-2006