summaryrefslogtreecommitdiff
path: root/subversion/libsvn_ra_neon/ra_neon.h
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_ra_neon/ra_neon.h')
-rw-r--r--subversion/libsvn_ra_neon/ra_neon.h1189
1 files changed, 0 insertions, 1189 deletions
diff --git a/subversion/libsvn_ra_neon/ra_neon.h b/subversion/libsvn_ra_neon/ra_neon.h
deleted file mode 100644
index 5dd0211..0000000
--- a/subversion/libsvn_ra_neon/ra_neon.h
+++ /dev/null
@@ -1,1189 +0,0 @@
-/*
- * ra_neon.h : Private declarations for the Neon-based DAV RA module.
- *
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- */
-
-
-
-#ifndef SVN_LIBSVN_RA_NEON_H
-#define SVN_LIBSVN_RA_NEON_H
-
-#include <apr_pools.h>
-#include <apr_tables.h>
-
-#include <ne_request.h>
-#include <ne_uri.h>
-#include <ne_207.h> /* for NE_ELM_207_UNUSED */
-#include <ne_props.h> /* for ne_propname */
-
-#include "svn_types.h"
-#include "svn_string.h"
-#include "svn_delta.h"
-#include "svn_ra.h"
-#include "svn_dav.h"
-
-#include "private/svn_dav_protocol.h"
-#include "svn_private_config.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-
-/* Rename these types and constants to abstract from Neon */
-
-#define SVN_RA_NEON__XML_DECLINE NE_XML_DECLINE
-#define SVN_RA_NEON__XML_INVALID NE_XML_ABORT
-
-#define SVN_RA_NEON__XML_CDATA (1<<1)
-#define SVN_RA_NEON__XML_COLLECT ((1<<2) | SVN_RA_NEON__XML_CDATA)
-
-/* ### Related to anonymous enum below? */
-typedef int svn_ra_neon__xml_elmid;
-
-/** XML element */
-typedef struct svn_ra_neon__xml_elm_t {
- /** XML namespace. */
- const char *nspace;
-
- /** XML tag name. */
- const char *name;
-
- /** XML tag id to be passed to a handler. */
- svn_ra_neon__xml_elmid id;
-
- /** Processing flags for this namespace:tag.
- *
- * 0 (zero) - regular element, may have children,
- * SVN_RA_NEON__XML_CDATA - child-less element,
- * SVN_RA_NEON__XML_COLLECT - complete contents of such element must be
- * collected as CDATA, includes *_CDATA flag. */
- unsigned int flags;
-
-} svn_ra_neon__xml_elm_t;
-
-
-
-typedef struct svn_ra_neon__session_t {
- apr_pool_t *pool;
- svn_stringbuf_t *url; /* original, unparsed session url */
- ne_uri root; /* parsed version of above */
- const char *repos_root; /* URL for repository root */
-
- ne_session *ne_sess; /* HTTP session to server */
- ne_session *ne_sess2;
- svn_boolean_t main_session_busy; /* TRUE when requests should be created
- and issued on sess2; currently
- only used by fetch.c */
-
- const svn_ra_callbacks2_t *callbacks; /* callbacks to get auth data */
- void *callback_baton;
-
- svn_auth_iterstate_t *auth_iterstate; /* state of authentication retries */
- svn_boolean_t auth_used; /* Save authorization state after
- successful usage */
-
- svn_auth_iterstate_t *p11pin_iterstate; /* state of PKCS#11 pin retries */
-
- svn_boolean_t compression; /* should we use http compression? */
-
- /* Each of these function as caches, and are NULL when uninitialized
- or cleared: */
- const char *vcc; /* version-controlled-configuration */
- const char *uuid; /* repository UUID */
- const char *act_coll; /* activity collection set */
-
- svn_ra_progress_notify_func_t progress_func;
- void *progress_baton;
-
- apr_off_t total_progress; /* Total number of bytes sent in this
- session with a -1 total marker */
-
- /* Maps SVN_RA_CAPABILITY_foo keys to "yes" or "no" values.
- If a capability is not yet discovered, it is absent from the table.
- The table itself is allocated in the svn_ra_neon__session_t's pool;
- keys and values must have at least that lifetime. Most likely
- the keys and values are constants anyway (and sufficiently
- well-informed internal code may just compare against those
- constants' addresses, therefore). */
- apr_hash_t *capabilities;
-
- /* Tri-state variable holding information about server support for
- deadprop-count property.*/
- svn_tristate_t supports_deadprop_count;
-
- /*** HTTP v2 protocol stuff. ***
- *
- * We assume that if mod_dav_svn sends one of the special v2 OPTIONs
- * response headers, it has sent all of them. Specifically, we'll
- * be looking at the presence of the "me resource" as a flag that
- * the server supports v2 of our HTTP protocol.
- */
-
- /* The "me resource". Typically used as a target for REPORTs that
- are path-agnostic. If we have this, we can speak HTTP v2 to the
- server. */
- const char *me_resource;
-
- /* Opaque URL "stubs". If the OPTIONS response returns these, then
- we know we're using HTTP protocol v2. */
- const char *rev_stub; /* for accessing revisions (i.e. revprops) */
- const char *rev_root_stub; /* for accessing REV/PATH pairs */
- const char *txn_stub; /* for accessing transactions (i.e. txnprops) */
- const char *txn_root_stub; /* for accessing TXN/PATH pairs */
- const char *vtxn_stub; /* for accessing transactions (i.e. txnprops) */
- const char *vtxn_root_stub; /* for accessing TXN/PATH pairs */
-
- /*** End HTTP v2 stuff ***/
-
-} svn_ra_neon__session_t;
-
-#define SVN_RA_NEON__HAVE_HTTPV2_SUPPORT(ras) ((ras)->me_resource != NULL)
-
-
-typedef struct svn_ra_neon__request_t {
- ne_request *ne_req; /* neon request structure */
- ne_session *ne_sess; /* neon session structure */
- svn_ra_neon__session_t *sess; /* DAV session structure */
- const char *method;
- const char *url;
- int rv; /* Return value from
- ne_request_dispatch() or -1 if
- not dispatched yet. */
- int code; /* HTTP return code, or 0 if none */
- const char *code_desc; /* Textual description of CODE */
- svn_error_t *err; /* error encountered while executing
- the request */
- svn_boolean_t marshalled_error; /* TRUE if the error was server-side */
- apr_pool_t *pool; /* where this struct is allocated */
- apr_pool_t *iterpool; /* iteration pool
- for use within callbacks */
-} svn_ra_neon__request_t;
-
-
-/* Statement macro to set the request error,
- * making sure we don't leak any in case we encounter more than one error.
- *
- * Sets the 'err' field of REQ to the value obtained by evaluating NEW_ERR.
- */
-#define SVN_RA_NEON__REQ_ERR(req, new_err) \
- do { \
- svn_error_t *svn_err__tmp = (new_err); \
- if ((req)->err && !(req)->marshalled_error) \
- svn_error_clear(svn_err__tmp); \
- else if (svn_err__tmp) \
- { \
- svn_error_clear((req)->err); \
- (req)->err = svn_err__tmp; \
- (req)->marshalled_error = FALSE; \
- } \
- } while (0)
-
-
-/* Allocate an internal request structure allocated in a newly created
- * subpool of POOL. Create an associated neon request with the parameters
- * given.
- *
- * When a request is being dispatched on the primary Neon session,
- * the request is allocated to the secondary neon session of SESS.
- *
- * Register a pool cleanup for any allocated Neon resources.
- */
-svn_error_t *
-svn_ra_neon__request_create(svn_ra_neon__request_t **request,
- svn_ra_neon__session_t *sess,
- const char *method, const char *url,
- apr_pool_t *pool);
-
-
-/* Our version of ne_block_reader, which returns an
- * svn_error_t * instead of an int. */
-typedef svn_error_t *(*svn_ra_neon__block_reader)(void *baton,
- const char *data,
- size_t len);
-
-/* Add a response body reader function to REQ.
- *
- * Use the associated session parameters to determine the use of
- * compression.
- *
- * Register a pool cleanup on the pool of REQ to clean up any allocated
- * Neon resources.
- */
-void
-svn_ra_neon__add_response_body_reader(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__block_reader reader,
- void *userdata);
-
-
-/* Destroy request REQ and any associated resources */
-#define svn_ra_neon__request_destroy(req) svn_pool_destroy((req)->pool)
-
-#ifdef SVN_DEBUG
-#define DEBUG_CR "\n"
-#else
-#define DEBUG_CR ""
-#endif
-
-
-/** vtable function prototypes */
-
-svn_error_t *svn_ra_neon__get_latest_revnum(svn_ra_session_t *session,
- svn_revnum_t *latest_revnum,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_dated_revision(svn_ra_session_t *session,
- svn_revnum_t *revision,
- apr_time_t timestamp,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__change_rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- const svn_string_t *const *old_value_p,
- const svn_string_t *value,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__rev_proplist(svn_ra_session_t *session,
- svn_revnum_t rev,
- apr_hash_t **props,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__rev_prop(svn_ra_session_t *session,
- svn_revnum_t rev,
- const char *name,
- svn_string_t **value,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_commit_editor(svn_ra_session_t *session,
- const svn_delta_editor_t **editor,
- void **edit_baton,
- apr_hash_t *revprop_table,
- svn_commit_callback2_t callback,
- void *callback_baton,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_file(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_stream_t *stream,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_dir(svn_ra_session_t *session,
- apr_hash_t **dirents,
- svn_revnum_t *fetched_rev,
- apr_hash_t **props,
- const char *path,
- svn_revnum_t revision,
- apr_uint32_t dirent_fields,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_mergeinfo(
- svn_ra_session_t *session,
- apr_hash_t **mergeinfo,
- const apr_array_header_t *paths,
- svn_revnum_t revision,
- svn_mergeinfo_inheritance_t inherit,
- svn_boolean_t include_descendants,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_update(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- svn_boolean_t send_copyfrom_args,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_status(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- const char *status_target,
- svn_revnum_t revision,
- svn_depth_t depth,
- const svn_delta_editor_t *wc_status,
- void *wc_status_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_switch(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision_to_update_to,
- const char *update_target,
- svn_depth_t depth,
- const char *switch_url,
- const svn_delta_editor_t *wc_update,
- void *wc_update_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__do_diff(svn_ra_session_t *session,
- const svn_ra_reporter3_t **reporter,
- void **report_baton,
- svn_revnum_t revision,
- const char *diff_target,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t text_deltas,
- const char *versus_url,
- const svn_delta_editor_t *wc_diff,
- void *wc_diff_baton,
- apr_pool_t *pool);
-
-svn_error_t * svn_ra_neon__get_log(svn_ra_session_t *session,
- const apr_array_header_t *paths,
- svn_revnum_t start,
- svn_revnum_t end,
- int limit,
- svn_boolean_t discover_changed_paths,
- svn_boolean_t strict_node_history,
- svn_boolean_t include_merged_revisions,
- const apr_array_header_t *revprops,
- svn_log_entry_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__do_check_path(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_node_kind_t *kind,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__do_stat(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t revision,
- svn_dirent_t **dirent,
- apr_pool_t *pool);
-
-svn_error_t *svn_ra_neon__get_file_revs(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t start,
- svn_revnum_t end,
- svn_boolean_t include_merged_revisions,
- svn_file_rev_handler_t handler,
- void *handler_baton,
- apr_pool_t *pool);
-
-
-/* Local duplicate of svn_ra_get_path_relative_to_root(). */
-svn_error_t *svn_ra_neon__get_path_relative_to_root(svn_ra_session_t *session,
- const char **rel_path,
- const char *url,
- apr_pool_t *pool);
-
-
-/*
-** SVN_RA_NEON__LP_*: local properties for RA/DAV
-**
-** ra_neon and ra_serf store properties on the client containing information needed
-** to operate against the SVN server. Some of this informations is strictly
-** necessary to store, and some is simply stored as a cached value.
-*/
-
-#define SVN_RA_NEON__LP_NAMESPACE SVN_PROP_WC_PREFIX "ra_dav:"
-
-/* store the URL where Activities can be created */
-/* ### should fix the name to be "activity-coll" at some point */
-#define SVN_RA_NEON__LP_ACTIVITY_COLL SVN_RA_NEON__LP_NAMESPACE "activity-url"
-
-/* store the URL of the version resource (from the DAV:checked-in property) */
-#define SVN_RA_NEON__LP_VSN_URL SVN_RA_NEON__LP_NAMESPACE "version-url"
-
-
-/*
-** SVN_RA_NEON__PROP_*: properties that we fetch from the server
-**
-** These are simply symbolic names for some standard properties that we fetch.
-*/
-#define SVN_RA_NEON__PROP_BASELINE_COLLECTION "DAV:baseline-collection"
-#define SVN_RA_NEON__PROP_CHECKED_IN "DAV:checked-in"
-#define SVN_RA_NEON__PROP_VCC "DAV:version-controlled-configuration"
-#define SVN_RA_NEON__PROP_VERSION_NAME "DAV:" SVN_DAV__VERSION_NAME
-#define SVN_RA_NEON__PROP_CREATIONDATE "DAV:creationdate"
-#define SVN_RA_NEON__PROP_CREATOR_DISPLAYNAME "DAV:creator-displayname"
-#define SVN_RA_NEON__PROP_GETCONTENTLENGTH "DAV:getcontentlength"
-
-#define SVN_RA_NEON__PROP_BASELINE_RELPATH \
- SVN_DAV_PROP_NS_DAV "baseline-relative-path"
-
-#define SVN_RA_NEON__PROP_MD5_CHECKSUM SVN_DAV_PROP_NS_DAV "md5-checksum"
-
-#define SVN_RA_NEON__PROP_REPOSITORY_UUID SVN_DAV_PROP_NS_DAV "repository-uuid"
-
-#define SVN_RA_NEON__PROP_DEADPROP_COUNT SVN_DAV_PROP_NS_DAV "deadprop-count"
-
-typedef struct svn_ra_neon__resource_t {
- /* what is the URL for this resource */
- const char *url;
-
- /* is this resource a collection? (from the DAV:resourcetype element) */
- int is_collection;
-
- /* PROPSET: NAME -> VALUE (const char * -> const svn_string_t *) */
- apr_hash_t *propset;
-
- /* --- only used during response processing --- */
- /* when we see a DAV:href element, what element is the parent? */
- int href_parent;
-
- apr_pool_t *pool;
-
-} svn_ra_neon__resource_t;
-
-/* ### WARNING: which_props can only identify properties which props.c
- ### knows about. see the elem_definitions[] array. */
-
-/* fetch a bunch of properties from the server. */
-svn_error_t * svn_ra_neon__get_props(apr_hash_t **results,
- svn_ra_neon__session_t *sess,
- const char *url,
- int depth,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* fetch a single resource's props from the server. */
-svn_error_t * svn_ra_neon__get_props_resource(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* fetch a single resource's starting props from the server.
-
- Cache the version-controlled-configuration in SESS->vcc, and the
- repository uuid in SESS->uuid. */
-svn_error_t * svn_ra_neon__get_starting_props(svn_ra_neon__resource_t **rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* Shared helper func: given a public URL which may not exist in HEAD,
- use SESS to search up parent directories until we can retrieve a
- *RSRC (allocated in POOL) containing a standard set of "starting"
- props: {VCC, resourcetype, baseline-relative-path}.
-
- Also return *MISSING_PATH (allocated in POOL), which is the
- trailing portion of the URL that did not exist. If an error
- occurs, *MISSING_PATH isn't changed.
-
- Cache the version-controlled-configuration in SESS->vcc, and the
- repository uuid in SESS->uuid. */
-svn_error_t *
-svn_ra_neon__search_for_starting_props(svn_ra_neon__resource_t **rsrc,
- const char **missing_path,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* fetch a single property from a single resource */
-svn_error_t * svn_ra_neon__get_one_prop(const svn_string_t **propval,
- svn_ra_neon__session_t *sess,
- const char *url,
- const char *label,
- const ne_propname *propname,
- apr_pool_t *pool);
-
-/* Get various Baseline-related information for a given "public" URL.
-
- REVISION may be SVN_INVALID_REVNUM to indicate that the operation
- should work against the latest (HEAD) revision, or whether it should
- return information about that specific revision.
-
- If BC_URL_P is not NULL, then it will be filled in with the URL for
- the Baseline Collection for the specified revision, or the HEAD.
-
- If BC_RELATIVE_P is not NULL, then it will be filled in with a
- relative pathname for the baselined resource corresponding to the
- revision of the resource specified by URL.
-
- If LATEST_REV is not NULL, then it will be filled in with the revision
- that this information corresponds to. Generally, this will be the same
- as the REVISION parameter, unless we are working against the HEAD. In
- that case, the HEAD revision number is returned.
-
- Allocation for *BC_URL_P, *BC_RELATIVE_P, and temporary data,
- will occur in POOL.
-
- Note: a Baseline Collection is a complete tree for a specified Baseline.
- DeltaV baselines correspond one-to-one to Subversion revisions. Thus,
- the entire state of a revision can be found in a Baseline Collection.
-*/
-svn_error_t *svn_ra_neon__get_baseline_info(const char **bc_url_p,
- const char **bc_relative_p,
- svn_revnum_t *latest_rev,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- apr_pool_t *pool);
-
-/* Fetch a baseline resource populated with specific properties.
-
- Given a session SESS and a URL, set *BLN_RSRC to a baseline of
- REVISION, populated with whatever properties are specified by
- WHICH_PROPS. To fetch all properties, pass NULL for WHICH_PROPS.
-
- If BC_RELATIVE is not NULL, then it will be filled in with a
- relative pathname for the baselined resource corresponding to the
- revision of the resource specified by URL.
-*/
-svn_error_t *svn_ra_neon__get_baseline_props(svn_string_t *bc_relative,
- svn_ra_neon__resource_t **bln_rsrc,
- svn_ra_neon__session_t *sess,
- const char *url,
- svn_revnum_t revision,
- const ne_propname *which_props,
- apr_pool_t *pool);
-
-/* Fetch the repository's unique Version-Controlled-Configuration url.
-
- Given a session SESS and a URL, set *VCC to the url of the
- repository's version-controlled-configuration resource.
- */
-svn_error_t *svn_ra_neon__get_vcc(const char **vcc,
- svn_ra_neon__session_t *sess,
- const char *url,
- apr_pool_t *pool);
-
-/* Issue a PROPPATCH request on URL, transmitting PROP_CHANGES (a hash
- of const svn_string_t * values keyed on Subversion user-visible
- property names) and PROP_DELETES (an array of property names to
- delete). PROP_OLD_VALUES is a hash of Subversion user-visible property
- names mapped to svn_dav__two_props_t * values. Send any extra
- request headers in EXTRA_HEADERS. Use POOL for all allocations.
- */
-svn_error_t *svn_ra_neon__do_proppatch(svn_ra_neon__session_t *ras,
- const char *url,
- apr_hash_t *prop_changes,
- const apr_array_header_t *prop_deletes,
- apr_hash_t *prop_old_values,
- apr_hash_t *extra_headers,
- apr_pool_t *pool);
-
-extern const ne_propname svn_ra_neon__vcc_prop;
-extern const ne_propname svn_ra_neon__checked_in_prop;
-
-
-/* send an OPTIONS request to fetch the activity-collection-set */
-svn_error_t *
-svn_ra_neon__get_activity_collection(const svn_string_t **activity_coll,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Call ne_set_request_body_pdovider on REQ with a provider function
- * that pulls data from BODY_FILE.
- */
-svn_error_t *svn_ra_neon__set_neon_body_provider(svn_ra_neon__request_t *req,
- apr_file_t *body_file);
-
-
-#define SVN_RA_NEON__DEPTH_ZERO 0
-#define SVN_RA_NEON__DEPTH_ONE 1
-#define SVN_RA_NEON__DEPTH_INFINITE -1
-/* Add a 'Depth' header to a hash of headers.
- *
- * DEPTH is one of the above defined SVN_RA_NEON__DEPTH_* values.
- */
-void
-svn_ra_neon__add_depth_header(apr_hash_t *extra_headers, int depth);
-
-/** Find a given element in the table of elements.
- *
- * The table of XML elements @a table is searched until element identified by
- * namespace @a nspace and name @a name is found. If no elements are found,
- * tries to find and return element identified by @c ELEM_unknown. If that is
- * not found, returns NULL pointer. */
-const svn_ra_neon__xml_elm_t *
-svn_ra_neon__lookup_xml_elem(const svn_ra_neon__xml_elm_t *table,
- const char *nspace,
- const char *name);
-
-
-
-/* Collect CDATA into a stringbuf.
- *
- * BATON points to a struct of which the first element is
- * assumed to be an svn_stringbuf_t *.
- */
-svn_error_t *
-svn_ra_neon__xml_collect_cdata(void *baton, int state,
- const char *cdata, size_t len);
-
-
-/* Our equivalent of ne_xml_startelm_cb, the difference being that it
- * returns errors in a svn_error_t, and returns the element type via
- * ELEM. To ignore the element *ELEM should be set to
- * SVN_RA_NEON__XML_DECLINE and SVN_NO_ERROR should be returned.
- * *ELEM can be set to SVN_RA_NEON__XML_INVALID to indicate invalid XML
- * (and abort the parse).
- */
-typedef svn_error_t * (*svn_ra_neon__startelm_cb_t)(int *elem,
- void *baton,
- int parent,
- const char *nspace,
- const char *name,
- const char **atts);
-
-/* Our equivalent of ne_xml_cdata_cb, the difference being that it returns
- * errors in a svn_error_t.
- */
-typedef svn_error_t * (*svn_ra_neon__cdata_cb_t)(void *baton,
- int state,
- const char *cdata,
- size_t len);
-
-/* Our equivalent of ne_xml_endelm_cb, the difference being that it returns
- * errors in a svn_error_t.
- */
-typedef svn_error_t * (*svn_ra_neon__endelm_cb_t)(void *baton,
- int state,
- const char *nspace,
- const char *name);
-
-
-/* Create a Neon xml parser with callbacks STARTELM_CB, ENDELM_CB and
- * CDATA_CB. The created parser wraps the Neon callbacks and marshals any
- * errors returned by the callbacks through the Neon layer. Any errors
- * raised will be returned by svn_ra_neon__request_dispatch() unless
- * an earlier error occurred.
- *
- * Register a pool cleanup on the pool of REQ to clean up any allocated
- * Neon resources.
- *
- * Return the new parser. Also attach it to REQ if ACCPT is non-null.
- * ACCPT indicates whether the parser wants to read the response body
- * or not. Pass NULL for ACCPT when you don't want the returned parser
- * to be attached to REQ.
- */
-ne_xml_parser *
-svn_ra_neon__xml_parser_create(svn_ra_neon__request_t *req,
- ne_accept_response accpt,
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton);
-
-/* Send a METHOD request (e.g., "MERGE", "REPORT", "PROPFIND") to URL
- * in session SESS, and parse the response. If BODY is non-null, it is
- * the body of the request, else use the contents of file BODY_FILE
- * as the body.
- *
- * STARTELM_CB, CDATA_CB and ENDELM_CB are start element, cdata and end
- * element handlers, respectively. BATON is passed to each as userdata.
- *
- * SET_PARSER is a callback function which, if non-NULL, is called
- * with the XML parser and BATON. This is useful for providers of
- * validation and element handlers which require access to the parser.
- *
- * EXTRA_HEADERS is a hash of (const char *) key/value pairs to be
- * inserted as extra headers in the request. Can be NULL.
- *
- * STATUS_CODE is an optional 'out' parameter; if non-NULL, then set
- * *STATUS_CODE to the http status code returned by the server. This
- * can be set to a useful value even when the function returns an error
- * however it is not always set when an error is returned. So any caller
- * wishing to check *STATUS_CODE when an error has been returned must
- * initialise *STATUS_CODE before calling the function.
- *
- * If SPOOL_RESPONSE is set, the request response will be cached to
- * disk in a tmpfile (in full), then read back and parsed.
- *
- * Use POOL for any temporary allocation.
- */
-svn_error_t *
-svn_ra_neon__parsed_request(svn_ra_neon__session_t *sess,
- const char *method,
- const char *url,
- const char *body,
- apr_file_t *body_file,
- void set_parser(ne_xml_parser *parser,
- void *baton),
- svn_ra_neon__startelm_cb_t startelm_cb,
- svn_ra_neon__cdata_cb_t cdata_cb,
- svn_ra_neon__endelm_cb_t endelm_cb,
- void *baton,
- apr_hash_t *extra_headers,
- int *status_code,
- svn_boolean_t spool_response,
- apr_pool_t *pool);
-
-
-/* If XML_PARSER found an XML parse error, then return a Subversion error
- * saying that the error was found in the response to the DAV request METHOD
- * for the URL URL. Otherwise, return SVN_NO_ERROR. */
-svn_error_t *
-svn_ra_neon__check_parse_error(const char *method,
- ne_xml_parser *xml_parser,
- const char *url);
-
-/* ### Related to svn_ra_neon__xml_elmid? */
-/* ### add SVN_RA_NEON_ to these to prefix conflicts with (sys) headers? */
-enum {
- /* Redefine Neon elements */
- /* With the new API, we need to be able to use element id also as a return
- * value from the new `startelm' callback, hence all element ids must be
- * positive. Root element id is the only id that is not positive, it's zero.
- * `Root state' is never returned by a callback, it's only passed into it.
- * Therefore, negative element ids are forbidden from now on. */
- ELEM_unknown = 1, /* was (-1), see above why it's (1) now */
- ELEM_root = NE_XML_STATEROOT, /* (0) */
- ELEM_UNUSED = 100,
- ELEM_207_first = ELEM_UNUSED,
- ELEM_multistatus = ELEM_207_first,
- ELEM_response = ELEM_207_first + 1,
- ELEM_responsedescription = ELEM_207_first + 2,
- ELEM_href = ELEM_207_first + 3,
- ELEM_propstat = ELEM_207_first + 4,
- ELEM_prop = ELEM_207_first + 5, /* `prop' tag in the DAV namespace */
- ELEM_status = ELEM_207_first + 6,
- ELEM_207_UNUSED = ELEM_UNUSED + 100,
- ELEM_PROPS_UNUSED = ELEM_207_UNUSED + 100,
-
- /* DAV elements */
- ELEM_activity_coll_set = ELEM_207_UNUSED,
- ELEM_baseline,
- ELEM_baseline_coll,
- ELEM_checked_in,
- ELEM_collection,
- ELEM_comment,
- ELEM_revprop,
- ELEM_creationdate,
- ELEM_creator_displayname,
- ELEM_ignored_set,
- ELEM_merge_response,
- ELEM_merged_set,
- ELEM_options_response,
- ELEM_set_prop,
- ELEM_remove_prop,
- ELEM_resourcetype,
- ELEM_get_content_length,
- ELEM_updated_set,
- ELEM_vcc,
- ELEM_version_name,
- ELEM_post_commit_err,
- ELEM_error,
-
- /* SVN elements */
- ELEM_absent_directory,
- ELEM_absent_file,
- ELEM_add_directory,
- ELEM_add_file,
- ELEM_baseline_relpath,
- ELEM_md5_checksum,
- ELEM_deleted_path, /* used in log reports */
- ELEM_replaced_path, /* used in log reports */
- ELEM_added_path, /* used in log reports */
- ELEM_modified_path, /* used in log reports */
- ELEM_delete_entry,
- ELEM_fetch_file,
- ELEM_fetch_props,
- ELEM_txdelta,
- ELEM_log_date,
- ELEM_log_item,
- ELEM_log_report,
- ELEM_open_directory,
- ELEM_open_file,
- ELEM_target_revision,
- ELEM_update_report,
- ELEM_resource_walk,
- ELEM_resource,
- ELEM_SVN_prop, /* `prop' tag in the Subversion namespace */
- ELEM_dated_rev_report,
- ELEM_name_version_name,
- ELEM_name_creationdate,
- ELEM_name_creator_displayname,
- ELEM_svn_error,
- ELEM_human_readable,
- ELEM_repository_uuid,
- ELEM_get_locations_report,
- ELEM_location,
- ELEM_get_location_segments_report,
- ELEM_location_segment,
- ELEM_file_revs_report,
- ELEM_file_rev,
- ELEM_rev_prop,
- ELEM_get_locks_report,
- ELEM_lock,
- ELEM_lock_path,
- ELEM_lock_token,
- ELEM_lock_owner,
- ELEM_lock_comment,
- ELEM_lock_creationdate,
- ELEM_lock_expirationdate,
- ELEM_lock_discovery,
- ELEM_lock_activelock,
- ELEM_lock_type,
- ELEM_lock_scope,
- ELEM_lock_depth,
- ELEM_lock_timeout,
- ELEM_editor_report,
- ELEM_open_root,
- ELEM_apply_textdelta,
- ELEM_change_file_prop,
- ELEM_change_dir_prop,
- ELEM_close_file,
- ELEM_close_directory,
- ELEM_deadprop_count,
- ELEM_mergeinfo_report,
- ELEM_mergeinfo_item,
- ELEM_mergeinfo_path,
- ELEM_mergeinfo_info,
- ELEM_has_children,
- ELEM_merged_revision,
- ELEM_deleted_rev_report,
- ELEM_subtractive_merge
-};
-
-/* ### docco */
-svn_error_t * svn_ra_neon__merge_activity(svn_revnum_t *new_rev,
- const char **committed_date,
- const char **committed_author,
- const char **post_commit_err,
- svn_ra_neon__session_t *ras,
- const char *repos_url,
- const char *activity_url,
- apr_hash_t *valid_targets,
- apr_hash_t *lock_tokens,
- svn_boolean_t keep_locks,
- svn_boolean_t disable_merge_response,
- apr_pool_t *pool);
-
-
-/* Make a buffer for repeated use with svn_stringbuf_set().
- ### it would be nice to start this buffer with N bytes, but there isn't
- ### really a way to do that in the string interface (yet), short of
- ### initializing it with a fake string (and copying it) */
-#define MAKE_BUFFER(p) svn_stringbuf_ncreate("", 0, (p))
-
-svn_error_t *
-svn_ra_neon__copy_href(svn_stringbuf_t *dst, const char *src,
- apr_pool_t *pool);
-
-
-
-/* If RAS contains authentication info, attempt to store it via client
- callbacks and using POOL for temporary allocations. */
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info(svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Like svn_ra_neon__maybe_store_auth_info(), but conditional on ERR.
-
- Attempt to store auth info only if ERR is NULL or if ERR->apr_err
- is not SVN_ERR_RA_NOT_AUTHORIZED. If ERR is not null, return it no
- matter what, otherwise return the result of the attempt (if any) to
- store auth info, else return SVN_NO_ERROR. */
-svn_error_t *
-svn_ra_neon__maybe_store_auth_info_after_result(svn_error_t *err,
- svn_ra_neon__session_t *ras,
- apr_pool_t *pool);
-
-
-/* Create an error of type SVN_ERR_RA_DAV_MALFORMED_DATA for cases where
- we receive an element we didn't expect to see. */
-#define UNEXPECTED_ELEMENT(ns, elem) \
- (ns ? svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Got unexpected element %s:%s"), \
- ns, \
- elem) \
- : svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Got unexpected element %s"), \
- elem))
-
-/* Create an error of type SVN_ERR_RA_DAV_MALFORMED_DATA for cases where
- we don't receive a necessary attribute. */
-#define MISSING_ATTR(ns, elem, attr) \
- (ns ? svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Missing attribute '%s' on element %s:%s"), \
- attr, \
- ns, \
- elem) \
- : svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, \
- NULL, \
- _("Missing attribute '%s' on element %s"), \
- attr, \
- elem))
-
-/* Given a REQUEST, run it; if CODE_P is
- non-null, return the http status code in *CODE_P. Return any
- resulting error (from Neon, a <D:error> body response, or any
- non-2XX status code) as an svn_error_t, otherwise return SVN_NO_ERROR.
-
- EXTRA_HEADERS is a hash with (key -> value) of
- (const char * -> const char *) where the key is the HTTP header name.
-
- BODY is a null terminated string containing an in-memory request
- body. Use svn_ra_neon__set_neon_body_provider() if you want the
- request body to be read from a file. For requests which have no
- body at all, consider passing the empty string ("") instead of
- NULL, as this will cause Neon to generate a "Content-Length: 0"
- header (which is important to some proxies).
-
- OKAY_1 and OKAY_2 are the "acceptable" result codes. Anything
- other than one of these will generate an error. OKAY_1 should
- always be specified (e.g. as 200); use 0 for OKAY_2 if additional
- result codes aren't allowed. */
-svn_error_t *
-svn_ra_neon__request_dispatch(int *code_p,
- svn_ra_neon__request_t *request,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1,
- int okay_2,
- apr_pool_t *pool);
-
-/* A layer over SVN_RA_NEON__REQUEST_DISPATCH() adding a
- 207 response parser to extract relevant (error) information.
-
- Don't use this function if you're expecting 207 as a valid response.
-
- BODY may be NULL if the request doesn't have a body. */
-svn_error_t *
-svn_ra_neon__simple_request(int *code,
- svn_ra_neon__session_t *ras,
- const char *method,
- const char *url,
- apr_hash_t *extra_headers,
- const char *body,
- int okay_1,
- int okay_2,
- apr_pool_t *pool);
-
-/* Convenience statement macro for setting headers in a hash */
-#define svn_ra_neon__set_header(hash, hdr, val) \
- apr_hash_set((hash), (hdr), APR_HASH_KEY_STRING, (val))
-
-
-/* Helper function layered over SVN_RA_NEON__SIMPLE_REQUEST() to issue
- a HTTP COPY request.
-
- DEPTH is one of the SVN_RA_NEON__DEPTH_* constants. */
-svn_error_t *
-svn_ra_neon__copy(svn_ra_neon__session_t *ras,
- svn_boolean_t overwrite,
- int depth,
- const char *src,
- const char *dst,
- apr_pool_t *pool);
-
-/* Return the Location HTTP header or NULL if none was sent.
- * (Return a canonical URL even if the header ended with a slash.)
- *
- * Do allocations in POOL.
- */
-const char *
-svn_ra_neon__request_get_location(svn_ra_neon__request_t *request,
- apr_pool_t *pool);
-
-
-/*
- * Implements the get_locations RA layer function. */
-svn_error_t *
-svn_ra_neon__get_locations(svn_ra_session_t *session,
- apr_hash_t **locations,
- const char *path,
- svn_revnum_t peg_revision,
- const apr_array_header_t *location_revisions,
- apr_pool_t *pool);
-
-
-/*
- * Implements the get_location_segments RA layer function. */
-svn_error_t *
-svn_ra_neon__get_location_segments(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t start_rev,
- svn_revnum_t end_rev,
- svn_location_segment_receiver_t receiver,
- void *receiver_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the get_locks RA layer function. */
-svn_error_t *
-svn_ra_neon__get_locks(svn_ra_session_t *session,
- apr_hash_t **locks,
- const char *path,
- svn_depth_t depth,
- apr_pool_t *pool);
-
-/*
- * Implements the lock RA layer function. */
-svn_error_t *
-svn_ra_neon__lock(svn_ra_session_t *session,
- apr_hash_t *path_revs,
- const char *comment,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the unlock RA layer function. */
-svn_error_t *
-svn_ra_neon__unlock(svn_ra_session_t *session,
- apr_hash_t *path_tokens,
- svn_boolean_t force,
- svn_ra_lock_callback_t lock_func,
- void *lock_baton,
- apr_pool_t *pool);
-
-/*
- * Internal implementation of get_lock RA layer function. */
-svn_error_t *
-svn_ra_neon__get_lock_internal(svn_ra_neon__session_t *session,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool);
-
-/*
- * Implements the get_lock RA layer function. */
-svn_error_t *
-svn_ra_neon__get_lock(svn_ra_session_t *session,
- svn_lock_t **lock,
- const char *path,
- apr_pool_t *pool);
-
-/*
- * Implements the replay RA layer function. */
-svn_error_t *
-svn_ra_neon__replay(svn_ra_session_t *session,
- svn_revnum_t revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the replay_range RA layer function. */
-svn_error_t *
-svn_ra_neon__replay_range(svn_ra_session_t *session,
- svn_revnum_t start_revision,
- svn_revnum_t end_revision,
- svn_revnum_t low_water_mark,
- svn_boolean_t send_deltas,
- svn_ra_replay_revstart_callback_t revstart_func,
- svn_ra_replay_revfinish_callback_t revfinish_func,
- void *replay_baton,
- apr_pool_t *pool);
-
-/*
- * Implements the has_capability RA layer function. */
-svn_error_t *
-svn_ra_neon__has_capability(svn_ra_session_t *session,
- svn_boolean_t *has,
- const char *capability,
- apr_pool_t *pool);
-
-/* Exchange capabilities with the server, by sending an OPTIONS
- request announcing the client's capabilities, and by filling
- RAS->capabilities with the server's capabilities as read from the
- response headers. Use POOL only for temporary allocation.
-
- If the RELOCATION_LOCATION is non-NULL, allow the OPTIONS response
- to report a server-dictated redirect or relocation (HTTP 301 or 302
- error codes), setting *RELOCATION_LOCATION to the value of the
- corrected repository URL. Otherwise, such responses from the
- server will generate an error. (In either case, no capabilities are
- exchanged if there is, in fact, such a response from the server.)
-
- If the server is kind enough to tell us the current youngest
- revision of the target repository, set *YOUNGEST_REV to that value;
- set it to SVN_INVALID_REVNUM otherwise. YOUNGEST_REV may be NULL if
- the caller is not interested in receiving this information.
-
- NOTE: This function also expects the server to announce the
- activity collection. */
-svn_error_t *
-svn_ra_neon__exchange_capabilities(svn_ra_neon__session_t *ras,
- const char **relocation_location,
- svn_revnum_t *youngest_rev,
- apr_pool_t *pool);
-
-/*
- * Implements the get_deleted_rev RA layer function. */
-svn_error_t *
-svn_ra_neon__get_deleted_rev(svn_ra_session_t *session,
- const char *path,
- svn_revnum_t peg_revision,
- svn_revnum_t end_revision,
- svn_revnum_t *revision_deleted,
- apr_pool_t *pool);
-
-/* Helper function. Loop over LOCK_TOKENS and assemble all keys and
- values into a stringbuf allocated in POOL. The string will be of
- the form
-
- <S:lock-token-list xmlns:S="svn:">
- <S:lock>
- <S:lock-path>path</S:lock-path>
- <S:lock-token>token</S:lock-token>
- </S:lock>
- [...]
- </S:lock-token-list>
-
- Callers can then send this in the request bodies, as a way of
- reliably marshalling potentially unbounded lists of locks. (We do
- this because httpd has limits on how much data can be sent in 'If:'
- headers.)
- */
-svn_error_t *
-svn_ra_neon__assemble_locktoken_body(svn_stringbuf_t **body,
- apr_hash_t *lock_tokens,
- apr_pool_t *pool);
-
-
-/* Wrapper around ne_uri_unparse(). Turns a URI structure back into a string.
- * The returned string is allocated in POOL. */
-const char *
-svn_ra_neon__uri_unparse(const ne_uri *uri,
- apr_pool_t *pool);
-
-/* Sets *SUPPORTS_DEADPROP_COUNT to non-zero if server supports
- * deadprop-count property. Uses FINAL_URL to discover this informationn
- * if it is not already cached. */
-svn_error_t *
-svn_ra_neon__get_deadprop_count_support(svn_boolean_t *supported,
- svn_ra_neon__session_t *ras,
- const char *final_url,
- apr_pool_t *pool);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* SVN_LIBSVN_RA_NEON_H */