1 /* 2 * The contents of this file are subject to the Mozilla Public 3 * License Version 1.1 (the "License"); you may not use this file 4 * except in compliance with the License. You may obtain a copy of 5 * the License at http://www.mozilla.org/MPL/ 6 * 7 * Software distributed under the License is distributed on an "AS 8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 9 * implied. See the License for the specific language governing 10 * rights and limitations under the License. 11 * 12 * The Original Code is the Sablotron XSLT Processor. 13 * 14 * The Initial Developer of the Original Code is Ginger Alliance Ltd. 15 * Portions created by Ginger Alliance are Copyright (C) 2000-2002 16 * Ginger Alliance Ltd. All Rights Reserved. 17 * 18 * Contributor(s): 19 * 20 * Alternatively, the contents of this file may be used under the 21 * terms of the GNU General Public License Version 2 or later (the 22 * "GPL"), in which case the provisions of the GPL are applicable 23 * instead of those above. If you wish to allow use of your 24 * version of this file only under the terms of the GPL and not to 25 * allow others to use your version of this file under the MPL, 26 * indicate your decision by deleting the provisions above and 27 * replace them with the notice and other provisions required by 28 * the GPL. If you do not delete the provisions above, a recipient 29 * may use your version of this file under either the MPL or the 30 * GPL. 31 */ 32 33 /***************************************************************** 34 uri.h 35 Sablotron XSLT processor project 36 37 This module does the work related to retrieving data in answer to 38 a URI request. 39 *****************************************************************/ 40 41 #ifndef UriHIncl 42 #define UriHIncl 43 44 // GP; clean 45 46 #include "base.h" 47 #include "shandler.h" 48 #include "datastr.h" 49 50 /* URIScheme 51 possible URI schemes for a DataLine 52 - file 53 - arg for access to named buffers 54 - other scheme to by handled by an extension (a SchemeHandler) 55 */ 56 typedef enum 57 { 58 URI_FILE, URI_ARG, URI_EXTENSION, URI_NONE 59 } URIScheme; 60 61 /***************************************************************** 62 makeAbsoluteURI() 63 64 merges a (possibly relative) URI reference with a base URI. 65 ARGS 66 uri the URI reference 67 base the base URI 68 RETURNS 69 absolute the result 70 *****************************************************************/ 71 72 73 URIScheme makeAbsoluteURI(Sit S, const char* uri, 74 const char* base, Str& absolute); 75 URIScheme uri2SchemePath(Sit S, const char *absolute, Str& scheme, Str& rest); 76 77 78 /* DLAccessMode 79 possible access modes for a DataLine 80 */ 81 82 typedef enum 83 { 84 DLMODE_NONE, DLMODE_READ, DLMODE_WRITE, DLMODE_CLOSED 85 } DLAccessMode; 86 87 /***************************************************************** 88 DataLine 89 a class associated to any data source or destination at a given URI; 90 - can be open for reading or for writing 91 - 'Processor' class has a list of open DataLines 92 together with the associated trees (serving as a cache) 93 *****************************************************************/ 94 95 class StrStrList; 96 97 class DataLine 98 { 99 public: 100 DataLine(); 101 ~DataLine(); 102 // opens the resource at _uri for reading/writing based on _mode: 103 eFlag open(Sit S, const char *_uri, DLAccessMode _mode, 104 StrStrList* argList_, Bool ignoreErr = FALSE); 105 eFlag close(Sit S); 106 // sends data to the resource 107 eFlag save(Sit S, const char *data, int len); 108 int get(Sit S, char *where, int maxcount); 109 DynBlock* getOutBuffer(); 110 Str fullUri; 111 DLAccessMode mode; 112 URIScheme scheme; 113 eFlag setURIAndClose(Sit S, const char *_uri); 114 private: 115 FILE *f; 116 char *buffer; 117 DynBlock *outBuf; 118 int bufCurr; 119 SchemeHandler *handler; 120 void *handlerUD; 121 int handle; 122 Bool 123 fileIsStd, 124 utf16Encoded, 125 gotWholeDocument; 126 void report(Sit S, MsgType type, MsgCode code, const Str& arg1, const Str& arg2); 127 }; 128 129 #endif 130