1 /** 2 * @copyright 3 * ==================================================================== 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 * ==================================================================== 21 * @endcopyright 22 * 23 * @file svn_dav.h 24 * @brief Code related to WebDAV/DeltaV usage in Subversion. 25 */ 26 27 28 29 30 #ifndef SVN_DAV_H 31 #define SVN_DAV_H 32 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif /* __cplusplus */ 37 38 39 /** This is the MIME type that Subversion uses for its "svndiff" format. 40 * 41 * This is an application type, for the "svn" vendor. The specific subtype 42 * is "svndiff". 43 */ 44 #define SVN_SVNDIFF_MIME_TYPE "application/vnd.svn-svndiff" 45 46 /** This is the MIME type that Subversion users for its "skel" format. 47 * 48 * This is an application type, for the "svn" vendor. The specific subtype 49 * is "skel". 50 * @since New in 1.7. 51 */ 52 #define SVN_SKEL_MIME_TYPE "application/vnd.svn-skel" 53 54 /** This header is *TEMPORARILY* used to transmit the delta base to the 55 * server. It contains a version resource URL for what is on the client. 56 * 57 * @note The HTTP delta draft recommends an If-None-Match header 58 * holding an entity tag corresponding to the base copy that the 59 * client has. In Subversion, it is much more natural to use a version 60 * URL to specify that base. We'd like, then, to use the If: header 61 * to specify the URL. Unfortunately, mod_dav sees all "State-token" 62 * items as lock tokens. So we'll use this custom header until mod_dav 63 * and other backend APIs are taught to be less rigid, at which time 64 * we can switch to using an If: header to report our base version. 65 */ 66 #define SVN_DAV_DELTA_BASE_HEADER "X-SVN-VR-Base" 67 68 /** This header is used when an svn client wants to trigger specific 69 * svn server behaviors. Normal WebDAV or DeltaV clients won't use it. 70 */ 71 #define SVN_DAV_OPTIONS_HEADER "X-SVN-Options" 72 73 /** 74 * @name options-header defines 75 * Specific options that can appear in the options-header: 76 * @{ 77 */ 78 #define SVN_DAV_OPTION_NO_MERGE_RESPONSE "no-merge-response" 79 #define SVN_DAV_OPTION_LOCK_BREAK "lock-break" 80 #define SVN_DAV_OPTION_LOCK_STEAL "lock-steal" 81 #define SVN_DAV_OPTION_RELEASE_LOCKS "release-locks" 82 #define SVN_DAV_OPTION_KEEP_LOCKS "keep-locks" 83 /** @} */ 84 85 /** This header is used when an svn client wants to tell mod_dav_svn 86 * exactly what revision of a resource it thinks it's operating on. 87 * (For example, an svn server can use it to validate a DELETE request.) 88 * Normal WebDAV or DeltaV clients won't use it. 89 */ 90 #define SVN_DAV_VERSION_NAME_HEADER "X-SVN-Version-Name" 91 92 /** A header generated by mod_dav_svn whenever it responds 93 successfully to a LOCK request. Only svn clients will notice it, 94 and use it to fill in svn_lock_t->creation_date. */ 95 #define SVN_DAV_CREATIONDATE_HEADER "X-SVN-Creation-Date" 96 97 /** A header generated by mod_dav_svn whenever it responds 98 successfully to a PROPFIND for the 'DAV:lockdiscovery' property. 99 Only svn clients will notice it, and use it to fill in 100 svn_lock_t->owner. (Remember that the DAV:owner field maps to 101 svn_lock_t->comment, and that there is no analogue in the DAV 102 universe of svn_lock_t->owner.) */ 103 #define SVN_DAV_LOCK_OWNER_HEADER "X-SVN-Lock-Owner" 104 105 /** Assuming the OPTIONS was performed against a resource within a 106 * Subversion repository, then this header indicates the youngest 107 * revision in the repository. 108 * @since New in 1.7. */ 109 #define SVN_DAV_YOUNGEST_REV_HEADER "SVN-Youngest-Rev" 110 111 /** Assuming the OPTIONS was performed against a resource within a 112 * Subversion repository, then this header indicates the UUID of the 113 * repository. 114 * @since New in 1.7. */ 115 #define SVN_DAV_REPOS_UUID_HEADER "SVN-Repository-UUID" 116 117 /** Presence of this in a DAV header in an OPTIONS response indicates 118 * that the server speaks HTTP protocol v2. This header provides an 119 * opaque URI that the client should send all custom REPORT requests 120 * against. 121 * @since New in 1.7. */ 122 #define SVN_DAV_ME_RESOURCE_HEADER "SVN-Me-Resource" 123 124 /** This header provides the repository root URI, suitable for use in 125 * calculating the relative paths of other public URIs for this 126 * repository into . (HTTP protocol v2 only) 127 * @since New in 1.7. */ 128 #define SVN_DAV_ROOT_URI_HEADER "SVN-Repository-Root" 129 130 /** This header provides an opaque URI that the client can append a 131 * revision to, to construct a 'revision URL'. This allows direct 132 * read/write access to revprops via PROPFIND or PROPPATCH, and is 133 * similar to libsvn_fs's revision objects (as distinct from "revision 134 * roots"). (HTTP protocol v2 only) 135 * @since New in 1.7. */ 136 #define SVN_DAV_REV_STUB_HEADER "SVN-Rev-Stub" 137 138 /** This header provides an opaque URI that the client can append 139 * PEGREV/PATH to, in order to construct URIs of pegged objects in the 140 * repository, similar to the use of a "revision root" in the 141 * libsvn_fs API. (HTTP protocol v2 only) 142 * @since New in 1.7. */ 143 #define SVN_DAV_REV_ROOT_STUB_HEADER "SVN-Rev-Root-Stub" 144 145 /** This header provides an opaque URI which represents a Subversion 146 * transaction (revision-in-progress) object. It is suitable for use 147 * in fetching and modifying transaction properties as part of a 148 * commit process, similar to the svn_fs_txn_t object (as distinct 149 * from a "txn root"). (HTTP protocol v2 only) 150 * @since New in 1.7. */ 151 #define SVN_DAV_TXN_STUB_HEADER "SVN-Txn-Stub" 152 153 /** Companion to @c SVN_DAV_TXN_STUB_HEADER, used when a POST request 154 * returns @c SVN_DAV_VTXN_NAME_HEADER in response to a client 155 * supplied name. (HTTP protocol v2 only) 156 * @since New in 1.7. */ 157 #define SVN_DAV_VTXN_STUB_HEADER "SVN-VTxn-Stub" 158 159 /** This header provides an opaque URI which represents the root 160 * directory of a Subversion transaction (revision-in-progress), 161 * similar to the concept of a "txn root" in the libsvn_fs API. The 162 * client can append additional path segments to it to access items 163 * deeper in the transaction tree as part of a commit process. (HTTP 164 * protocol v2 only) 165 * @since New in 1.7. */ 166 #define SVN_DAV_TXN_ROOT_STUB_HEADER "SVN-Txn-Root-Stub" 167 168 /** Companion to @c SVN_DAV_TXN_ROOT_STUB_HEADER, used when a POST 169 * request returns @c SVN_DAV_VTXN_NAME_HEADER in response to a 170 * client supplied name. (HTTP protocol v2 only) 171 * @since New in 1.7. */ 172 #define SVN_DAV_VTXN_ROOT_STUB_HEADER "SVN-VTxn-Root-Stub" 173 174 /** This header is used in the POST response to tell the client the 175 * name of the Subversion transaction created by the request. It can 176 * then be appended to the transaction stub and transaction root stub 177 * for access to the properties and paths, respectively, of the named 178 * transaction. (HTTP protocol v2 only) 179 * @since New in 1.7. */ 180 #define SVN_DAV_TXN_NAME_HEADER "SVN-Txn-Name" 181 182 /** This header is used in the POST request, to pass a client supplied 183 * alternative transaction name to the server, and in the POST 184 * response, to tell the client that the alternative transaction 185 * resource names should be used. (HTTP protocol v2 only) 186 * @since New in 1.7. */ 187 #define SVN_DAV_VTXN_NAME_HEADER "SVN-VTxn-Name" 188 189 /** This header is used in the OPTIONS response to identify named 190 * skel-based POST request types which the server is prepared to 191 * handle. (HTTP protocol v2 only) 192 * @since New in 1.8. */ 193 #define SVN_DAV_SUPPORTED_POSTS_HEADER "SVN-Supported-Posts" 194 195 /** This header is used in the OPTIONS response to indicate if the server 196 * wants bulk update requests (Prefer) or only accepts skelta requests (Off). 197 * If this value is On both options are allowed. 198 * @since New in 1.8. */ 199 #define SVN_DAV_ALLOW_BULK_UPDATES "SVN-Allow-Bulk-Updates" 200 201 /** Assuming the request target is a Subversion repository resource, 202 * this header is returned in the OPTIONS response to indicate whether 203 * the repository supports the merge tracking feature ("yes") or not 204 * ("no"). 205 * @since New in 1.8. */ 206 #define SVN_DAV_REPOSITORY_MERGEINFO "SVN-Repository-MergeInfo" 207 208 /** 209 * @name Fulltext MD5 headers 210 * 211 * These headers are for client and server to verify that the base 212 * and the result of a change transmission are the same on both 213 * sides, regardless of what transformations (svndiff deltification, 214 * gzipping, etc) the data may have gone through in between. 215 * 216 * The result md5 is always used whenever file contents are 217 * transferred, because every transmission has a resulting text. 218 * 219 * The base md5 is used to verify the base text against which svndiff 220 * data is being applied. Note that even for svndiff transmissions, 221 * base verification is not strictly necessary (and may therefore be 222 * unimplemented), as any error will be caught by the verification of 223 * the final result. However, if the problem is that the base text is 224 * corrupt, the error will be caught earlier if the base md5 is used. 225 * 226 * Normal WebDAV or DeltaV clients don't use these. 227 * @{ 228 */ 229 #define SVN_DAV_BASE_FULLTEXT_MD5_HEADER "X-SVN-Base-Fulltext-MD5" 230 #define SVN_DAV_RESULT_FULLTEXT_MD5_HEADER "X-SVN-Result-Fulltext-MD5" 231 /** @} */ 232 233 /* ### should add strings for the various XML elements in the reports 234 ### and things. also the custom prop names. etc. 235 */ 236 237 /** The svn-specific object that is placed within a <D:error> response. 238 * 239 * @defgroup svn_dav_error Errors in svn_dav 240 * @{ */ 241 242 /** The error object's namespace */ 243 #define SVN_DAV_ERROR_NAMESPACE "svn:" 244 245 /** The error object's tag */ 246 #define SVN_DAV_ERROR_TAG "error" 247 248 /** @} */ 249 250 251 /** General property (xml) namespaces that will be used by both ra_dav 252 * and mod_dav_svn for marshalling properties. 253 * 254 * @defgroup svn_dav_property_xml_namespaces DAV property namespaces 255 * @{ 256 */ 257 258 /** A property stored in the fs and wc, begins with 'svn:', and is 259 * interpreted either by client or server. 260 */ 261 #define SVN_DAV_PROP_NS_SVN "http://subversion.tigris.org/xmlns/svn/" 262 263 /** A property stored in the fs and wc, but totally ignored by svn 264 * client and server. 265 * 266 * A property simply invented by the users. 267 */ 268 #define SVN_DAV_PROP_NS_CUSTOM "http://subversion.tigris.org/xmlns/custom/" 269 270 /** A property purely generated and consumed by the network layer, not 271 * seen by either fs or wc. 272 */ 273 #define SVN_DAV_PROP_NS_DAV "http://subversion.tigris.org/xmlns/dav/" 274 275 276 /** 277 * @name Custom (extension) values for the DAV header. 278 * Note that although these share the SVN_DAV_PROP_NS_DAV namespace 279 * prefix, they are not properties; they are header values. 280 * @{ 281 */ 282 283 /* ################################################################## 284 * 285 * WARNING: At least some versions of Microsoft's Web Folders 286 * WebDAV client implementation are unable to handle 287 * DAV: headers with values longer than 63 characters, 288 * so please keep these strings within that limit. 289 * 290 * ################################################################## 291 */ 292 293 294 /** Presence of this in a DAV header in an OPTIONS request or response 295 * indicates that the transmitter supports @c svn_depth_t. 296 * 297 * @since New in 1.5. 298 */ 299 #define SVN_DAV_NS_DAV_SVN_DEPTH\ 300 SVN_DAV_PROP_NS_DAV "svn/depth" 301 302 /** Presence of this in a DAV header in an OPTIONS request or response 303 * indicates that the server knows how to handle merge-tracking 304 * information. 305 * 306 * Note that this says nothing about whether the repository can handle 307 * mergeinfo, only whether the server does. For more information, see 308 * mod_dav_svn/version.c:get_vsn_options(). 309 * 310 * @since New in 1.5. 311 */ 312 #define SVN_DAV_NS_DAV_SVN_MERGEINFO\ 313 SVN_DAV_PROP_NS_DAV "svn/mergeinfo" 314 315 /** Presence of this in a DAV header in an OPTIONS response indicates 316 * that the transmitter (in this case, the server) knows how to send 317 * custom revprops in log responses. 318 * 319 * @since New in 1.5. 320 */ 321 #define SVN_DAV_NS_DAV_SVN_LOG_REVPROPS\ 322 SVN_DAV_PROP_NS_DAV "svn/log-revprops" 323 324 /** Presence of this in a DAV header in an OPTIONS response indicates 325 * that the transmitter (in this case, the server) knows how to handle 326 * a replay of a directory in the repository (not root). 327 * 328 * @since New in 1.5. 329 */ 330 #define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\ 331 SVN_DAV_PROP_NS_DAV "svn/partial-replay" 332 333 /** Presence of this in a DAV header in an OPTIONS response indicates 334 * that the transmitter (in this case, the server) knows how to enforce 335 * old-value atomicity in PROPPATCH (for editing revprops). 336 * 337 * @since New in 1.7. 338 */ 339 #define SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS\ 340 SVN_DAV_PROP_NS_DAV "svn/atomic-revprops" 341 342 /** Presence of this in a DAV header in an OPTIONS response indicates 343 * that the transmitter (in this case, the server) knows how to get 344 * inherited properties. 345 * 346 * @since New in 1.8. 347 */ 348 #define SVN_DAV_NS_DAV_SVN_INHERITED_PROPS\ 349 SVN_DAV_PROP_NS_DAV "svn/inherited-props" 350 351 /** Presence of this in a DAV header in an OPTIONS response indicates 352 * that the transmitter (in this case, the server) knows how to 353 * properly handle ephemeral (that is, deleted-just-before-commit) FS 354 * transaction properties. 355 * 356 * @since New in 1.8. 357 */ 358 #define SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS\ 359 SVN_DAV_PROP_NS_DAV "svn/ephemeral-txnprops" 360 361 /** Presence of this in a DAV header in an OPTIONS response indicates 362 * that the transmitter (in this case, the server) supports serving 363 * properties inline in update editor when 'send-all' is 'false'. 364 * 365 * @since New in 1.8. 366 */ 367 #define SVN_DAV_NS_DAV_SVN_INLINE_PROPS\ 368 SVN_DAV_PROP_NS_DAV "svn/inline-props" 369 370 /** Presence of this in a DAV header in an OPTIONS response indicates 371 * that the transmitter (in this case, the server) knows how to handle 372 * a replay of a revision resource. Transmitters must be 373 * HTTP-v2-enabled to support this feature. 374 * 375 * @since New in 1.8. 376 */ 377 #define SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE\ 378 SVN_DAV_PROP_NS_DAV "svn/replay-rev-resource" 379 380 /** Presence of this in a DAV header in an OPTIONS response indicates 381 * that the transmitter (in this case, the server) knows how to handle 382 * a reversed fetch of file versions. 383 * 384 * @since New in 1.8. 385 */ 386 #define SVN_DAV_NS_DAV_SVN_REVERSE_FILE_REVS\ 387 SVN_DAV_PROP_NS_DAV "svn/reverse-file-revs" 388 389 /** Presence of this in a DAV header in an OPTIONS response indicates 390 * that the transmitter (in this case, the server) knows how to handle 391 * svndiff1 format encoding. 392 * 393 * @since New in 1.10. 394 */ 395 #define SVN_DAV_NS_DAV_SVN_SVNDIFF1\ 396 SVN_DAV_PROP_NS_DAV "svn/svndiff1" 397 398 /** Presence of this in a DAV header in an OPTIONS response indicates 399 * that the transmitter (in this case, the server) knows how to handle 400 * 'list' requests. 401 * 402 * @since New in 1.10. 403 */ 404 #define SVN_DAV_NS_DAV_SVN_LIST\ 405 SVN_DAV_PROP_NS_DAV "svn/list" 406 407 /** Presence of this in a DAV header in an OPTIONS response indicates 408 * that the transmitter (in this case, the server) knows how to handle 409 * svndiff2 format encoding. 410 * 411 * @since New in 1.10. 412 */ 413 #define SVN_DAV_NS_DAV_SVN_SVNDIFF2\ 414 SVN_DAV_PROP_NS_DAV "svn/svndiff2" 415 416 /** Presence of this in a DAV header in an OPTIONS response indicates 417 * that the transmitter (in this case, the server) sends the result 418 * checksum in the response to a successful PUT request. 419 * 420 * @since New in 1.10. 421 */ 422 #define SVN_DAV_NS_DAV_SVN_PUT_RESULT_CHECKSUM\ 423 SVN_DAV_PROP_NS_DAV "svn/put-result-checksum" 424 425 /** @} */ 426 427 /** @} */ 428 429 #ifdef __cplusplus 430 } 431 #endif /* __cplusplus */ 432 433 #endif /* SVN_DAV_H */ 434