1333347Speter/*
2333347Speter * svn_wrapped_sasl.h :  wrapped SASL API
3333347Speter *
4333347Speter * ====================================================================
5333347Speter *    Licensed to the Apache Software Foundation (ASF) under one
6333347Speter *    or more contributor license agreements.  See the NOTICE file
7333347Speter *    distributed with this work for additional information
8333347Speter *    regarding copyright ownership.  The ASF licenses this file
9333347Speter *    to you under the Apache License, Version 2.0 (the
10333347Speter *    "License"); you may not use this file except in compliance
11333347Speter *    with the License.  You may obtain a copy of the License at
12333347Speter *
13333347Speter *      http://www.apache.org/licenses/LICENSE-2.0
14333347Speter *
15333347Speter *    Unless required by applicable law or agreed to in writing,
16333347Speter *    software distributed under the License is distributed on an
17333347Speter *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18333347Speter *    KIND, either express or implied.  See the License for the
19333347Speter *    specific language governing permissions and limitations
20333347Speter *    under the License.
21333347Speter * ====================================================================
22333347Speter */
23333347Speter
24333347Speter#ifndef RA_SVN_WRAPPED_SASL_H
25333347Speter#define RA_SVN_WRAPPED_SASL_H
26333347Speter
27333347Speter#include <stddef.h>
28333347Speter
29333347Speter#ifdef WIN32
30333347Speter#  define APR_WANT_IOVEC
31333347Speter#  include <apr_want.h>
32333347Speter  /* This prevents sasl.h from redefining iovec,
33333347Speter     which is always defined by APR on win32. */
34333347Speter#  define STRUCT_IOVEC_DEFINED
35333347Speter#  include <sasl.h>
36333347Speter#else
37333347Speter#  include <sasl/sasl.h>
38333347Speter#endif
39333347Speter
40333347Speter/* Apple deprecated the SASL API on Mac OS X 10.11, causing a
41333347Speter   moderately huge number of deprecation warnings to be emitted during
42333347Speter   compilation. Consequently, we wrap the parts of the SASL API that
43333347Speter   we use in a set of private functions and disable the deprecation
44333347Speter   warnings for this header and the implementation file. */
45333347Speter#ifdef __APPLE__
46333347Speter#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
47333347Speter#    pragma GCC diagnostic push
48333347Speter#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
49333347Speter#  endif
50333347Speter#endif /* __APPLE__ */
51333347Speter
52333347Speter#ifdef __cplusplus
53333347Speterextern "C" {
54333347Speter#endif /* __cplusplus */
55333347Speter
56333347Spetervoid
57333347Spetersvn_sasl__set_mutex(sasl_mutex_alloc_t *, sasl_mutex_lock_t *,
58333347Speter                    sasl_mutex_unlock_t *, sasl_mutex_free_t *);
59333347Speter
60333347Spetervoid
61333347Spetersvn_sasl__done(void);
62333347Speter
63333347Spetervoid
64333347Spetersvn_sasl__dispose(sasl_conn_t **);
65333347Speter
66333347Speterconst char *
67333347Spetersvn_sasl__errstring(int, const char *, const char **);
68333347Speter
69333347Speterconst char *
70333347Spetersvn_sasl__errdetail(sasl_conn_t *);
71333347Speter
72333347Speterint
73333347Spetersvn_sasl__getprop(sasl_conn_t *, int, const void **);
74333347Speter
75333347Speterint
76333347Spetersvn_sasl__setprop(sasl_conn_t *, int, const void *);
77333347Speter
78333347Speterint
79333347Spetersvn_sasl__client_init(const sasl_callback_t *);
80333347Speter
81333347Speterint
82333347Spetersvn_sasl__client_new(const char *, const char *, const char *, const char *,
83333347Speter                     const sasl_callback_t *, unsigned, sasl_conn_t **);
84333347Speter
85333347Speterint
86333347Spetersvn_sasl__client_start(sasl_conn_t *, const char *, sasl_interact_t **,
87333347Speter                       const char **, unsigned *, const char **);
88333347Speter
89333347Speterint
90333347Spetersvn_sasl__client_step(sasl_conn_t *, const char *, unsigned,
91333347Speter                      sasl_interact_t **, const char **, unsigned *);
92333347Speter
93333347Speterint
94333347Spetersvn_sasl__server_init(const sasl_callback_t *, const char *);
95333347Speter
96333347Speterint
97333347Spetersvn_sasl__server_new(const char *, const char *, const char *,
98333347Speter                     const char *, const char *, const sasl_callback_t *,
99333347Speter                     unsigned, sasl_conn_t **);
100333347Speter
101333347Speterint
102333347Spetersvn_sasl__listmech(sasl_conn_t *, const char *, const char *, const char *,
103333347Speter                   const char *, const char **, unsigned *, int *);
104333347Speter
105333347Speterint
106333347Spetersvn_sasl__server_start(sasl_conn_t *, const char *, const char *, unsigned,
107333347Speter                       const char **, unsigned *);
108333347Speter
109333347Speterint
110333347Spetersvn_sasl__server_step(sasl_conn_t *, const char *, unsigned,
111333347Speter                      const char **, unsigned *);
112333347Speter
113333347Speterint
114333347Spetersvn_sasl__encode(sasl_conn_t *, const char *, unsigned,
115333347Speter                 const char **, unsigned *);
116333347Speter
117333347Speterint
118333347Spetersvn_sasl__decode(sasl_conn_t *, const char *, unsigned,
119333347Speter                 const char **, unsigned *);
120333347Speter
121333347Speter#ifdef __cplusplus
122333347Speter}
123333347Speter#endif /* __cplusplus */
124333347Speter
125333347Speter#ifdef __APPLE__
126333347Speter#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
127333347Speter#    pragma GCC diagnostic pop
128333347Speter#  endif
129333347Speter#endif /* __APPLE__ */
130333347Speter
131333347Speter#endif /* RA_SVN_WRAPPED_SASL_H */
132