You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Greg Stein <gs...@lyra.org> on 2003/06/24 20:37:14 UTC

new Neon 0.24 (was: #830 hits again (and Neon 0.24 question))

On Mon, Jun 23, 2003 at 07:52:26PM -0400, Sergey A. Lipnevich wrote:
>...
> Also, I saw that Neon 0.24.0 is out, and tried compiling it with 
> Subversion. This fails because there's no more type ne_xml_elm in Neon. 
> Do you have any plans for migration? I could file an issue on this and 
> try creating a patch, if somebody is willing to give me a hint on where 
> to start.

Ooh. Didn't see that come out.

Yes, the plan is to switch over. It has some functionality around SSL and
XML that we've been waiting for. I'm not sure if anybody has volunteered,
but I do believe that some people have tried out some initial patches.

Please go ahead and file an issue. As far as where to start: just start
looking for compilation errors :-)

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by "Sergey A. Lipnevich" <se...@pisem.net>.
So, the idea is that there are callbacks now accepting ne_xml_elm, and 
they need to be redone for two-parameter-style calling, right? That 
seems to make it simpler, actually. Thanks!

Scott Lamb wrote:
> On Tuesday, Jun 24, 2003, at 17:48 US/Central, Sergey A. Lipnevich wrote:
> 
>> Greg Stein wrote:
>>
>>> On Mon, Jun 23, 2003 at 07:52:26PM -0400, Sergey A. Lipnevich wrote:
>>>
>>>> ...
>>>> Also, I saw that Neon 0.24.0 is out, and tried compiling it with 
>>>> Subversion. This fails because there's no more type ne_xml_elm in Neon.
>>>
>>> Please go ahead and file an issue. As far as where to start: just start
>>> looking for compilation errors :-)
>>
>> That's easy because we're a source-based distro, they come out right 
>> away when I try to install Subversion ;-). If you have time, could you 
>> please describe a general idea of how to migrate from ne_xml_elm to 
>> "callbacks" that are now used in ne_xml.h? Here's what's in now:
> 
> 
>  From that log message, it sounds like the callbacks are not new; they 
> just take new argument types. A callback is just a function pointer that 
> the library user provides to the library for pluggable behavior. I'm not 
> familiar with Neon, but it sounds like all that needs to be done is 
> switch a few function prototypes and variable references to remove a 
> "mystruct->" or similar.
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by "Sergey A. Lipnevich" <se...@optimaltec.com>.
mark benedetto king wrote:

>One issue that I've run into is that neon's SSL interface has also
>changed.  To save myself some headache, I've just #ifdef'ed out the SSL
>calls from libsvn_ra_dav/session.c.  This is obviously not an acceptable
>solution.
>
I depend on it, everything is done via https here.

>
>The following is a completely untested and certainly broken patch
>
I'm good to go then ;-)!

>that merely represents the state of my WC right now. :-)  I am handing
>this change off to you.
>
Boy do I feel excited. I'll do my best. I'll get in touch next week, OK?
Thank you!

Sergey.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by David Waite <ma...@akuma.org>.
I'm horribly busy right now, but let me know once it gets close to the 
'everything else works' stage, and I'll look at fixing the SSL code to 
match the new interfaces.

-David Waite

mark benedetto king wrote:

>On Thu, Jun 26, 2003 at 03:09:09PM -0400, Sergey A. Lipnevich wrote:
>  
>
>>mark benedetto king wrote:
>>    
>>
>>>If you'd like to take over the work on this, I can send you my diffs;
>>>I do have other issues that I should probably be working on instead.
>>>
>>>      
>>>
>>Since this is a "beta" issue now, I assume I have some time to slide 
>>into Subversion code. I expect to have some time during this weekend to 
>>get started. Actually, I did get started and have done something before 
>>I realized that it's better to implement the "shim layer" as you put it.
>>
>>    
>>
>
>Okay, better get it to you before the weekend, then.   :-)
>
>One issue that I've run into is that neon's SSL interface has also
>changed.  To save myself some headache, I've just #ifdef'ed out the SSL
>calls from libsvn_ra_dav/session.c.  This is obviously not an acceptable
>solution.
>
>The following is a completely untested and certainly broken patch
>that merely represents the state of my WC right now. :-)  I am handing
>this change off to you.
>
>
>Index: subversion/libsvn_ra_dav/merge.c
>===================================================================
>--- subversion/libsvn_ra_dav/merge.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/merge.c	(working copy)
>@@ -35,25 +35,27 @@
> #include "ra_dav.h"
> 
> 
>-static const struct ne_xml_elm merge_elements[] =
>+static const svn_ra_dav__xml_elm_t merge_elements[] =
> {
>   { "DAV:", "updated-set", ELEM_updated_set, 0 },
>   { "DAV:", "merged-set", ELEM_merged_set, 0 },
>   { "DAV:", "ignored-set", ELEM_ignored_set, 0 },
>-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
>+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
>   { "DAV:", "merge-response", ELEM_merge_response, 0 },
>   { "DAV:", "checked-in", ELEM_checked_in, 0 },
>-  { "DAV:", "response", NE_ELM_response, 0 },
>-  { "DAV:", "propstat", NE_ELM_propstat, 0 },
>-  { "DAV:", "status", NE_ELM_status, NE_XML_CDATA },
>-  { "DAV:", "responsedescription", NE_ELM_responsedescription, NE_XML_CDATA },
>-  { "DAV:", "prop", NE_ELM_prop, 0 },
>+  { "DAV:", "response", ELEM_response, 0 },
>+  { "DAV:", "propstat", ELEM_propstat, 0 },
>+  { "DAV:", "status", ELEM_status, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "responsedescription", ELEM_responsedescription,
>+    SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "prop", ELEM_prop, 0 },
>   { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
>   { "DAV:", "collection", ELEM_collection, 0 },
>   { "DAV:", "baseline", ELEM_baseline, 0 },
>-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
>-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
>-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
>+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
>+    SVN_RA_DAV__XML_CDATA },
> 
>   { NULL }
> };
>@@ -260,102 +262,108 @@
>   return bump_resource(mc, relative, mc->vsn_url->data);
> }
> 
>-static int validate_element(void *userdata, ne_xml_elmid parent,
>-                            ne_xml_elmid child)
>+static int validate_element(void *userdata, int parent,
>+                            int child)
> {
>   if ((child == ELEM_collection || child == ELEM_baseline)
>       && parent != ELEM_resourcetype) {
>     /* ### technically, they could occur elsewhere, but screw it */
>-    return NE_XML_INVALID;
>+    return SVN_RA_DAV__XML_INVALID;
>   }
> 
>   switch (parent)
>     {
>-    case NE_ELM_root:
>+    case ELEM_root:
>       if (child == ELEM_merge_response)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_merge_response:
>       if (child == ELEM_updated_set
>           || child == ELEM_merged_set
>           || child == ELEM_ignored_set)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* any child is allowed */
>+        return SVN_RA_DAV__XML_DECLINE; /* any child is allowed */
> 
>     case ELEM_updated_set:
>     case ELEM_merged_set:
>-      if (child == NE_ELM_response)
>-        return NE_XML_VALID;
>+      if (child == ELEM_response)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>     case ELEM_ignored_set:
>-      if (child == NE_ELM_href)
>-        return NE_XML_VALID;
>+      if (child == ELEM_href)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>-    case NE_ELM_response:
>-      if (child == NE_ELM_href
>-          || child == NE_ELM_status
>-          || child == NE_ELM_propstat)
>-        return NE_XML_VALID;
>-      else if (child == NE_ELM_responsedescription)
>+    case ELEM_response:
>+      if (child == ELEM_href
>+          || child == ELEM_status
>+          || child == ELEM_propstat)
>+        return SVN_RA_DAV__XML_VALID;
>+      else if (child == ELEM_responsedescription)
>         /* ### I think we want this... to save a message for the user */
>-        return NE_XML_DECLINE; /* valid, but we don't need to see it */
>+        return SVN_RA_DAV__XML_DECLINE; /* valid, but we don't need to see it */
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>-    case NE_ELM_propstat:
>-      if (child == NE_ELM_prop || child == NE_ELM_status)
>-        return NE_XML_VALID;
>-      else if (child == NE_ELM_responsedescription)
>+    case ELEM_propstat:
>+      if (child == ELEM_prop || child == ELEM_status)
>+        return SVN_RA_DAV__XML_VALID;
>+      else if (child == ELEM_responsedescription)
>         /* ### I think we want this... to save a message for the user */
>-        return NE_XML_DECLINE; /* valid, but we don't need to see it */
>+        return SVN_RA_DAV__XML_DECLINE; /* valid, but we don't need to see it */
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>-    case NE_ELM_prop:
>+    case ELEM_prop:
>       if (child == ELEM_checked_in
>           || child == ELEM_resourcetype
>           || child == ELEM_version_name
>           || child == ELEM_creationdate
>           || child == ELEM_creator_displayname
>           /* other props */)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* ignore other props */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore other props */
> 
>     case ELEM_checked_in:
>-      if (child == NE_ELM_href)
>-        return NE_XML_VALID;
>+      if (child == ELEM_href)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>     case ELEM_resourcetype:
>       if (child == ELEM_collection || child == ELEM_baseline)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
>+                                           in there */
> 
>     default:
>-      return NE_XML_DECLINE;
>+      return SVN_RA_DAV__XML_DECLINE;
>     }
> 
>   /* NOTREACHED */
> }
> 
>-static int start_element(void *userdata, const struct ne_xml_elm *elm,
>+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                          const char **atts)
> {
>   merge_ctx_t *mc = userdata;
> 
>   switch (elm->id)
>     {
>-    case NE_ELM_response:
>+    case ELEM_response:
>       mc->response_has_error = FALSE;
> 
>       /* for each response (which corresponds to one resource), note that we
>@@ -380,7 +388,7 @@
>       mc->response_parent = elm->id;
>       break;
> 
>-    case NE_ELM_propstat:
>+    case ELEM_propstat:
>       /* initialize the status so we can figure out if we ever saw a
>          status element in the propstat */
>       mc->status = 0;
>@@ -401,7 +409,7 @@
>       break;
> 
>     default:
>-      /* one of: NE_ELM_href, NE_ELM_status, NE_ELM_prop,
>+      /* one of: ELEM_href, ELEM_status, ELEM_prop,
>          ELEM_version_name */
>       break;
>     }
>@@ -409,21 +417,21 @@
>   return 0;
> }
> 
>-static int end_element(void *userdata, const struct ne_xml_elm *elm,
>+static int end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                        const char *cdata)
> {
>   merge_ctx_t *mc = userdata;
> 
>   switch (elm->id)
>     {
>-    case NE_ELM_href:
>+    case ELEM_href:
>       switch (mc->href_parent)
>         {
>         case ELEM_ignored_set:
>           add_ignored(mc, cdata);
>           break;
> 
>-        case NE_ELM_response:
>+        case ELEM_response:
>           /* we're now working on this href... */
>           svn_ra_dav__copy_href(mc->href, cdata);
>           break;
>@@ -434,12 +442,12 @@
>         }
>       break;
> 
>-    case NE_ELM_responsedescription:
>+    case ELEM_responsedescription:
>       /* ### I don't think we'll see this right now, due to validate_element */
>       /* ### remember this for error messages? */
>       break;
> 
>-    case NE_ELM_status:
>+    case ELEM_status:
>       {
>         ne_status hs;
> 
>@@ -465,7 +473,7 @@
>       }
>       break;
> 
>-    case NE_ELM_propstat:
>+    case ELEM_propstat:
>       /* ### does Neon have a symbol for 200? */
>       if (mc->status == 200 /* OK */)
>         {
>@@ -474,7 +482,7 @@
>       /* ### else issue an error? status==0 means we never saw one */
>       break;
> 
>-    case NE_ELM_response:
>+    case ELEM_response:
>       {
>         svn_error_t *err;
> 
>@@ -495,7 +503,7 @@
>       /* When we leave a DAV:checked-in element, the parents are DAV:prop,
>          DAV:propstat, then DAV:response. If we see a DAV:href "on the way
>          out", then it is going to belong to the DAV:response. */
>-      mc->href_parent = NE_ELM_response;
>+      mc->href_parent = ELEM_response;
>       break;
> 
>     case ELEM_version_name:
>@@ -512,7 +520,7 @@
> 
>     default:
>       /* one of: ELEM_updated_set, ELEM_merged_set, ELEM_ignored_set,
>-         NE_ELM_prop, ELEM_resourcetype, ELEM_collection, ELEM_baseline */
>+         ELEM_prop, ELEM_resourcetype, ELEM_collection, ELEM_baseline */
>       break;
>     }
> 
>Index: subversion/libsvn_ra_dav/ra_dav.h
>===================================================================
>--- subversion/libsvn_ra_dav/ra_dav.h	(revision 6363)
>+++ subversion/libsvn_ra_dav/ra_dav.h	(working copy)
>@@ -41,7 +41,61 @@
> #endif /* __cplusplus */
> 
> 
>+
>+#ifdef NE_XML_VALID
>+
>+#define SVN_RA_DAV__XML_VALID   NE_XML_VALID
>+#define SVN_RA_DAV__XML_INVALID NE_XML_INVALID
>+#define SVN_RA_DAV__XML_DECLINE NE_XML_DECLINE
>+#define SVN_RA_DAV__XML_CDATA   NE_XML_CDATA
>+#define SVN_RA_DAV__XML_COLLECT NE_XML_COLLECT
>+
>+typedef struct ne_xml_elm svn_ra_dav__xml_elm_t;
>+typedef ne_xml_validate_cb svn_ra_dav__xml_validate_cb;
>+typedef ne_xml_startelm_cb svn_ra_dav__xml_startelm_cb;
>+typedef ne_xml_endelm_cb svn_ra_dav__xml_endelm_cb;
>+
>+#else
>+
>+#define SVN_RA_DAV__NEED_SHIM 
>+
>+#define SVN_RA_DAV__XML_VALID   (0)
>+#define SVN_RA_DAV__XML_INVALID (-1)
>+#define SVN_RA_DAV__XML_DECLINE (-2)
>+#define SVN_RA_DAV__XML_CDATA   (1<<1)
>+#define SVN_RA_DAV__XML_COLLECT (1<<2 | SVN_RA_DAV__XML_CDATA)
>+
> typedef struct {
>+  const char *nspace;     /* namespace */
>+  const char *name;       /* element name */
>+  int id;                 /* enumerated id */
>+  unsigned int flags;     /* flags for processing */
>+} svn_ra_dav__xml_elm_t;
>+
>+typedef int svn_ra_dav__xml_validate_cb(void *userdata,
>+                                        int parent,
>+                                        int child);
>+
>+typedef int svn_ra_dav__xml_startelm_cb(void *userdata,
>+                                        const svn_ra_dav__xml_elm_t *elm,
>+                                        const char **atts);
>+
>+typedef int svn_ra_dav__xml_endelm_cb(void *userdata,
>+                                      const svn_ra_dav__xml_elm_t *elm,
>+                                      const char *cdata);
>+
>+#endif
>+
>+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
>+                                  const svn_ra_dav__xml_elm_t *elements,
>+                                  svn_ra_dav__xml_validate_cb validate_cb,
>+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
>+                                  svn_ra_dav__xml_endelm_cb endelm_cb,
>+                                  void *userdata,
>+                                  apr_pool_t *pool);
>+
>+
>+typedef struct {
>   apr_pool_t *pool;
> 
>   const char *url;                      /* original, unparsed session url */
>@@ -65,6 +119,7 @@
>   svn_boolean_t compression;            /* should we use http compression? */
> } svn_ra_ne_session_baton_t;
> 
>+
> /* Id used with ne_set_session_private() and ne_get_session_private()
>    to retrieve the associated svn_ra_ne_session_baton_t baton. */
> #define SVN_RA_NE_SESSION_ID   "SVN"
>@@ -388,6 +443,7 @@
>                                                 apr_file_t *body_file);
> 
> 
>+
> /* 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
>@@ -416,19 +472,31 @@
>                            apr_file_t *body_file,
>                            void set_parser (ne_xml_parser *parser,
>                                             void *baton),
>-                           const struct ne_xml_elm *elements, 
>-                           ne_xml_validate_cb validate_cb,
>-                           ne_xml_startelm_cb startelm_cb, 
>-                           ne_xml_endelm_cb endelm_cb,
>+                           const svn_ra_dav__xml_elm_t *elements,
>+                           svn_ra_dav__xml_validate_cb cdata_cb,
>+                           svn_ra_dav__xml_startelm_cb startelm_cb, 
>+                           svn_ra_dav__xml_endelm_cb endelm_cb,
>                            void *baton,
>                            apr_hash_t *extra_headers,
>                            apr_pool_t *pool);
>-  
> 
>+
> /* ### add SVN_RA_DAV_ to these to prefix conflicts with (sys) headers? */
> enum {
>   /* DAV elements */
>+#ifdef SVN_RA_DAV__NEED_SHIM
>+  ELEM_root,
>+  ELEM_href,
>+  ELEM_response,
>+  ELEM_status,
>+  ELEM_propstat,
>+  ELEM_responsedescription,
>+  ELEM_multistatus,
>+  ELEM_unknown,
>+  ELEM_activity_coll_set,
>+#else
>   ELEM_activity_coll_set = NE_ELM_207_UNUSED,
>+#endif
>   ELEM_baseline,
>   ELEM_baseline_coll,
>   ELEM_checked_in,
>Index: subversion/libsvn_ra_dav/log.c
>===================================================================
>--- subversion/libsvn_ra_dav/log.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/log.c	(working copy)
>@@ -104,10 +104,10 @@
>  * This implements the `ne_xml_validate_cb' prototype.
>  */
> static int
>-log_validate(void *userdata, ne_xml_elmid parent, ne_xml_elmid child)
>+log_validate(void *userdata, int parent, int child)
> {
>   /* ### todo */
>-  return NE_XML_VALID;
>+  return SVN_RA_DAV__XML_VALID;
> }
> 
> 
>@@ -124,7 +124,7 @@
>  */
> static int
> log_start_element(void *userdata,
>-                  const struct ne_xml_elm *elm,
>+                  const svn_ra_dav__xml_elm_t *elm,
>                   const char **atts)
> {
>   struct log_baton *lb = userdata;
>@@ -173,7 +173,7 @@
>       lb->this_path_item = NULL;
>       break;
>     }
>-  return NE_XML_VALID;
>+  return SVN_RA_DAV__XML_VALID;
> }
> 
> 
>@@ -182,7 +182,7 @@
>  */
> static int
> log_end_element(void *userdata,
>-                const struct ne_xml_elm *elm,
>+                const svn_ra_dav__xml_elm_t *elm,
>                 const char *cdata)
> {
>   struct log_baton *lb = userdata;
>@@ -228,7 +228,8 @@
>         if (err)
>           {
>             lb->err = err;         /* ### Wrap an existing error, if any? */
>-            return NE_XML_INVALID; /* ### Any other way to express an err? */
>+            return SVN_RA_DAV__XML_INVALID; /* ### Any other way to express
>+                                                   an err? */
>           }
>       }
>       break;
>@@ -282,7 +283,7 @@
>       break;
>     }
> 
>-  return NE_XML_VALID;
>+  return SVN_RA_DAV__XML_VALID;
> }
> 
> 
>@@ -323,19 +324,25 @@
> 
>   static const char log_request_tail[] = "</S:log-report>" DEBUG_CR;
>   
>-  static const struct ne_xml_elm log_report_elements[] =
>+  static const svn_ra_dav__xml_elm_t log_report_elements[] =
>     {
>       { SVN_XML_NAMESPACE, "log-report", ELEM_log_report, 0 },
>       { SVN_XML_NAMESPACE, "log-item", ELEM_log_item, 0 },
>-      { SVN_XML_NAMESPACE, "date", ELEM_log_date, NE_XML_CDATA },
>-      { SVN_XML_NAMESPACE, "added-path", ELEM_added_path, NE_XML_CDATA },
>-      { SVN_XML_NAMESPACE, "deleted-path", ELEM_deleted_path, NE_XML_CDATA },
>-      { SVN_XML_NAMESPACE, "modified-path", ELEM_modified_path, NE_XML_CDATA },
>-      { SVN_XML_NAMESPACE, "replaced-path", ELEM_replaced_path, NE_XML_CDATA },
>-      { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
>+      { SVN_XML_NAMESPACE, "date", ELEM_log_date, SVN_RA_DAV__XML_CDATA },
>+      { SVN_XML_NAMESPACE, "added-path", ELEM_added_path,
>+        SVN_RA_DAV__XML_CDATA },
>+      { SVN_XML_NAMESPACE, "deleted-path", ELEM_deleted_path,
>+        SVN_RA_DAV__XML_CDATA },
>+      { SVN_XML_NAMESPACE, "modified-path", ELEM_modified_path,
>+        SVN_RA_DAV__XML_CDATA },
>+      { SVN_XML_NAMESPACE, "replaced-path", ELEM_replaced_path,
>+        SVN_RA_DAV__XML_CDATA },
>+      { "DAV:", "version-name", ELEM_version_name,
>+        SVN_RA_DAV__XML_CDATA },
>       { "DAV:", "creator-displayname", ELEM_creator_displayname,
>-        NE_XML_CDATA },
>-      { "DAV:", "comment", ELEM_comment, NE_XML_CDATA },
>+        SVN_RA_DAV__XML_CDATA },
>+      { "DAV:", "comment", ELEM_comment,
>+        SVN_RA_DAV__XML_CDATA },
>       { NULL }
>     };
>   
>Index: subversion/libsvn_ra_dav/props.c
>===================================================================
>--- subversion/libsvn_ra_dav/props.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/props.c	(working copy)
>@@ -73,7 +73,7 @@
> /*** Propfind Implementation ***/
> 
> typedef struct {
>-  ne_xml_elmid id;
>+  int id;
>   const char *name;
>   int is_property;      /* is it a property, or part of some structure? */
> } elem_defn;
>@@ -85,14 +85,14 @@
>        propfind_elements[] ***/
> 
>   /* DAV elements */
>-  { NE_ELM_multistatus, "DAV:multistatus", 0 },
>-  { NE_ELM_response, "DAV:response", 0 },
>-  { NE_ELM_href, "DAV:href", NE_XML_CDATA },
>-  { NE_ELM_propstat, "DAV:propstat", 0 },
>-  { NE_ELM_prop, "DAV:prop", 0 },
>-  { NE_ELM_status, "DAV:status", NE_XML_CDATA },
>-  { ELEM_baseline, "DAV:baseline", NE_XML_CDATA },
>-  { ELEM_collection, "DAV:collection", NE_XML_CDATA },
>+  { ELEM_multistatus, "DAV:multistatus", 0 },
>+  { ELEM_response, "DAV:response", 0 },
>+  { ELEM_href, "DAV:href", SVN_RA_DAV__XML_CDATA },
>+  { ELEM_propstat, "DAV:propstat", 0 },
>+  { ELEM_prop, "DAV:prop", 0 },
>+  { ELEM_status, "DAV:status", SVN_RA_DAV__XML_CDATA },
>+  { ELEM_baseline, "DAV:baseline", SVN_RA_DAV__XML_CDATA },
>+  { ELEM_collection, "DAV:collection", SVN_RA_DAV__XML_CDATA },
>   { ELEM_resourcetype, "DAV:resourcetype", 0 },
>   { ELEM_baseline_coll, SVN_RA_DAV__PROP_BASELINE_COLLECTION, 0 },
>   { ELEM_checked_in, SVN_RA_DAV__PROP_CHECKED_IN, 0 },
>@@ -110,39 +110,41 @@
> };
> 
> 
>-static const struct ne_xml_elm propfind_elements[] = 
>+static const svn_ra_dav__xml_elm_t propfind_elements[] = 
> {
>   /*** NOTE: Make sure that every item in here is also represented in
>        elem_definitions[] ***/
> 
>   /* DAV elements */
>-  { "DAV:", "multistatus", NE_ELM_multistatus, 0 },
>-  { "DAV:", "response", NE_ELM_response, 0 },
>-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
>-  { "DAV:", "propstat", NE_ELM_propstat, 0 },
>-  { "DAV:", "prop", NE_ELM_prop, 0 },
>-  { "DAV:", "status", NE_ELM_status, NE_XML_CDATA },
>-  { "DAV:", "baseline", ELEM_baseline, NE_XML_CDATA },
>-  { "DAV:", "baseline-collection", ELEM_baseline_coll, NE_XML_CDATA },
>+  { "DAV:", "multistatus", ELEM_multistatus, 0 },
>+  { "DAV:", "response", ELEM_response, 0 },
>+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "propstat", ELEM_propstat, 0 },
>+  { "DAV:", "prop", ELEM_prop, 0 },
>+  { "DAV:", "status", ELEM_status, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "baseline", ELEM_baseline, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "baseline-collection", ELEM_baseline_coll, SVN_RA_DAV__XML_CDATA },
>   { "DAV:", "checked-in", ELEM_checked_in, 0 },
>-  { "DAV:", "collection", ELEM_collection, NE_XML_CDATA },
>+  { "DAV:", "collection", ELEM_collection, SVN_RA_DAV__XML_CDATA },
>   { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
>   { "DAV:", "version-controlled-configuration", ELEM_vcc, 0 },
>-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
>-  { "DAV:", "getcontentlength", ELEM_get_content_length, NE_XML_CDATA },
>-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
>-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
>+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "getcontentlength", ELEM_get_content_length,
>+     SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
>+     SVN_RA_DAV__XML_CDATA },
> 
>   /* SVN elements */
>   { SVN_DAV_PROP_NS_DAV, "baseline-relative-path", ELEM_baseline_relpath,
>-    NE_XML_CDATA },
>+    SVN_RA_DAV__XML_CDATA },
>   { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
>-    NE_XML_CDATA },
>+    SVN_RA_DAV__XML_CDATA },
>   { SVN_DAV_PROP_NS_DAV, "repository-uuid", ELEM_repository_uuid,
>-    NE_XML_CDATA },
>+    SVN_RA_DAV__XML_CDATA },
> 
>   /* Unknowns */
>-  { "", "", NE_ELM_unknown, NE_XML_COLLECT },
>+  { "", "", ELEM_unknown, SVN_RA_DAV__XML_COLLECT },
> 
>   { NULL } 
> };
>@@ -156,7 +158,7 @@
>   const char *encoding; /* property encoding (or NULL) */
>   int status; /* status for the current <propstat> (or 0 if unknown). */
>   apr_hash_t *propbuffer; /* holds properties until their status is known. */
>-  ne_xml_elmid last_open_id; /* the id of the last opened tag. */
>+  int last_open_id; /* the id of the last opened tag. */
>   ne_xml_parser *parser; /* xml parser handling the PROPSET request. */
> 
>   apr_pool_t *pool;
>@@ -166,7 +168,7 @@
> 
> /* Look up an element definition ID.  May return NULL if the elem is
>    not recognized. */
>-static const elem_defn *defn_from_id(ne_xml_elmid id)
>+static const elem_defn *defn_from_id(int id)
> {
>   const elem_defn *defn;
> 
>@@ -206,54 +208,55 @@
> 
> 
> static int validate_element(void *userdata, 
>-                            ne_xml_elmid parent, 
>-                            ne_xml_elmid child)
>+                            int parent, 
>+                            int child)
> {
>   switch (parent)
>     {
>-    case NE_ELM_root:
>-      if (child == NE_ELM_multistatus)
>-        return NE_XML_VALID;
>+    case ELEM_root:
>+      if (child == ELEM_multistatus)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>-    case NE_ELM_multistatus:
>-      if (child == NE_ELM_response)
>-        return NE_XML_VALID;
>+    case ELEM_multistatus:
>+      if (child == ELEM_response)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE;
>+        return SVN_RA_DAV__XML_DECLINE;
> 
>-    case NE_ELM_response:
>-      if ((child == NE_ELM_href) || (child == NE_ELM_propstat))
>-        return NE_XML_VALID;
>+    case ELEM_response:
>+      if ((child == ELEM_href) || (child == ELEM_propstat))
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE;
>+        return SVN_RA_DAV__XML_DECLINE;
> 
>-    case NE_ELM_propstat:
>-      if ((child == NE_ELM_prop) || (child == NE_ELM_status))
>-        return NE_XML_VALID;
>+    case ELEM_propstat:
>+      if ((child == ELEM_prop) || (child == ELEM_status))
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE;
>+        return SVN_RA_DAV__XML_DECLINE;
> 
>-    case NE_ELM_prop:
>-      return NE_XML_VALID; /* handle all children of <prop> */
>+    case ELEM_prop:
>+      return SVN_RA_DAV__XML_VALID; /* handle all children of <prop> */
>         
>     case ELEM_baseline_coll:
>     case ELEM_checked_in:
>     case ELEM_vcc:
>-      if (child == NE_ELM_href)
>-        return NE_XML_VALID;
>+      if (child == ELEM_href)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* not concerned with other types */
>+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other types */
>       
>     case ELEM_resourcetype:
>       if ((child == ELEM_collection) || (child == ELEM_baseline))
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* not concerned with other types (### now) */
>+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other types
>+                                           (### now) */
> 
>     default:
>-      return NE_XML_DECLINE;
>+      return SVN_RA_DAV__XML_DECLINE;
>     }
> 
>   /* NOTREACHED */
>@@ -261,14 +264,14 @@
> 
> 
> static int start_element(void *userdata, 
>-                         const struct ne_xml_elm *elm, 
>+                         const svn_ra_dav__xml_elm_t *elm, 
>                          const char **atts)
> {
>   propfind_ctx_t *pc = userdata;
> 
>   switch (elm->id)
>     {
>-    case NE_ELM_response:
>+    case ELEM_response:
>       if (pc->rsrc)
>         return 1;
>       /* Create a new resource. */
>@@ -278,11 +281,11 @@
>       pc->status = 0;
>       break;
> 
>-    case NE_ELM_propstat:
>+    case ELEM_propstat:
>       pc->status = 0;
>       break;
> 
>-    case NE_ELM_href:
>+    case ELEM_href:
>       /* Remember this <href>'s parent so that when we close this tag,
>          we know to whom the URL assignment belongs.  Could be the
>          resource itself, or one of the properties:
>@@ -294,7 +297,7 @@
>       pc->rsrc->is_collection = 1;
>       break;
> 
>-    case NE_ELM_unknown:
>+    case ELEM_unknown:
>       /* these are our user-visible properties, presumably. */
>       pc->encoding = ne_xml_get_attr(pc->parser, atts, SVN_DAV_PROP_NS_DAV,
>                                      "encoding");
>@@ -314,7 +317,7 @@
> 
> 
> static int end_element(void *userdata, 
>-                       const struct ne_xml_elm *elm,
>+                       const svn_ra_dav__xml_elm_t *elm,
>                        const char *cdata)
> {
>   propfind_ctx_t *pc = userdata;
>@@ -327,7 +330,7 @@
> 
>   switch (elm->id)
>     {
>-    case NE_ELM_response:
>+    case ELEM_response:
>       /* Verify that we've received a URL for this resource. */
>       if (!pc->rsrc->url)
>         return 1;
>@@ -337,7 +340,7 @@
>       pc->rsrc = NULL;
>       return 0;
> 
>-    case NE_ELM_propstat:
>+    case ELEM_propstat:
>       /* We're at the end of a set of properties.  Do the right thing
>          status-wise. */
>       if (pc->status)
>@@ -366,7 +369,7 @@
>         }
>       return 0;
> 
>-    case NE_ELM_status:
>+    case ELEM_status:
>       /* Parse the <status> tag's CDATA for a status code. */
>       if (ne_parse_statusline(cdata, &status))
>         return 1;
>@@ -374,9 +377,9 @@
>       pc->status = status.code;
>       return 0;
> 
>-    case NE_ELM_href:
>+    case ELEM_href:
>       /* Special handling for <href> that belongs to the <response> tag. */
>-      if (rsrc->href_parent == NE_ELM_response)
>+      if (rsrc->href_parent == ELEM_response)
>         {
>           assign_rsrc_url(pc->rsrc, cdata, pc->pool);
>           return 0;
>@@ -396,15 +399,15 @@
> 
>     default:
>       /*** This case is, as usual, for everything not covered by other
>-           cases.  ELM->id should be either NE_ELM_unknown, or one of
>+           cases.  ELM->id should be either ELEM_unknown, or one of
>            the ids in the elem_definitions[] structure.  In this case,
>-           we seek to handle properties.  Since NE_ELM_unknown should
>+           we seek to handle properties.  Since ELEM_unknown should
>            only occur for properties, we will handle that id.  All
>            other ids will be searched for in the elem_definitions[]
>            structure to determine if they are properties.  Properties,
>            we handle; all else hits the road.  ***/
> 
>-      if (elm->id == NE_ELM_unknown)
>+      if (elm->id == ELEM_unknown)
>         {
>           name = apr_pstrcat(pc->pool, elm->nspace, elm->name, NULL);
>         }
>Index: subversion/libsvn_ra_dav/session.c
>===================================================================
>--- subversion/libsvn_ra_dav/session.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/session.c	(working copy)
>@@ -204,6 +204,7 @@
>       client_creds = creds;
>       if (client_creds)
>         {
>+#if 0 /*MBK*/
>           if (client_creds->cert_type == svn_auth_ssl_pem_cert_type)
>             {
>               ne_ssl_load_pem(sess, client_creds->cert_file,
>@@ -213,6 +214,7 @@
>             {
>               ne_ssl_load_pkcs12(sess, client_creds->cert_file);
>             }
>+#endif
>         }
>     }
>   apr_pool_destroy(pool);
>@@ -605,6 +607,7 @@
> 
>   if (is_ssl_session)
>     {
>+#if 0 /*MBK*/
>       const char *authorities_file;
>       authorities_file = svn_config_get_server_setting(
>             cfg, server_group,
>@@ -630,6 +633,7 @@
>          a password is needed for the key. */
>       ne_ssl_keypw_prompt(sess, client_ssl_keypw_callback, ras);
>       ne_ssl_keypw_prompt(sess2, client_ssl_keypw_callback, ras);
>+#endif
>     }
> 
> 
>Index: subversion/libsvn_ra_dav/fetch.c
>===================================================================
>--- subversion/libsvn_ra_dav/fetch.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/fetch.c	(working copy)
>@@ -175,7 +175,7 @@
>                                    "\">" DEBUG_CR;
> static const char report_tail[] = "</S:update-report>" DEBUG_CR;
> 
>-static const struct ne_xml_elm report_elements[] =
>+static const svn_ra_dav__xml_elm_t report_elements[] =
> {
>   { SVN_XML_NAMESPACE, "update-report", ELEM_update_report, 0 },
>   { SVN_XML_NAMESPACE, "resource-walk", ELEM_resource_walk, 0 },
>@@ -195,25 +195,27 @@
>   { SVN_XML_NAMESPACE, "fetch-file", ELEM_fetch_file, 0 },
>   { SVN_XML_NAMESPACE, "prop", ELEM_prop, 0 },
>   { SVN_DAV_PROP_NS_DAV, "repository-uuid",
>-    ELEM_repository_uuid, NE_XML_CDATA },
>+    ELEM_repository_uuid, SVN_RA_DAV__XML_CDATA },
> 
>-  { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum, NE_XML_CDATA },
>+  { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
>+    SVN_RA_DAV__XML_CDATA },
> 
>-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
>-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
>-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
>+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
>+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
>+     SVN_RA_DAV__XML_CDATA },
> 
>   { "DAV:", "checked-in", ELEM_checked_in, 0 },
>-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
>+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
> 
>   { NULL }
> };
> 
> /* Elements used in a dated-rev-report response */
>-static const struct ne_xml_elm drev_report_elements[] =
>+static const svn_ra_dav__xml_elm_t drev_report_elements[] =
> {
>   { SVN_XML_NAMESPACE, "dated-rev-report", ELEM_dated_rev_report, 0 },
>-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
>+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
>   { NULL }
> };
> 
>@@ -1003,21 +1005,21 @@
> */
> 
> /* This implements the `ne_xml_validate_cb' prototype. */
>-static int drev_validate_element(void *userdata, ne_xml_elmid parent,
>-                                 ne_xml_elmid child)
>+static int drev_validate_element(void *userdata, int parent,
>+                                 int child)
> {
>-  return NE_XML_VALID;
>+  return SVN_RA_DAV__XML_VALID;
> }
> 
> /* This implements the `ne_xml_startelm_cb' prototype. */
>-static int drev_start_element(void *userdata, const struct ne_xml_elm *elm,
>+static int drev_start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                               const char **atts)
> {
>   return 0;
> }
> 
> /* This implements the `ne_xml_endelm_cb' prototype. */
>-static int drev_end_element(void *userdata, const struct ne_xml_elm *elm,
>+static int drev_end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                             const char *cdata)
> {
>   if (elm->id == ELEM_version_name)
>@@ -1227,8 +1229,8 @@
> 
> /* This implements the `ne_xml_validate_cb' prototype. */
> static int validate_element(void *userdata,
>-                            ne_xml_elmid parent,
>-                            ne_xml_elmid child)
>+                            int parent,
>+                            int child)
> {
>   /* We're being very strict with the validity of XML elements here. If
>      something exists that we don't know about, then we might not update
>@@ -1238,31 +1240,31 @@
> 
>   switch (parent)
>     {
>-    case NE_ELM_root:
>+    case ELEM_root:
>       if (child == ELEM_update_report)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_update_report:
>       if (child == ELEM_target_revision
>           || child == ELEM_open_directory
>           || child == ELEM_resource_walk)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_resource_walk:
>       if (child == ELEM_resource)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_resource:
>       if (child == ELEM_checked_in)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_open_directory:
>       if (child == ELEM_open_directory
>@@ -1274,18 +1276,18 @@
>           || child == ELEM_delete_entry
>           || child == ELEM_prop
>           || child == ELEM_checked_in)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_add_directory:
>       if (child == ELEM_add_directory
>           || child == ELEM_add_file
>           || child == ELEM_prop
>           || child == ELEM_checked_in)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_open_file:
>       if (child == ELEM_checked_in
>@@ -1293,22 +1295,22 @@
>           || child == ELEM_prop
>           || child == ELEM_fetch_props
>           || child == ELEM_remove_prop)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_add_file:
>       if (child == ELEM_checked_in
>           || child == ELEM_prop)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_checked_in:
>-      if (child == NE_ELM_href)
>-        return NE_XML_VALID;
>+      if (child == ELEM_href)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_prop:
>       /*      if (child == ELEM_version_name
>@@ -1317,17 +1319,17 @@
>               || child == ELEM_md5_checksum
>               || child == ELEM_repository_uuid
>               || child == ELEM_remove_prop)
>-              return NE_XML_VALID;
>+              return SVN_RA_DAV__XML_VALID;
>               else
>-              return NE_XML_DECLINE;
>+              return SVN_RA_DAV__XML_DECLINE;
>       */
>       /* ### TODO:  someday uncomment the block above, and make the
>-         else clause return NE_XML_IGNORE.  But first, neon needs to
>+         else clause return SVN_RA_DAV__XML_IGNORE.  But first, neon needs to
>          define that value.  :-) */
>-      return NE_XML_VALID;
>+      return SVN_RA_DAV__XML_VALID;
> 
>     default:
>-      return NE_XML_DECLINE;
>+      return SVN_RA_DAV__XML_DECLINE;
>     }
> 
>   /* NOTREACHED */
>@@ -1355,7 +1357,7 @@
> }
> 
> /* This implements the `ne_xml_startelm_cb' prototype. */
>-static int start_element(void *userdata, const struct ne_xml_elm *elm,
>+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                          const char **atts)
> {
>   report_baton_t *rb = userdata;
>@@ -1731,7 +1733,7 @@
> 
> /* This implements the `ne_xml_endelm_cb' prototype. */
> static int end_element(void *userdata, 
>-                       const struct ne_xml_elm *elm,
>+                       const svn_ra_dav__xml_elm_t *elm,
>                        const char *cdata)
> {
>   report_baton_t *rb = userdata;
>@@ -1813,7 +1815,7 @@
>       rb->file_pool = NULL;
>       break;
> 
>-    case NE_ELM_href:
>+    case ELEM_href:
>       /* do nothing if we aren't fetching content. */
>       if (!rb->fetch_content)
>         break;
>Index: subversion/libsvn_ra_dav/options.c
>===================================================================
>--- subversion/libsvn_ra_dav/options.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/options.c	(working copy)
>@@ -29,10 +29,10 @@
> #include "ra_dav.h"
> 
> 
>-static const struct ne_xml_elm options_elements[] =
>+static const svn_ra_dav__xml_elm_t options_elements[] =
> {
>   { "DAV:", "activity-collection-set", ELEM_activity_coll_set, 0 },
>-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
>+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
>   { "DAV:", "options-response", ELEM_options_response, 0 },
> 
>   { NULL }
>@@ -46,49 +46,48 @@
> 
> 
> 
>-static int validate_element(void *userdata, ne_xml_elmid parent,
>-                            ne_xml_elmid child)
>+static int validate_element(void *userdata, int parent, int child)
> {
>   switch (parent)
>     {
>-    case NE_ELM_root:
>+    case ELEM_root:
>       if (child == ELEM_options_response)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_options_response:
>       if (child == ELEM_activity_coll_set)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* not concerned with other response */
>+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other response */
> 
>     case ELEM_activity_coll_set:
>-      if (child == NE_ELM_href)
>-        return NE_XML_VALID;
>+      if (child == ELEM_href)
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE; /* not concerned with unknown crud */
>+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with unknown crud */
> 
>     default:
>-      return NE_XML_DECLINE;
>+      return SVN_RA_DAV__XML_DECLINE;
>     }
> 
>   /* NOTREACHED */
> }
> 
>-static int start_element(void *userdata, const struct ne_xml_elm *elm,
>+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                          const char **atts)
> {
>   /* nothing to do here */
>   return 0;
> }
> 
>-static int end_element(void *userdata, const struct ne_xml_elm *elm,
>+static int end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                        const char *cdata)
> {
>   options_ctx_t *oc = userdata;
> 
>-  if (elm->id == NE_ELM_href)
>+  if (elm->id == ELEM_href)
>     {
>       oc->activity_coll = svn_string_create(cdata, oc->pool);
>     }
>Index: subversion/libsvn_ra_dav/util.c
>===================================================================
>--- subversion/libsvn_ra_dav/util.c	(revision 6363)
>+++ subversion/libsvn_ra_dav/util.c	(working copy)
>@@ -1,5 +1,4 @@
> /*
>- * util.c :  utility functions for the RA/DAV library
>  *
>  * ====================================================================
>  * Copyright (c) 2000-2003 CollabNet.  All rights reserved.
>@@ -16,6 +15,8 @@
>  * ====================================================================
>  */
> 
>+#include <apr_pools.h>
>+
> #define APR_WANT_STRFUNC
> #include <apr_want.h>
> 
>@@ -33,6 +34,109 @@
> 
> 
> 
>+#ifdef SVN_RA_DAV__NEED_SHIM
>+
>+typedef struct {
>+  apr_pool_t *pool;
>+  void *userdata;
>+  const svn_ra_dav__xml_elm_t *elements;
>+  svn_ra_dav__xml_validate_cb *validate_cb;
>+  svn_ra_dav__xml_startelm_cb *startelm_cb;
>+  svn_ra_dav__xml_endelm_cb *endelm_cb;
>+  svn_stringbuf_t *accum;
>+  int state;
>+} shim_baton_t;
>+
>+static const svn_ra_dav__xml_elm_t *lookup_elem(
>+                                          const svn_ra_dav__xml_elm_t *table,
>+                                          const char *nspace,
>+                                          const char *name)
>+{
>+  while(table->nspace)
>+    {
>+      if (strcmp(table->nspace, nspace) == 0
>+          && strcmp(table->name, name) == 0)
>+        return table;
>+      table++;
>+    }
>+  return NULL;
>+}
>+
>+static int shim_startelm(void *userdata, int parent, const char *nspace,
>+                         const char *name, const char **attrs)
>+{
>+  const svn_ra_dav__xml_elm_t *elem;
>+  shim_baton_t *baton = userdata;
>+  int rc;
>+
>+  elem = lookup_elem(baton->elements, nspace, name);
>+  if (!elem)
>+    return SVN_RA_DAV__XML_INVALID;
>+
>+  rc = baton->validate_cb(baton->userdata, parent, elem->id);
>+  if (rc < 0)
>+    return rc;
>+
>+  return baton->startelm_cb(baton->userdata, elem, attrs);
>+}
>+
>+static int shim_cdata(void *userdata, int state, const char *cdata, size_t len)
>+{
>+  const svn_ra_dav__xml_elm_t *elem;
>+  shim_baton_t *baton = userdata;
>+  svn_stringbuf_appendbytes(baton->accum, cdata, len);
>+}
>+
>+static int shim_endelm(void *userdata, int parent, const char *nspace,
>+                       const char *name)
>+{
>+  const svn_ra_dav__xml_elm_t *elem;
>+  shim_baton_t *baton = userdata;
>+
>+  elem = lookup_elem(baton->elements, nspace, name);
>+  if (!elem)
>+    return SVN_RA_DAV__XML_INVALID;
>+
>+  return baton->endelm_cb(baton->userdata,
>+                          elem,
>+                          baton->accum->data);
>+}
>+
>+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
>+                                  const svn_ra_dav__xml_elm_t *elements,
>+                                  svn_ra_dav__xml_validate_cb validate_cb,
>+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
>+                                  svn_ra_dav__xml_endelm_cb endelm_cb, 
>+                                  void *userdata,
>+                                  apr_pool_t *pool)
>+{
>+  shim_baton_t *baton = apr_pcalloc(pool, sizeof(shim_baton_t));
>+  baton->pool = pool;
>+  baton->userdata = userdata;
>+  baton->elements = elements;
>+  baton->validate_cb = validate_cb;
>+  baton->startelm_cb = startelm_cb;
>+  baton->endelm_cb = endelm_cb;
>+
>+  ne_xml_push_handler(p, shim_startelm, shim_cdata, shim_endelm, baton);
>+}
>+
>+#else
>+
>+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
>+                                  const svn_ra_dav__xml_elm_t *elements,
>+                                  svn_ra_dav__xml_validate_cb validate_cb,
>+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
>+                                  svn_ra_dav__xml_endelm_cb endelm_cb, 
>+                                  void *userdata,
>+                                  apr_pool_t *pool)
>+{
>+  ne_xml_push_handler(p, elements, validate_cb, startelm_cb, endelm_cb,
>+                      userdata);
>+}
>+
>+#endif
>+
> void svn_ra_dav__copy_href(svn_stringbuf_t *dst, const char *src)
> {
>   ne_uri parsed_url;
>@@ -98,12 +202,12 @@
> }
> 
> 
>-static const struct ne_xml_elm error_elements[] =
>+static const svn_ra_dav__xml_elm_t error_elements[] =
> {
>   { "DAV:", "error", ELEM_error, 0 },
>   { "svn:", "error", ELEM_svn_error, 0 },
>   { "http://apache.org/dav/xmlns", "human-readable", 
>-    ELEM_human_readable, NE_XML_CDATA },
>+    ELEM_human_readable, SVN_RA_DAV__XML_CDATA },
> 
>   /* ### our validator doesn't yet recognize the rich, specific
>          <D:some-condition-failed/> objects as defined by DeltaV.*/
>@@ -113,33 +217,34 @@
> 
> 
> static int validate_error_elements(void *userdata,
>-                                   ne_xml_elmid parent,
>-                                   ne_xml_elmid child)
>+                                   int parent,
>+                                   int child)
> {
>   switch (parent)
>     {
>-    case NE_ELM_root:
>+    case ELEM_root:
>       if (child == ELEM_error)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_INVALID;
>+        return SVN_RA_DAV__XML_INVALID;
> 
>     case ELEM_error:
>       if (child == ELEM_svn_error
>           || child == ELEM_human_readable)
>-        return NE_XML_VALID;
>+        return SVN_RA_DAV__XML_VALID;
>       else
>-        return NE_XML_DECLINE;  /* ignore if something else was in there */
>+        return SVN_RA_DAV__XML_DECLINE;  /* ignore if something else was
>+                                            in there */
> 
>     default:
>-      return NE_XML_DECLINE;
>+      return SVN_RA_DAV__XML_DECLINE;
>     }
> 
>   /* NOTREACHED */
> }
> 
> 
>-static int start_err_element(void *userdata, const struct ne_xml_elm *elm,
>+static int start_err_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                              const char **atts)
> {
>   svn_error_t **err = userdata;
>@@ -176,7 +281,7 @@
>   return 0;
> }
> 
>-static int end_err_element(void *userdata, const struct ne_xml_elm *elm,
>+static int end_err_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
>                            const char *cdata)
> {
>   svn_error_t **err = userdata;
>@@ -256,10 +361,10 @@
>                            apr_file_t *body_file,
>                            void set_parser (ne_xml_parser *parser,
>                                             void *baton),
>-                           const struct ne_xml_elm *elements, 
>-                           ne_xml_validate_cb validate_cb,
>-                           ne_xml_startelm_cb startelm_cb, 
>-                           ne_xml_endelm_cb endelm_cb,
>+                           const svn_ra_dav__xml_elm_t *elements, 
>+                           svn_ra_dav__xml_validate_cb validate_cb,
>+                           svn_ra_dav__xml_startelm_cb startelm_cb, 
>+                           svn_ra_dav__xml_endelm_cb endelm_cb,
>                            void *baton,
>                            apr_hash_t *extra_headers,
>                            apr_pool_t *pool)
>@@ -305,8 +410,9 @@
> 
>   /* create a parser to read the normal response body */
>   success_parser = ne_xml_create();
>-  ne_xml_push_handler(success_parser, elements,
>-                      validate_cb, startelm_cb, endelm_cb, baton);
>+  svn_ra_dav__xml_push_handler(success_parser, elements,
>+                               validate_cb, startelm_cb, endelm_cb, baton,
>+                               pool);
> 
>   /* if our caller is interested in having access to this parser, call
>      the SET_PARSER callback with BATON. */
>@@ -315,8 +421,9 @@
> 
>   /* create a parser to read the <D:error> response body */
>   error_parser = ne_xml_create();
>-  ne_xml_push_handler(error_parser, error_elements, validate_error_elements,
>-                      start_err_element, end_err_element, &err); 
>+  svn_ra_dav__xml_push_handler(error_parser, error_elements,
>+                               validate_error_elements, start_err_element,
>+                               end_err_element, &err, pool); 
> 
>   /* Register the "main" accepter and body-reader with the request --
>      the one to use when the HTTP status is 2XX */
>@@ -445,8 +552,9 @@
> 
>   /* attach a standard <D:error> body parser to the request */
>   error_parser = ne_xml_create();
>-  ne_xml_push_handler(error_parser, error_elements, validate_error_elements,
>-                      start_err_element, end_err_element, &err);
>+  svn_ra_dav__xml_push_handler(error_parser, error_elements,
>+                               validate_error_elements, start_err_element,
>+                               end_err_element, &err, pool);
>   ne_add_response_body_reader(request, ra_dav_error_accepter,
>                               ne_xml_parse_v, error_parser);
> 
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
>For additional commands, e-mail: dev-help@subversion.tigris.org
>
>  
>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by mark benedetto king <mb...@lowlatency.com>.
On Thu, Jun 26, 2003 at 03:09:09PM -0400, Sergey A. Lipnevich wrote:
> mark benedetto king wrote:
> >
> >If you'd like to take over the work on this, I can send you my diffs;
> >I do have other issues that I should probably be working on instead.
> >
> Since this is a "beta" issue now, I assume I have some time to slide 
> into Subversion code. I expect to have some time during this weekend to 
> get started. Actually, I did get started and have done something before 
> I realized that it's better to implement the "shim layer" as you put it.
> 

Okay, better get it to you before the weekend, then.   :-)

One issue that I've run into is that neon's SSL interface has also
changed.  To save myself some headache, I've just #ifdef'ed out the SSL
calls from libsvn_ra_dav/session.c.  This is obviously not an acceptable
solution.

The following is a completely untested and certainly broken patch
that merely represents the state of my WC right now. :-)  I am handing
this change off to you.


Index: subversion/libsvn_ra_dav/merge.c
===================================================================
--- subversion/libsvn_ra_dav/merge.c	(revision 6363)
+++ subversion/libsvn_ra_dav/merge.c	(working copy)
@@ -35,25 +35,27 @@
 #include "ra_dav.h"
 
 
-static const struct ne_xml_elm merge_elements[] =
+static const svn_ra_dav__xml_elm_t merge_elements[] =
 {
   { "DAV:", "updated-set", ELEM_updated_set, 0 },
   { "DAV:", "merged-set", ELEM_merged_set, 0 },
   { "DAV:", "ignored-set", ELEM_ignored_set, 0 },
-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
   { "DAV:", "merge-response", ELEM_merge_response, 0 },
   { "DAV:", "checked-in", ELEM_checked_in, 0 },
-  { "DAV:", "response", NE_ELM_response, 0 },
-  { "DAV:", "propstat", NE_ELM_propstat, 0 },
-  { "DAV:", "status", NE_ELM_status, NE_XML_CDATA },
-  { "DAV:", "responsedescription", NE_ELM_responsedescription, NE_XML_CDATA },
-  { "DAV:", "prop", NE_ELM_prop, 0 },
+  { "DAV:", "response", ELEM_response, 0 },
+  { "DAV:", "propstat", ELEM_propstat, 0 },
+  { "DAV:", "status", ELEM_status, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "responsedescription", ELEM_responsedescription,
+    SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "prop", ELEM_prop, 0 },
   { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
   { "DAV:", "collection", ELEM_collection, 0 },
   { "DAV:", "baseline", ELEM_baseline, 0 },
-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
+    SVN_RA_DAV__XML_CDATA },
 
   { NULL }
 };
@@ -260,102 +262,108 @@
   return bump_resource(mc, relative, mc->vsn_url->data);
 }
 
-static int validate_element(void *userdata, ne_xml_elmid parent,
-                            ne_xml_elmid child)
+static int validate_element(void *userdata, int parent,
+                            int child)
 {
   if ((child == ELEM_collection || child == ELEM_baseline)
       && parent != ELEM_resourcetype) {
     /* ### technically, they could occur elsewhere, but screw it */
-    return NE_XML_INVALID;
+    return SVN_RA_DAV__XML_INVALID;
   }
 
   switch (parent)
     {
-    case NE_ELM_root:
+    case ELEM_root:
       if (child == ELEM_merge_response)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_merge_response:
       if (child == ELEM_updated_set
           || child == ELEM_merged_set
           || child == ELEM_ignored_set)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* any child is allowed */
+        return SVN_RA_DAV__XML_DECLINE; /* any child is allowed */
 
     case ELEM_updated_set:
     case ELEM_merged_set:
-      if (child == NE_ELM_response)
-        return NE_XML_VALID;
+      if (child == ELEM_response)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
     case ELEM_ignored_set:
-      if (child == NE_ELM_href)
-        return NE_XML_VALID;
+      if (child == ELEM_href)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
-    case NE_ELM_response:
-      if (child == NE_ELM_href
-          || child == NE_ELM_status
-          || child == NE_ELM_propstat)
-        return NE_XML_VALID;
-      else if (child == NE_ELM_responsedescription)
+    case ELEM_response:
+      if (child == ELEM_href
+          || child == ELEM_status
+          || child == ELEM_propstat)
+        return SVN_RA_DAV__XML_VALID;
+      else if (child == ELEM_responsedescription)
         /* ### I think we want this... to save a message for the user */
-        return NE_XML_DECLINE; /* valid, but we don't need to see it */
+        return SVN_RA_DAV__XML_DECLINE; /* valid, but we don't need to see it */
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
-    case NE_ELM_propstat:
-      if (child == NE_ELM_prop || child == NE_ELM_status)
-        return NE_XML_VALID;
-      else if (child == NE_ELM_responsedescription)
+    case ELEM_propstat:
+      if (child == ELEM_prop || child == ELEM_status)
+        return SVN_RA_DAV__XML_VALID;
+      else if (child == ELEM_responsedescription)
         /* ### I think we want this... to save a message for the user */
-        return NE_XML_DECLINE; /* valid, but we don't need to see it */
+        return SVN_RA_DAV__XML_DECLINE; /* valid, but we don't need to see it */
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
-    case NE_ELM_prop:
+    case ELEM_prop:
       if (child == ELEM_checked_in
           || child == ELEM_resourcetype
           || child == ELEM_version_name
           || child == ELEM_creationdate
           || child == ELEM_creator_displayname
           /* other props */)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* ignore other props */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore other props */
 
     case ELEM_checked_in:
-      if (child == NE_ELM_href)
-        return NE_XML_VALID;
+      if (child == ELEM_href)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
     case ELEM_resourcetype:
       if (child == ELEM_collection || child == ELEM_baseline)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE; /* ignore if something else was
+                                           in there */
 
     default:
-      return NE_XML_DECLINE;
+      return SVN_RA_DAV__XML_DECLINE;
     }
 
   /* NOTREACHED */
 }
 
-static int start_element(void *userdata, const struct ne_xml_elm *elm,
+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                          const char **atts)
 {
   merge_ctx_t *mc = userdata;
 
   switch (elm->id)
     {
-    case NE_ELM_response:
+    case ELEM_response:
       mc->response_has_error = FALSE;
 
       /* for each response (which corresponds to one resource), note that we
@@ -380,7 +388,7 @@
       mc->response_parent = elm->id;
       break;
 
-    case NE_ELM_propstat:
+    case ELEM_propstat:
       /* initialize the status so we can figure out if we ever saw a
          status element in the propstat */
       mc->status = 0;
@@ -401,7 +409,7 @@
       break;
 
     default:
-      /* one of: NE_ELM_href, NE_ELM_status, NE_ELM_prop,
+      /* one of: ELEM_href, ELEM_status, ELEM_prop,
          ELEM_version_name */
       break;
     }
@@ -409,21 +417,21 @@
   return 0;
 }
 
-static int end_element(void *userdata, const struct ne_xml_elm *elm,
+static int end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                        const char *cdata)
 {
   merge_ctx_t *mc = userdata;
 
   switch (elm->id)
     {
-    case NE_ELM_href:
+    case ELEM_href:
       switch (mc->href_parent)
         {
         case ELEM_ignored_set:
           add_ignored(mc, cdata);
           break;
 
-        case NE_ELM_response:
+        case ELEM_response:
           /* we're now working on this href... */
           svn_ra_dav__copy_href(mc->href, cdata);
           break;
@@ -434,12 +442,12 @@
         }
       break;
 
-    case NE_ELM_responsedescription:
+    case ELEM_responsedescription:
       /* ### I don't think we'll see this right now, due to validate_element */
       /* ### remember this for error messages? */
       break;
 
-    case NE_ELM_status:
+    case ELEM_status:
       {
         ne_status hs;
 
@@ -465,7 +473,7 @@
       }
       break;
 
-    case NE_ELM_propstat:
+    case ELEM_propstat:
       /* ### does Neon have a symbol for 200? */
       if (mc->status == 200 /* OK */)
         {
@@ -474,7 +482,7 @@
       /* ### else issue an error? status==0 means we never saw one */
       break;
 
-    case NE_ELM_response:
+    case ELEM_response:
       {
         svn_error_t *err;
 
@@ -495,7 +503,7 @@
       /* When we leave a DAV:checked-in element, the parents are DAV:prop,
          DAV:propstat, then DAV:response. If we see a DAV:href "on the way
          out", then it is going to belong to the DAV:response. */
-      mc->href_parent = NE_ELM_response;
+      mc->href_parent = ELEM_response;
       break;
 
     case ELEM_version_name:
@@ -512,7 +520,7 @@
 
     default:
       /* one of: ELEM_updated_set, ELEM_merged_set, ELEM_ignored_set,
-         NE_ELM_prop, ELEM_resourcetype, ELEM_collection, ELEM_baseline */
+         ELEM_prop, ELEM_resourcetype, ELEM_collection, ELEM_baseline */
       break;
     }
 
Index: subversion/libsvn_ra_dav/ra_dav.h
===================================================================
--- subversion/libsvn_ra_dav/ra_dav.h	(revision 6363)
+++ subversion/libsvn_ra_dav/ra_dav.h	(working copy)
@@ -41,7 +41,61 @@
 #endif /* __cplusplus */
 
 
+
+#ifdef NE_XML_VALID
+
+#define SVN_RA_DAV__XML_VALID   NE_XML_VALID
+#define SVN_RA_DAV__XML_INVALID NE_XML_INVALID
+#define SVN_RA_DAV__XML_DECLINE NE_XML_DECLINE
+#define SVN_RA_DAV__XML_CDATA   NE_XML_CDATA
+#define SVN_RA_DAV__XML_COLLECT NE_XML_COLLECT
+
+typedef struct ne_xml_elm svn_ra_dav__xml_elm_t;
+typedef ne_xml_validate_cb svn_ra_dav__xml_validate_cb;
+typedef ne_xml_startelm_cb svn_ra_dav__xml_startelm_cb;
+typedef ne_xml_endelm_cb svn_ra_dav__xml_endelm_cb;
+
+#else
+
+#define SVN_RA_DAV__NEED_SHIM 
+
+#define SVN_RA_DAV__XML_VALID   (0)
+#define SVN_RA_DAV__XML_INVALID (-1)
+#define SVN_RA_DAV__XML_DECLINE (-2)
+#define SVN_RA_DAV__XML_CDATA   (1<<1)
+#define SVN_RA_DAV__XML_COLLECT (1<<2 | SVN_RA_DAV__XML_CDATA)
+
 typedef struct {
+  const char *nspace;     /* namespace */
+  const char *name;       /* element name */
+  int id;                 /* enumerated id */
+  unsigned int flags;     /* flags for processing */
+} svn_ra_dav__xml_elm_t;
+
+typedef int svn_ra_dav__xml_validate_cb(void *userdata,
+                                        int parent,
+                                        int child);
+
+typedef int svn_ra_dav__xml_startelm_cb(void *userdata,
+                                        const svn_ra_dav__xml_elm_t *elm,
+                                        const char **atts);
+
+typedef int svn_ra_dav__xml_endelm_cb(void *userdata,
+                                      const svn_ra_dav__xml_elm_t *elm,
+                                      const char *cdata);
+
+#endif
+
+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
+                                  const svn_ra_dav__xml_elm_t *elements,
+                                  svn_ra_dav__xml_validate_cb validate_cb,
+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
+                                  svn_ra_dav__xml_endelm_cb endelm_cb,
+                                  void *userdata,
+                                  apr_pool_t *pool);
+
+
+typedef struct {
   apr_pool_t *pool;
 
   const char *url;                      /* original, unparsed session url */
@@ -65,6 +119,7 @@
   svn_boolean_t compression;            /* should we use http compression? */
 } svn_ra_ne_session_baton_t;
 
+
 /* Id used with ne_set_session_private() and ne_get_session_private()
    to retrieve the associated svn_ra_ne_session_baton_t baton. */
 #define SVN_RA_NE_SESSION_ID   "SVN"
@@ -388,6 +443,7 @@
                                                 apr_file_t *body_file);
 
 
+
 /* 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
@@ -416,19 +472,31 @@
                            apr_file_t *body_file,
                            void set_parser (ne_xml_parser *parser,
                                             void *baton),
-                           const struct ne_xml_elm *elements, 
-                           ne_xml_validate_cb validate_cb,
-                           ne_xml_startelm_cb startelm_cb, 
-                           ne_xml_endelm_cb endelm_cb,
+                           const svn_ra_dav__xml_elm_t *elements,
+                           svn_ra_dav__xml_validate_cb cdata_cb,
+                           svn_ra_dav__xml_startelm_cb startelm_cb, 
+                           svn_ra_dav__xml_endelm_cb endelm_cb,
                            void *baton,
                            apr_hash_t *extra_headers,
                            apr_pool_t *pool);
-  
 
+
 /* ### add SVN_RA_DAV_ to these to prefix conflicts with (sys) headers? */
 enum {
   /* DAV elements */
+#ifdef SVN_RA_DAV__NEED_SHIM
+  ELEM_root,
+  ELEM_href,
+  ELEM_response,
+  ELEM_status,
+  ELEM_propstat,
+  ELEM_responsedescription,
+  ELEM_multistatus,
+  ELEM_unknown,
+  ELEM_activity_coll_set,
+#else
   ELEM_activity_coll_set = NE_ELM_207_UNUSED,
+#endif
   ELEM_baseline,
   ELEM_baseline_coll,
   ELEM_checked_in,
Index: subversion/libsvn_ra_dav/log.c
===================================================================
--- subversion/libsvn_ra_dav/log.c	(revision 6363)
+++ subversion/libsvn_ra_dav/log.c	(working copy)
@@ -104,10 +104,10 @@
  * This implements the `ne_xml_validate_cb' prototype.
  */
 static int
-log_validate(void *userdata, ne_xml_elmid parent, ne_xml_elmid child)
+log_validate(void *userdata, int parent, int child)
 {
   /* ### todo */
-  return NE_XML_VALID;
+  return SVN_RA_DAV__XML_VALID;
 }
 
 
@@ -124,7 +124,7 @@
  */
 static int
 log_start_element(void *userdata,
-                  const struct ne_xml_elm *elm,
+                  const svn_ra_dav__xml_elm_t *elm,
                   const char **atts)
 {
   struct log_baton *lb = userdata;
@@ -173,7 +173,7 @@
       lb->this_path_item = NULL;
       break;
     }
-  return NE_XML_VALID;
+  return SVN_RA_DAV__XML_VALID;
 }
 
 
@@ -182,7 +182,7 @@
  */
 static int
 log_end_element(void *userdata,
-                const struct ne_xml_elm *elm,
+                const svn_ra_dav__xml_elm_t *elm,
                 const char *cdata)
 {
   struct log_baton *lb = userdata;
@@ -228,7 +228,8 @@
         if (err)
           {
             lb->err = err;         /* ### Wrap an existing error, if any? */
-            return NE_XML_INVALID; /* ### Any other way to express an err? */
+            return SVN_RA_DAV__XML_INVALID; /* ### Any other way to express
+                                                   an err? */
           }
       }
       break;
@@ -282,7 +283,7 @@
       break;
     }
 
-  return NE_XML_VALID;
+  return SVN_RA_DAV__XML_VALID;
 }
 
 
@@ -323,19 +324,25 @@
 
   static const char log_request_tail[] = "</S:log-report>" DEBUG_CR;
   
-  static const struct ne_xml_elm log_report_elements[] =
+  static const svn_ra_dav__xml_elm_t log_report_elements[] =
     {
       { SVN_XML_NAMESPACE, "log-report", ELEM_log_report, 0 },
       { SVN_XML_NAMESPACE, "log-item", ELEM_log_item, 0 },
-      { SVN_XML_NAMESPACE, "date", ELEM_log_date, NE_XML_CDATA },
-      { SVN_XML_NAMESPACE, "added-path", ELEM_added_path, NE_XML_CDATA },
-      { SVN_XML_NAMESPACE, "deleted-path", ELEM_deleted_path, NE_XML_CDATA },
-      { SVN_XML_NAMESPACE, "modified-path", ELEM_modified_path, NE_XML_CDATA },
-      { SVN_XML_NAMESPACE, "replaced-path", ELEM_replaced_path, NE_XML_CDATA },
-      { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
+      { SVN_XML_NAMESPACE, "date", ELEM_log_date, SVN_RA_DAV__XML_CDATA },
+      { SVN_XML_NAMESPACE, "added-path", ELEM_added_path,
+        SVN_RA_DAV__XML_CDATA },
+      { SVN_XML_NAMESPACE, "deleted-path", ELEM_deleted_path,
+        SVN_RA_DAV__XML_CDATA },
+      { SVN_XML_NAMESPACE, "modified-path", ELEM_modified_path,
+        SVN_RA_DAV__XML_CDATA },
+      { SVN_XML_NAMESPACE, "replaced-path", ELEM_replaced_path,
+        SVN_RA_DAV__XML_CDATA },
+      { "DAV:", "version-name", ELEM_version_name,
+        SVN_RA_DAV__XML_CDATA },
       { "DAV:", "creator-displayname", ELEM_creator_displayname,
-        NE_XML_CDATA },
-      { "DAV:", "comment", ELEM_comment, NE_XML_CDATA },
+        SVN_RA_DAV__XML_CDATA },
+      { "DAV:", "comment", ELEM_comment,
+        SVN_RA_DAV__XML_CDATA },
       { NULL }
     };
   
Index: subversion/libsvn_ra_dav/props.c
===================================================================
--- subversion/libsvn_ra_dav/props.c	(revision 6363)
+++ subversion/libsvn_ra_dav/props.c	(working copy)
@@ -73,7 +73,7 @@
 /*** Propfind Implementation ***/
 
 typedef struct {
-  ne_xml_elmid id;
+  int id;
   const char *name;
   int is_property;      /* is it a property, or part of some structure? */
 } elem_defn;
@@ -85,14 +85,14 @@
        propfind_elements[] ***/
 
   /* DAV elements */
-  { NE_ELM_multistatus, "DAV:multistatus", 0 },
-  { NE_ELM_response, "DAV:response", 0 },
-  { NE_ELM_href, "DAV:href", NE_XML_CDATA },
-  { NE_ELM_propstat, "DAV:propstat", 0 },
-  { NE_ELM_prop, "DAV:prop", 0 },
-  { NE_ELM_status, "DAV:status", NE_XML_CDATA },
-  { ELEM_baseline, "DAV:baseline", NE_XML_CDATA },
-  { ELEM_collection, "DAV:collection", NE_XML_CDATA },
+  { ELEM_multistatus, "DAV:multistatus", 0 },
+  { ELEM_response, "DAV:response", 0 },
+  { ELEM_href, "DAV:href", SVN_RA_DAV__XML_CDATA },
+  { ELEM_propstat, "DAV:propstat", 0 },
+  { ELEM_prop, "DAV:prop", 0 },
+  { ELEM_status, "DAV:status", SVN_RA_DAV__XML_CDATA },
+  { ELEM_baseline, "DAV:baseline", SVN_RA_DAV__XML_CDATA },
+  { ELEM_collection, "DAV:collection", SVN_RA_DAV__XML_CDATA },
   { ELEM_resourcetype, "DAV:resourcetype", 0 },
   { ELEM_baseline_coll, SVN_RA_DAV__PROP_BASELINE_COLLECTION, 0 },
   { ELEM_checked_in, SVN_RA_DAV__PROP_CHECKED_IN, 0 },
@@ -110,39 +110,41 @@
 };
 
 
-static const struct ne_xml_elm propfind_elements[] = 
+static const svn_ra_dav__xml_elm_t propfind_elements[] = 
 {
   /*** NOTE: Make sure that every item in here is also represented in
        elem_definitions[] ***/
 
   /* DAV elements */
-  { "DAV:", "multistatus", NE_ELM_multistatus, 0 },
-  { "DAV:", "response", NE_ELM_response, 0 },
-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
-  { "DAV:", "propstat", NE_ELM_propstat, 0 },
-  { "DAV:", "prop", NE_ELM_prop, 0 },
-  { "DAV:", "status", NE_ELM_status, NE_XML_CDATA },
-  { "DAV:", "baseline", ELEM_baseline, NE_XML_CDATA },
-  { "DAV:", "baseline-collection", ELEM_baseline_coll, NE_XML_CDATA },
+  { "DAV:", "multistatus", ELEM_multistatus, 0 },
+  { "DAV:", "response", ELEM_response, 0 },
+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "propstat", ELEM_propstat, 0 },
+  { "DAV:", "prop", ELEM_prop, 0 },
+  { "DAV:", "status", ELEM_status, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "baseline", ELEM_baseline, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "baseline-collection", ELEM_baseline_coll, SVN_RA_DAV__XML_CDATA },
   { "DAV:", "checked-in", ELEM_checked_in, 0 },
-  { "DAV:", "collection", ELEM_collection, NE_XML_CDATA },
+  { "DAV:", "collection", ELEM_collection, SVN_RA_DAV__XML_CDATA },
   { "DAV:", "resourcetype", ELEM_resourcetype, 0 },
   { "DAV:", "version-controlled-configuration", ELEM_vcc, 0 },
-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
-  { "DAV:", "getcontentlength", ELEM_get_content_length, NE_XML_CDATA },
-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "getcontentlength", ELEM_get_content_length,
+     SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
+     SVN_RA_DAV__XML_CDATA },
 
   /* SVN elements */
   { SVN_DAV_PROP_NS_DAV, "baseline-relative-path", ELEM_baseline_relpath,
-    NE_XML_CDATA },
+    SVN_RA_DAV__XML_CDATA },
   { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
-    NE_XML_CDATA },
+    SVN_RA_DAV__XML_CDATA },
   { SVN_DAV_PROP_NS_DAV, "repository-uuid", ELEM_repository_uuid,
-    NE_XML_CDATA },
+    SVN_RA_DAV__XML_CDATA },
 
   /* Unknowns */
-  { "", "", NE_ELM_unknown, NE_XML_COLLECT },
+  { "", "", ELEM_unknown, SVN_RA_DAV__XML_COLLECT },
 
   { NULL } 
 };
@@ -156,7 +158,7 @@
   const char *encoding; /* property encoding (or NULL) */
   int status; /* status for the current <propstat> (or 0 if unknown). */
   apr_hash_t *propbuffer; /* holds properties until their status is known. */
-  ne_xml_elmid last_open_id; /* the id of the last opened tag. */
+  int last_open_id; /* the id of the last opened tag. */
   ne_xml_parser *parser; /* xml parser handling the PROPSET request. */
 
   apr_pool_t *pool;
@@ -166,7 +168,7 @@
 
 /* Look up an element definition ID.  May return NULL if the elem is
    not recognized. */
-static const elem_defn *defn_from_id(ne_xml_elmid id)
+static const elem_defn *defn_from_id(int id)
 {
   const elem_defn *defn;
 
@@ -206,54 +208,55 @@
 
 
 static int validate_element(void *userdata, 
-                            ne_xml_elmid parent, 
-                            ne_xml_elmid child)
+                            int parent, 
+                            int child)
 {
   switch (parent)
     {
-    case NE_ELM_root:
-      if (child == NE_ELM_multistatus)
-        return NE_XML_VALID;
+    case ELEM_root:
+      if (child == ELEM_multistatus)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
-    case NE_ELM_multistatus:
-      if (child == NE_ELM_response)
-        return NE_XML_VALID;
+    case ELEM_multistatus:
+      if (child == ELEM_response)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE;
+        return SVN_RA_DAV__XML_DECLINE;
 
-    case NE_ELM_response:
-      if ((child == NE_ELM_href) || (child == NE_ELM_propstat))
-        return NE_XML_VALID;
+    case ELEM_response:
+      if ((child == ELEM_href) || (child == ELEM_propstat))
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE;
+        return SVN_RA_DAV__XML_DECLINE;
 
-    case NE_ELM_propstat:
-      if ((child == NE_ELM_prop) || (child == NE_ELM_status))
-        return NE_XML_VALID;
+    case ELEM_propstat:
+      if ((child == ELEM_prop) || (child == ELEM_status))
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE;
+        return SVN_RA_DAV__XML_DECLINE;
 
-    case NE_ELM_prop:
-      return NE_XML_VALID; /* handle all children of <prop> */
+    case ELEM_prop:
+      return SVN_RA_DAV__XML_VALID; /* handle all children of <prop> */
         
     case ELEM_baseline_coll:
     case ELEM_checked_in:
     case ELEM_vcc:
-      if (child == NE_ELM_href)
-        return NE_XML_VALID;
+      if (child == ELEM_href)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* not concerned with other types */
+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other types */
       
     case ELEM_resourcetype:
       if ((child == ELEM_collection) || (child == ELEM_baseline))
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* not concerned with other types (### now) */
+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other types
+                                           (### now) */
 
     default:
-      return NE_XML_DECLINE;
+      return SVN_RA_DAV__XML_DECLINE;
     }
 
   /* NOTREACHED */
@@ -261,14 +264,14 @@
 
 
 static int start_element(void *userdata, 
-                         const struct ne_xml_elm *elm, 
+                         const svn_ra_dav__xml_elm_t *elm, 
                          const char **atts)
 {
   propfind_ctx_t *pc = userdata;
 
   switch (elm->id)
     {
-    case NE_ELM_response:
+    case ELEM_response:
       if (pc->rsrc)
         return 1;
       /* Create a new resource. */
@@ -278,11 +281,11 @@
       pc->status = 0;
       break;
 
-    case NE_ELM_propstat:
+    case ELEM_propstat:
       pc->status = 0;
       break;
 
-    case NE_ELM_href:
+    case ELEM_href:
       /* Remember this <href>'s parent so that when we close this tag,
          we know to whom the URL assignment belongs.  Could be the
          resource itself, or one of the properties:
@@ -294,7 +297,7 @@
       pc->rsrc->is_collection = 1;
       break;
 
-    case NE_ELM_unknown:
+    case ELEM_unknown:
       /* these are our user-visible properties, presumably. */
       pc->encoding = ne_xml_get_attr(pc->parser, atts, SVN_DAV_PROP_NS_DAV,
                                      "encoding");
@@ -314,7 +317,7 @@
 
 
 static int end_element(void *userdata, 
-                       const struct ne_xml_elm *elm,
+                       const svn_ra_dav__xml_elm_t *elm,
                        const char *cdata)
 {
   propfind_ctx_t *pc = userdata;
@@ -327,7 +330,7 @@
 
   switch (elm->id)
     {
-    case NE_ELM_response:
+    case ELEM_response:
       /* Verify that we've received a URL for this resource. */
       if (!pc->rsrc->url)
         return 1;
@@ -337,7 +340,7 @@
       pc->rsrc = NULL;
       return 0;
 
-    case NE_ELM_propstat:
+    case ELEM_propstat:
       /* We're at the end of a set of properties.  Do the right thing
          status-wise. */
       if (pc->status)
@@ -366,7 +369,7 @@
         }
       return 0;
 
-    case NE_ELM_status:
+    case ELEM_status:
       /* Parse the <status> tag's CDATA for a status code. */
       if (ne_parse_statusline(cdata, &status))
         return 1;
@@ -374,9 +377,9 @@
       pc->status = status.code;
       return 0;
 
-    case NE_ELM_href:
+    case ELEM_href:
       /* Special handling for <href> that belongs to the <response> tag. */
-      if (rsrc->href_parent == NE_ELM_response)
+      if (rsrc->href_parent == ELEM_response)
         {
           assign_rsrc_url(pc->rsrc, cdata, pc->pool);
           return 0;
@@ -396,15 +399,15 @@
 
     default:
       /*** This case is, as usual, for everything not covered by other
-           cases.  ELM->id should be either NE_ELM_unknown, or one of
+           cases.  ELM->id should be either ELEM_unknown, or one of
            the ids in the elem_definitions[] structure.  In this case,
-           we seek to handle properties.  Since NE_ELM_unknown should
+           we seek to handle properties.  Since ELEM_unknown should
            only occur for properties, we will handle that id.  All
            other ids will be searched for in the elem_definitions[]
            structure to determine if they are properties.  Properties,
            we handle; all else hits the road.  ***/
 
-      if (elm->id == NE_ELM_unknown)
+      if (elm->id == ELEM_unknown)
         {
           name = apr_pstrcat(pc->pool, elm->nspace, elm->name, NULL);
         }
Index: subversion/libsvn_ra_dav/session.c
===================================================================
--- subversion/libsvn_ra_dav/session.c	(revision 6363)
+++ subversion/libsvn_ra_dav/session.c	(working copy)
@@ -204,6 +204,7 @@
       client_creds = creds;
       if (client_creds)
         {
+#if 0 /*MBK*/
           if (client_creds->cert_type == svn_auth_ssl_pem_cert_type)
             {
               ne_ssl_load_pem(sess, client_creds->cert_file,
@@ -213,6 +214,7 @@
             {
               ne_ssl_load_pkcs12(sess, client_creds->cert_file);
             }
+#endif
         }
     }
   apr_pool_destroy(pool);
@@ -605,6 +607,7 @@
 
   if (is_ssl_session)
     {
+#if 0 /*MBK*/
       const char *authorities_file;
       authorities_file = svn_config_get_server_setting(
             cfg, server_group,
@@ -630,6 +633,7 @@
          a password is needed for the key. */
       ne_ssl_keypw_prompt(sess, client_ssl_keypw_callback, ras);
       ne_ssl_keypw_prompt(sess2, client_ssl_keypw_callback, ras);
+#endif
     }
 
 
Index: subversion/libsvn_ra_dav/fetch.c
===================================================================
--- subversion/libsvn_ra_dav/fetch.c	(revision 6363)
+++ subversion/libsvn_ra_dav/fetch.c	(working copy)
@@ -175,7 +175,7 @@
                                    "\">" DEBUG_CR;
 static const char report_tail[] = "</S:update-report>" DEBUG_CR;
 
-static const struct ne_xml_elm report_elements[] =
+static const svn_ra_dav__xml_elm_t report_elements[] =
 {
   { SVN_XML_NAMESPACE, "update-report", ELEM_update_report, 0 },
   { SVN_XML_NAMESPACE, "resource-walk", ELEM_resource_walk, 0 },
@@ -195,25 +195,27 @@
   { SVN_XML_NAMESPACE, "fetch-file", ELEM_fetch_file, 0 },
   { SVN_XML_NAMESPACE, "prop", ELEM_prop, 0 },
   { SVN_DAV_PROP_NS_DAV, "repository-uuid",
-    ELEM_repository_uuid, NE_XML_CDATA },
+    ELEM_repository_uuid, SVN_RA_DAV__XML_CDATA },
 
-  { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum, NE_XML_CDATA },
+  { SVN_DAV_PROP_NS_DAV, "md5-checksum", ELEM_md5_checksum,
+    SVN_RA_DAV__XML_CDATA },
 
-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
-  { "DAV:", "creationdate", ELEM_creationdate, NE_XML_CDATA },
-  { "DAV:", "creator-displayname", ELEM_creator_displayname, NE_XML_CDATA },
+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creationdate", ELEM_creationdate, SVN_RA_DAV__XML_CDATA },
+  { "DAV:", "creator-displayname", ELEM_creator_displayname,
+     SVN_RA_DAV__XML_CDATA },
 
   { "DAV:", "checked-in", ELEM_checked_in, 0 },
-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
 
   { NULL }
 };
 
 /* Elements used in a dated-rev-report response */
-static const struct ne_xml_elm drev_report_elements[] =
+static const svn_ra_dav__xml_elm_t drev_report_elements[] =
 {
   { SVN_XML_NAMESPACE, "dated-rev-report", ELEM_dated_rev_report, 0 },
-  { "DAV:", "version-name", ELEM_version_name, NE_XML_CDATA },
+  { "DAV:", "version-name", ELEM_version_name, SVN_RA_DAV__XML_CDATA },
   { NULL }
 };
 
@@ -1003,21 +1005,21 @@
 */
 
 /* This implements the `ne_xml_validate_cb' prototype. */
-static int drev_validate_element(void *userdata, ne_xml_elmid parent,
-                                 ne_xml_elmid child)
+static int drev_validate_element(void *userdata, int parent,
+                                 int child)
 {
-  return NE_XML_VALID;
+  return SVN_RA_DAV__XML_VALID;
 }
 
 /* This implements the `ne_xml_startelm_cb' prototype. */
-static int drev_start_element(void *userdata, const struct ne_xml_elm *elm,
+static int drev_start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                               const char **atts)
 {
   return 0;
 }
 
 /* This implements the `ne_xml_endelm_cb' prototype. */
-static int drev_end_element(void *userdata, const struct ne_xml_elm *elm,
+static int drev_end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                             const char *cdata)
 {
   if (elm->id == ELEM_version_name)
@@ -1227,8 +1229,8 @@
 
 /* This implements the `ne_xml_validate_cb' prototype. */
 static int validate_element(void *userdata,
-                            ne_xml_elmid parent,
-                            ne_xml_elmid child)
+                            int parent,
+                            int child)
 {
   /* We're being very strict with the validity of XML elements here. If
      something exists that we don't know about, then we might not update
@@ -1238,31 +1240,31 @@
 
   switch (parent)
     {
-    case NE_ELM_root:
+    case ELEM_root:
       if (child == ELEM_update_report)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_update_report:
       if (child == ELEM_target_revision
           || child == ELEM_open_directory
           || child == ELEM_resource_walk)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_resource_walk:
       if (child == ELEM_resource)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_resource:
       if (child == ELEM_checked_in)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_open_directory:
       if (child == ELEM_open_directory
@@ -1274,18 +1276,18 @@
           || child == ELEM_delete_entry
           || child == ELEM_prop
           || child == ELEM_checked_in)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_add_directory:
       if (child == ELEM_add_directory
           || child == ELEM_add_file
           || child == ELEM_prop
           || child == ELEM_checked_in)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_open_file:
       if (child == ELEM_checked_in
@@ -1293,22 +1295,22 @@
           || child == ELEM_prop
           || child == ELEM_fetch_props
           || child == ELEM_remove_prop)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_add_file:
       if (child == ELEM_checked_in
           || child == ELEM_prop)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_checked_in:
-      if (child == NE_ELM_href)
-        return NE_XML_VALID;
+      if (child == ELEM_href)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_prop:
       /*      if (child == ELEM_version_name
@@ -1317,17 +1319,17 @@
               || child == ELEM_md5_checksum
               || child == ELEM_repository_uuid
               || child == ELEM_remove_prop)
-              return NE_XML_VALID;
+              return SVN_RA_DAV__XML_VALID;
               else
-              return NE_XML_DECLINE;
+              return SVN_RA_DAV__XML_DECLINE;
       */
       /* ### TODO:  someday uncomment the block above, and make the
-         else clause return NE_XML_IGNORE.  But first, neon needs to
+         else clause return SVN_RA_DAV__XML_IGNORE.  But first, neon needs to
          define that value.  :-) */
-      return NE_XML_VALID;
+      return SVN_RA_DAV__XML_VALID;
 
     default:
-      return NE_XML_DECLINE;
+      return SVN_RA_DAV__XML_DECLINE;
     }
 
   /* NOTREACHED */
@@ -1355,7 +1357,7 @@
 }
 
 /* This implements the `ne_xml_startelm_cb' prototype. */
-static int start_element(void *userdata, const struct ne_xml_elm *elm,
+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                          const char **atts)
 {
   report_baton_t *rb = userdata;
@@ -1731,7 +1733,7 @@
 
 /* This implements the `ne_xml_endelm_cb' prototype. */
 static int end_element(void *userdata, 
-                       const struct ne_xml_elm *elm,
+                       const svn_ra_dav__xml_elm_t *elm,
                        const char *cdata)
 {
   report_baton_t *rb = userdata;
@@ -1813,7 +1815,7 @@
       rb->file_pool = NULL;
       break;
 
-    case NE_ELM_href:
+    case ELEM_href:
       /* do nothing if we aren't fetching content. */
       if (!rb->fetch_content)
         break;
Index: subversion/libsvn_ra_dav/options.c
===================================================================
--- subversion/libsvn_ra_dav/options.c	(revision 6363)
+++ subversion/libsvn_ra_dav/options.c	(working copy)
@@ -29,10 +29,10 @@
 #include "ra_dav.h"
 
 
-static const struct ne_xml_elm options_elements[] =
+static const svn_ra_dav__xml_elm_t options_elements[] =
 {
   { "DAV:", "activity-collection-set", ELEM_activity_coll_set, 0 },
-  { "DAV:", "href", NE_ELM_href, NE_XML_CDATA },
+  { "DAV:", "href", ELEM_href, SVN_RA_DAV__XML_CDATA },
   { "DAV:", "options-response", ELEM_options_response, 0 },
 
   { NULL }
@@ -46,49 +46,48 @@
 
 
 
-static int validate_element(void *userdata, ne_xml_elmid parent,
-                            ne_xml_elmid child)
+static int validate_element(void *userdata, int parent, int child)
 {
   switch (parent)
     {
-    case NE_ELM_root:
+    case ELEM_root:
       if (child == ELEM_options_response)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_options_response:
       if (child == ELEM_activity_coll_set)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* not concerned with other response */
+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with other response */
 
     case ELEM_activity_coll_set:
-      if (child == NE_ELM_href)
-        return NE_XML_VALID;
+      if (child == ELEM_href)
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE; /* not concerned with unknown crud */
+        return SVN_RA_DAV__XML_DECLINE; /* not concerned with unknown crud */
 
     default:
-      return NE_XML_DECLINE;
+      return SVN_RA_DAV__XML_DECLINE;
     }
 
   /* NOTREACHED */
 }
 
-static int start_element(void *userdata, const struct ne_xml_elm *elm,
+static int start_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                          const char **atts)
 {
   /* nothing to do here */
   return 0;
 }
 
-static int end_element(void *userdata, const struct ne_xml_elm *elm,
+static int end_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                        const char *cdata)
 {
   options_ctx_t *oc = userdata;
 
-  if (elm->id == NE_ELM_href)
+  if (elm->id == ELEM_href)
     {
       oc->activity_coll = svn_string_create(cdata, oc->pool);
     }
Index: subversion/libsvn_ra_dav/util.c
===================================================================
--- subversion/libsvn_ra_dav/util.c	(revision 6363)
+++ subversion/libsvn_ra_dav/util.c	(working copy)
@@ -1,5 +1,4 @@
 /*
- * util.c :  utility functions for the RA/DAV library
  *
  * ====================================================================
  * Copyright (c) 2000-2003 CollabNet.  All rights reserved.
@@ -16,6 +15,8 @@
  * ====================================================================
  */
 
+#include <apr_pools.h>
+
 #define APR_WANT_STRFUNC
 #include <apr_want.h>
 
@@ -33,6 +34,109 @@
 
 
 
+#ifdef SVN_RA_DAV__NEED_SHIM
+
+typedef struct {
+  apr_pool_t *pool;
+  void *userdata;
+  const svn_ra_dav__xml_elm_t *elements;
+  svn_ra_dav__xml_validate_cb *validate_cb;
+  svn_ra_dav__xml_startelm_cb *startelm_cb;
+  svn_ra_dav__xml_endelm_cb *endelm_cb;
+  svn_stringbuf_t *accum;
+  int state;
+} shim_baton_t;
+
+static const svn_ra_dav__xml_elm_t *lookup_elem(
+                                          const svn_ra_dav__xml_elm_t *table,
+                                          const char *nspace,
+                                          const char *name)
+{
+  while(table->nspace)
+    {
+      if (strcmp(table->nspace, nspace) == 0
+          && strcmp(table->name, name) == 0)
+        return table;
+      table++;
+    }
+  return NULL;
+}
+
+static int shim_startelm(void *userdata, int parent, const char *nspace,
+                         const char *name, const char **attrs)
+{
+  const svn_ra_dav__xml_elm_t *elem;
+  shim_baton_t *baton = userdata;
+  int rc;
+
+  elem = lookup_elem(baton->elements, nspace, name);
+  if (!elem)
+    return SVN_RA_DAV__XML_INVALID;
+
+  rc = baton->validate_cb(baton->userdata, parent, elem->id);
+  if (rc < 0)
+    return rc;
+
+  return baton->startelm_cb(baton->userdata, elem, attrs);
+}
+
+static int shim_cdata(void *userdata, int state, const char *cdata, size_t len)
+{
+  const svn_ra_dav__xml_elm_t *elem;
+  shim_baton_t *baton = userdata;
+  svn_stringbuf_appendbytes(baton->accum, cdata, len);
+}
+
+static int shim_endelm(void *userdata, int parent, const char *nspace,
+                       const char *name)
+{
+  const svn_ra_dav__xml_elm_t *elem;
+  shim_baton_t *baton = userdata;
+
+  elem = lookup_elem(baton->elements, nspace, name);
+  if (!elem)
+    return SVN_RA_DAV__XML_INVALID;
+
+  return baton->endelm_cb(baton->userdata,
+                          elem,
+                          baton->accum->data);
+}
+
+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
+                                  const svn_ra_dav__xml_elm_t *elements,
+                                  svn_ra_dav__xml_validate_cb validate_cb,
+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
+                                  svn_ra_dav__xml_endelm_cb endelm_cb, 
+                                  void *userdata,
+                                  apr_pool_t *pool)
+{
+  shim_baton_t *baton = apr_pcalloc(pool, sizeof(shim_baton_t));
+  baton->pool = pool;
+  baton->userdata = userdata;
+  baton->elements = elements;
+  baton->validate_cb = validate_cb;
+  baton->startelm_cb = startelm_cb;
+  baton->endelm_cb = endelm_cb;
+
+  ne_xml_push_handler(p, shim_startelm, shim_cdata, shim_endelm, baton);
+}
+
+#else
+
+void svn_ra_dav__xml_push_handler(ne_xml_parser *p,
+                                  const svn_ra_dav__xml_elm_t *elements,
+                                  svn_ra_dav__xml_validate_cb validate_cb,
+                                  svn_ra_dav__xml_startelm_cb startelm_cb,
+                                  svn_ra_dav__xml_endelm_cb endelm_cb, 
+                                  void *userdata,
+                                  apr_pool_t *pool)
+{
+  ne_xml_push_handler(p, elements, validate_cb, startelm_cb, endelm_cb,
+                      userdata);
+}
+
+#endif
+
 void svn_ra_dav__copy_href(svn_stringbuf_t *dst, const char *src)
 {
   ne_uri parsed_url;
@@ -98,12 +202,12 @@
 }
 
 
-static const struct ne_xml_elm error_elements[] =
+static const svn_ra_dav__xml_elm_t error_elements[] =
 {
   { "DAV:", "error", ELEM_error, 0 },
   { "svn:", "error", ELEM_svn_error, 0 },
   { "http://apache.org/dav/xmlns", "human-readable", 
-    ELEM_human_readable, NE_XML_CDATA },
+    ELEM_human_readable, SVN_RA_DAV__XML_CDATA },
 
   /* ### our validator doesn't yet recognize the rich, specific
          <D:some-condition-failed/> objects as defined by DeltaV.*/
@@ -113,33 +217,34 @@
 
 
 static int validate_error_elements(void *userdata,
-                                   ne_xml_elmid parent,
-                                   ne_xml_elmid child)
+                                   int parent,
+                                   int child)
 {
   switch (parent)
     {
-    case NE_ELM_root:
+    case ELEM_root:
       if (child == ELEM_error)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_INVALID;
+        return SVN_RA_DAV__XML_INVALID;
 
     case ELEM_error:
       if (child == ELEM_svn_error
           || child == ELEM_human_readable)
-        return NE_XML_VALID;
+        return SVN_RA_DAV__XML_VALID;
       else
-        return NE_XML_DECLINE;  /* ignore if something else was in there */
+        return SVN_RA_DAV__XML_DECLINE;  /* ignore if something else was
+                                            in there */
 
     default:
-      return NE_XML_DECLINE;
+      return SVN_RA_DAV__XML_DECLINE;
     }
 
   /* NOTREACHED */
 }
 
 
-static int start_err_element(void *userdata, const struct ne_xml_elm *elm,
+static int start_err_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                              const char **atts)
 {
   svn_error_t **err = userdata;
@@ -176,7 +281,7 @@
   return 0;
 }
 
-static int end_err_element(void *userdata, const struct ne_xml_elm *elm,
+static int end_err_element(void *userdata, const svn_ra_dav__xml_elm_t *elm,
                            const char *cdata)
 {
   svn_error_t **err = userdata;
@@ -256,10 +361,10 @@
                            apr_file_t *body_file,
                            void set_parser (ne_xml_parser *parser,
                                             void *baton),
-                           const struct ne_xml_elm *elements, 
-                           ne_xml_validate_cb validate_cb,
-                           ne_xml_startelm_cb startelm_cb, 
-                           ne_xml_endelm_cb endelm_cb,
+                           const svn_ra_dav__xml_elm_t *elements, 
+                           svn_ra_dav__xml_validate_cb validate_cb,
+                           svn_ra_dav__xml_startelm_cb startelm_cb, 
+                           svn_ra_dav__xml_endelm_cb endelm_cb,
                            void *baton,
                            apr_hash_t *extra_headers,
                            apr_pool_t *pool)
@@ -305,8 +410,9 @@
 
   /* create a parser to read the normal response body */
   success_parser = ne_xml_create();
-  ne_xml_push_handler(success_parser, elements,
-                      validate_cb, startelm_cb, endelm_cb, baton);
+  svn_ra_dav__xml_push_handler(success_parser, elements,
+                               validate_cb, startelm_cb, endelm_cb, baton,
+                               pool);
 
   /* if our caller is interested in having access to this parser, call
      the SET_PARSER callback with BATON. */
@@ -315,8 +421,9 @@
 
   /* create a parser to read the <D:error> response body */
   error_parser = ne_xml_create();
-  ne_xml_push_handler(error_parser, error_elements, validate_error_elements,
-                      start_err_element, end_err_element, &err); 
+  svn_ra_dav__xml_push_handler(error_parser, error_elements,
+                               validate_error_elements, start_err_element,
+                               end_err_element, &err, pool); 
 
   /* Register the "main" accepter and body-reader with the request --
      the one to use when the HTTP status is 2XX */
@@ -445,8 +552,9 @@
 
   /* attach a standard <D:error> body parser to the request */
   error_parser = ne_xml_create();
-  ne_xml_push_handler(error_parser, error_elements, validate_error_elements,
-                      start_err_element, end_err_element, &err);
+  svn_ra_dav__xml_push_handler(error_parser, error_elements,
+                               validate_error_elements, start_err_element,
+                               end_err_element, &err, pool);
   ne_add_response_body_reader(request, ra_dav_error_accepter,
                               ne_xml_parse_v, error_parser);
 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by "Sergey A. Lipnevich" <se...@optimaltec.com>.
mark benedetto king wrote:

>On Wed, Jun 25, 2003 at 01:43:45AM -0400, Sergey wrote:
>  
>
>>Current table-driven approach may actually be a better one, at least in 
>>ra_dav's case. Maybe it's going to be a better decision then to recreate 
>>"old" Neon interface on top of the "new" one? What I mean is the 
>>(validate_cb, startelm_cb, endelm_cb)->service functions->(startelm_cb, 
>>cdata_cb, endelm_cb) transformation done as part of either Subversion's 
>>or Neon's code. Does this make any sense? Thank you!
>>
>>    
>>
>
>Yes.  I have started work on this by building a shim layer around
>the new interface so that the current table-driven approach can be
>used by ra_dav for the time being.  See below for more details.
>
>If you'd like to take over the work on this, I can send you my diffs;
>I do have other issues that I should probably be working on instead.
>
Since this is a "beta" issue now, I assume I have some time to slide 
into Subversion code. I expect to have some time during this weekend to 
get started. Actually, I did get started and have done something before 
I realized that it's better to implement the "shim layer" as you put it.

>
>I apologize if the following is a duplicate message; I am resending it because
>it does not appear to have made it to the list:
>
I only got it once.

>
>On Wed, Jun 25, 2003 at 12:27:39AM -0400, Sergey A. Lipnevich wrote:
>  
>
>>So, the idea is that there are callbacks now accepting ne_xml_elm, and 
>>they need to be redone for two-parameter-style calling, right? That 
>>seems to make it simpler, actually. Thanks!
>>
>>    
>>
>
>It's much worse than that.  The entire contract has changed.  Neon
>is not taking any ownership of validation, cdata accumulation,  etc.
>Essentially, Neon has exposed the SAX parser.  Unfortunately, 
>libsvn_ra_dav is built pretty tightly around the old interface.
>
>What I've done is pull all the constants that we need and Neon used to
>define, but no longer does, into the SVN_RA_DAV_XML__ namespace, changed
>all the usage of the old constants to the new ones, and am writing
>svn_ra_dav__xml_push_handler, which will act as a shim around the new
>interface.
>
Could you please send this to me? These constants are one of the things 
I bumped into. I was hoping they've just changed name, not simply 
disappeared. Now I know ;-).

>This will make it easy to support neon-0.23.x as well as neon-0.24.x;
>I can conditionally make the new constants macros for the old ones, and
>have one pass-through implementation of svn_ra_dav__xml_push_handler.
>
Even better.

>When support for 0.23.x is phased out, we can start to refactor the
>code around the new interface.
>
There's for instance only other package in out distro that needs Neon, 
it's davfs driver which I use to mount DAV resources in Linux (GNOME-VFS 
refuses to support DAV over https), and that's about it. I think 
generally there's not much dependency on Neon right now in other 
projects, so Subversion can just mandate which version to use.

Thank you!

Sergey.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by "Sergey A. Lipnevich" <se...@optimaltec.com>.
mark benedetto king wrote:

>On Wed, Jun 25, 2003 at 01:43:45AM -0400, Sergey wrote:
>  
>
>>Current table-driven approach may actually be a better one, at least in 
>>ra_dav's case. Maybe it's going to be a better decision then to recreate 
>>"old" Neon interface on top of the "new" one? What I mean is the 
>>(validate_cb, startelm_cb, endelm_cb)->service functions->(startelm_cb, 
>>cdata_cb, endelm_cb) transformation done as part of either Subversion's 
>>or Neon's code. Does this make any sense? Thank you!
>>
>>    
>>
>
>Yes.  I have started work on this by building a shim layer around
>the new interface so that the current table-driven approach can be
>used by ra_dav for the time being.  See below for more details.
>
>If you'd like to take over the work on this, I can send you my diffs;
>I do have other issues that I should probably be working on instead.
>
Since this is a "beta" issue now, I assume I have some time to slide 
into Subversion code. I expect to have some time during this weekend to 
get started. Actually, I did get started and have done something before 
I realized that it's better to implement the "shim layer" as you put it.

>
>I apologize if the following is a duplicate message; I am resending it because
>it does not appear to have made it to the list:
>
I only got it once.

>
>On Wed, Jun 25, 2003 at 12:27:39AM -0400, Sergey A. Lipnevich wrote:
>  
>
>>So, the idea is that there are callbacks now accepting ne_xml_elm, and 
>>they need to be redone for two-parameter-style calling, right? That 
>>seems to make it simpler, actually. Thanks!
>>
>>    
>>
>
>It's much worse than that.  The entire contract has changed.  Neon
>is not taking any ownership of validation, cdata accumulation,  etc.
>Essentially, Neon has exposed the SAX parser.  Unfortunately, 
>libsvn_ra_dav is built pretty tightly around the old interface.
>
>What I've done is pull all the constants that we need and Neon used to
>define, but no longer does, into the SVN_RA_DAV_XML__ namespace, changed
>all the usage of the old constants to the new ones, and am writing
>svn_ra_dav__xml_push_handler, which will act as a shim around the new
>interface.
>
Could you please send this to me? These constants are one of the things 
I bumped into. I was hoping they've just changed name, not simply 
disappeared. Now I know ;-).

>This will make it easy to support neon-0.23.x as well as neon-0.24.x;
>I can conditionally make the new constants macros for the old ones, and
>have one pass-through implementation of svn_ra_dav__xml_push_handler.
>
Even better.

>When support for 0.23.x is phased out, we can start to refactor the
>code around the new interface.
>
There's for instance only other package in out distro that needs Neon, 
it's davfs driver which I use to mount DAV resources in Linux (GNOME-VFS 
refuses to support DAV over https), and that's about it. I think 
generally there's not much dependency on Neon right now in other 
projects, so Subversion can just mandate which version to use.

Thank you!

Sergey.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by mark benedetto king <mb...@lowlatency.com>.
On Wed, Jun 25, 2003 at 01:43:45AM -0400, Sergey wrote:
> Current table-driven approach may actually be a better one, at least in 
> ra_dav's case. Maybe it's going to be a better decision then to recreate 
> "old" Neon interface on top of the "new" one? What I mean is the 
> (validate_cb, startelm_cb, endelm_cb)->service functions->(startelm_cb, 
> cdata_cb, endelm_cb) transformation done as part of either Subversion's 
> or Neon's code. Does this make any sense? Thank you!
> 

Yes.  I have started work on this by building a shim layer around
the new interface so that the current table-driven approach can be
used by ra_dav for the time being.  See below for more details.

If you'd like to take over the work on this, I can send you my diffs;
I do have other issues that I should probably be working on instead.

I apologize if the following is a duplicate message; I am resending it because
it does not appear to have made it to the list:

On Wed, Jun 25, 2003 at 12:27:39AM -0400, Sergey A. Lipnevich wrote:
> So, the idea is that there are callbacks now accepting ne_xml_elm, and 
> they need to be redone for two-parameter-style calling, right? That 
> seems to make it simpler, actually. Thanks!
> 

It's much worse than that.  The entire contract has changed.  Neon
is not taking any ownership of validation, cdata accumulation,  etc.
Essentially, Neon has exposed the SAX parser.  Unfortunately, 
libsvn_ra_dav is built pretty tightly around the old interface.

What I've done is pull all the constants that we need and Neon used to
define, but no longer does, into the SVN_RA_DAV_XML__ namespace, changed
all the usage of the old constants to the new ones, and am writing
svn_ra_dav__xml_push_handler, which will act as a shim around the new
interface.

This will make it easy to support neon-0.23.x as well as neon-0.24.x;
I can conditionally make the new constants macros for the old ones, and
have one pass-through implementation of svn_ra_dav__xml_push_handler.

When support for 0.23.x is phased out, we can start to refactor the
code around the new interface.

--ben


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by Sergey <se...@optimaltec.com>.
Current table-driven approach may actually be a better one, at least in 
ra_dav's case. Maybe it's going to be a better decision then to recreate 
"old" Neon interface on top of the "new" one? What I mean is the 
(validate_cb, startelm_cb, endelm_cb)->service functions->(startelm_cb, 
cdata_cb, endelm_cb) transformation done as part of either Subversion's 
or Neon's code. Does this make any sense? Thank you!

Sergey.

Scott Lamb wrote:
> On Tuesday, Jun 24, 2003, at 17:48 US/Central, Sergey A. Lipnevich wrote:
> 
>> Greg Stein wrote:
>>
>>> On Mon, Jun 23, 2003 at 07:52:26PM -0400, Sergey A. Lipnevich wrote:
>>>
>>>> ...
>>>> Also, I saw that Neon 0.24.0 is out, and tried compiling it with 
>>>> Subversion. This fails because there's no more type ne_xml_elm in Neon.
>>>
>>> Please go ahead and file an issue. As far as where to start: just start
>>> looking for compilation errors :-)
>>
>> That's easy because we're a source-based distro, they come out right 
>> away when I try to install Subversion ;-). If you have time, could you 
>> please describe a general idea of how to migrate from ne_xml_elm to 
>> "callbacks" that are now used in ne_xml.h? Here's what's in now:
> 
> 
>  From that log message, it sounds like the callbacks are not new; they 
> just take new argument types. A callback is just a function pointer that 
> the library user provides to the library for pluggable behavior. I'm not 
> familiar with Neon, but it sounds like all that needs to be done is 
> switch a few function prototypes and variable references to remove a 
> "mystruct->" or similar.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by Scott Lamb <sl...@slamb.org>.
On Tuesday, Jun 24, 2003, at 17:48 US/Central, Sergey A. Lipnevich 
wrote:

> Greg Stein wrote:
>> On Mon, Jun 23, 2003 at 07:52:26PM -0400, Sergey A. Lipnevich wrote:
>>> ...
>>> Also, I saw that Neon 0.24.0 is out, and tried compiling it with 
>>> Subversion. This fails because there's no more type ne_xml_elm in 
>>> Neon.
>> Please go ahead and file an issue. As far as where to start: just 
>> start
>> looking for compilation errors :-)
> That's easy because we're a source-based distro, they come out right 
> away when I try to install Subversion ;-). If you have time, could you 
> please describe a general idea of how to migrate from ne_xml_elm to 
> "callbacks" that are now used in ne_xml.h? Here's what's in now:

 From that log message, it sounds like the callbacks are not new; they 
just take new argument types. A callback is just a function pointer 
that the library user provides to the library for pluggable behavior. 
I'm not familiar with Neon, but it sounds like all that needs to be 
done is switch a few function prototypes and variable references to 
remove a "mystruct->" or similar.


> * remove 'struct ne_xml_elm'; callbacks are passed {nspace, name}
> strings along with a state integer.
>

Good luck.

Scott


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: new Neon 0.24

Posted by "Sergey A. Lipnevich" <se...@pisem.net>.
Greg Stein wrote:
> On Mon, Jun 23, 2003 at 07:52:26PM -0400, Sergey A. Lipnevich wrote:
> 
>>...
>>Also, I saw that Neon 0.24.0 is out, and tried compiling it with 
>>Subversion. This fails because there's no more type ne_xml_elm in Neon. 
> Please go ahead and file an issue. As far as where to start: just start
> looking for compilation errors :-)
That's easy because we're a source-based distro, they come out right away when I try to install Subversion ;-). If you have 
time, could you please describe a general idea of how to migrate from ne_xml_elm to "callbacks" that are now used in ne_xml.h? 
Here's what's in now:
	http://cvs.webdav.org/viewcvs/neon/src/ne_xml.h.diff?r1=1.42&r2=1.43
and the log message (that is not helpful to an outsider like myself):
---
Redesign of the XML interface.  Major changes:
* don't require up-front registration of list of elements to handle
* have the start-element callback either accept, decline, abort,
or return a state integer.
* remove 'struct ne_xml_elm'; callbacks are passed {nspace, name}
strings along with a state integer.
* dropped "collect", "strip-leading-whitespace" modes
* push responsibility for accumulating cdata onto caller; drop 'cdata'
argument from end-element callback.
* don't abort if no handler accepts a particular element, just ignore
that branch of the tree.
---
AFAICT, it either starts using SAX where it didn't, or starts using SAX in a different way, is that correct? The issue is 1371, 
I apologize if I didn't do it right, I hope the gist of the issue is there.
Thank you!

Sergey.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org