//
// Softec
//
// Contact: Support@softec.st
//
// Designed by Denis Gervalle and Olivier Desaive
// Written by Denis Gervalle
//
// Copyright 2004 by SOFTEC. All rights reserved.
//
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Diagnostics;
namespace Softec.AprSharp
{
///Embeds all APR external calls
///Take care to call apr_initialize
public class Apr
{
// no instance constructor !
private Apr() { }
static Apr()
{
int apr_status;
Debug.Write("apr_initialize...");
apr_status = apr_initialize();
Debug.WriteLine("Done");
if( apr_status != 0 )
throw new AprException(apr_status);
//FIXME: Shoud shedule a call to apr_terminate
// at process exit
}
#region Initialize / Terminate
[DllImport("apr-0")]
private static extern int apr_initialize( );
[DllImport("apr-0")]
private static extern void apr_terminate( );
#endregion
#region Error
[DllImport("apr-0"), CLSCompliant(false)]
private static extern void apr_strerror(int apr_status,
StringBuilder buf,
uint size);
public static string StrError(int apr_status)
{
StringBuilder buf = new StringBuilder (1024);
Apr.apr_strerror(apr_status, buf, (uint)buf.Capacity);
return(buf.ToString());
}
#endregion
#region Allocator
[DllImport("apr-0")] static extern
internal int apr_allocator_create(out IntPtr allocator);
[DllImport("apr-0")] static extern
internal void apr_allocator_destroy(IntPtr allocator);
[DllImport("apr-0")] static extern
internal IntPtr apr_allocator_alloc(IntPtr allocator,
uint size);
[DllImport("apr-0")] static extern
internal void apr_allocator_free(IntPtr allocator,
IntPtr memnode);
[DllImport("apr-0")] static extern
internal void apr_allocator_owner_set(IntPtr allocator,
IntPtr pool);
[DllImport("apr-0")] static extern
internal IntPtr apr_allocator_owner_get(IntPtr allocator);
[DllImport("apr-0"), CLSCompliant(false)] static extern
internal void apr_allocator_max_free_set(IntPtr allocator,
uint size);
[DllImport("apr-0")] static extern
internal void apr_allocator_mutex_set(IntPtr allocator,
IntPtr mutex);
[DllImport("apr-0")] static extern
internal IntPtr apr_allocator_mutex_get(IntPtr allocator);
#endregion
#region ThreadMutex
[DllImport("apr-0")] static extern
internal int apr_thread_mutex_create(out IntPtr mutext,
uint flags,
IntPtr pool);
[DllImport("apr-0")] static extern
internal int apr_thread_mutex_lock(IntPtr mutex);
[DllImport("apr-0")] static extern
internal int apr_thread_mutex_trylock(IntPtr mutex);
[DllImport("apr-0")] static extern
internal int apr_thread_mutex_unlock(IntPtr mutex);
[DllImport("apr-0")] static extern
internal int apr_thread_mutex_destroy(IntPtr mutex);
[DllImport("apr-0")] static extern
internal IntPtr apr_thread_mutex_pool_get(IntPtr mutex);
#endregion
#region Pool
[DllImport("apr-0")] static extern
internal int apr_pool_create_ex(out IntPtr newpool, IntPtr parent,
IntPtr abort_fn, IntPtr allocator);
[DllImport("apr-0")] static extern
internal void apr_pool_destroy(IntPtr p);
[DllImport("apr-0")] static extern
internal IntPtr apr_pool_allocator_get(IntPtr pool);
[DllImport("apr-0")] static extern
internal void apr_pool_clear(IntPtr pool);
[DllImport("apr-0")] static extern
internal IntPtr apr_palloc(IntPtr pool, uint size);
[DllImport("apr-0")] static extern
internal IntPtr apr_pcalloc(IntPtr pool, uint size);
[DllImport("apr-0")] static extern
internal IntPtr apr_pool_parent_get(IntPtr pool);
[DllImport("apr-0")] static extern
internal int apr_pool_is_ancestor(IntPtr a, IntPtr b);
/*
[DllImport("apr-0")] static extern
internal void apr_pool_tag(IntPtr pool, IntPtr tag);
internal delegate int AprPoolCleanUpDelegate(IntPtr data);
[DllImport("apr-0")] static extern
internal int apr_pool_userdata_set(IntPtr data,
IntPtr key,
AprPoolCleanUpDelegate cleanup,
IntPtr pool);
[DllImport("apr-0")] static extern
internal int apr_pool_userdata_setn(IntPtr data,
IntPtr key,
AprPoolCleanUpDelegate cleanup,
IntPtr pool);
[DllImport("apr-0")] static extern
internal int apr_pool_userdata_get(out IntPtr data,
IntPtr key,
IntPtr pool);
[DllImport("apr-0")] static extern
internal void apr_pool_cleanup_register(IntPtr pool,
IntPtr data,
AprPoolCleanUpDelegate plaincleanup,
AprPoolCleanUpDelegate childcleanup);
[DllImport("apr-0")] static extern
internal void apr_pool_cleanup_kill(IntPtr pool,
IntPtr data,
AprPoolCleanUpDelegate cleanup);
[DllImport("apr-0")] static extern
internal void apr_pool_child_cleanup_set(IntPtr pool,
IntPtr data,
AprPoolCleanUpDelegate plaincleanup,
AprPoolCleanUpDelegate childcleanup);
[DllImport("apr-0")] static extern
internal int apr_pool_cleanup_run(IntPtr pool,
IntPtr data,
AprPoolCleanUpDelegate cleanup);
[DllImport("apr-0")] static extern
internal int apr_pool_cleanup_null(IntPtr data);
[DllImport("apr-0")] static extern
internal void apr_pool_cleanup_for_exec();
*/
#endregion
#region AprTime
[DllImport("apr-0")] static extern
internal long apr_time_now();
[DllImport("apr-0")] static extern
internal int apr_ctime(StringBuilder date_str, long input);
[DllImport("apr-0")] static extern
internal int apr_rfc822_date(StringBuilder date_str, long input);
#endregion
#region AprTimeExp
[DllImport("apr-0")] static extern
internal int apr_time_exp_gmt(IntPtr result, long input);
[DllImport("apr-0")] static extern
internal int apr_time_exp_gmt_get(out long result, IntPtr input);
[DllImport("apr-0")] static extern
internal int apr_time_exp_get(out long result, IntPtr input);
[DllImport("apr-0")] static extern
internal int apr_time_exp_lt(IntPtr result, long input);
[DllImport("apr-0")] static extern
internal int apr_time_exp_tz(IntPtr result, long input, int offset);
[DllImport("apr-0")] static extern
internal int apr_strftime(StringBuilder s, out uint retsize,
uint maxsize, string Format, IntPtr input);
#endregion
#region AprString
[DllImport("apr-0")] static extern
internal IntPtr apr_pstrdup(IntPtr pool, IntPtr str);
[DllImport("apr-0", CharSet=CharSet.Ansi)] static extern
internal IntPtr apr_pstrdup(IntPtr pool, string str);
[DllImport("apr-0")] static extern
internal IntPtr apr_pstrndup(IntPtr pool, IntPtr str, uint size);
[DllImport("apr-0", CharSet=CharSet.Ansi)] static extern
internal IntPtr apr_pstrndup(IntPtr pool, string str, uint size);
/*
[DllImport("apr-0")] static extern
internal IntPtr apr_pmemdup(IntPtr pool, IntPtr mem, uint size);
[DllImport("apr-0")] static extern
internal IntPtr apr_pstrmemdup(IntPtr pool, IntPtr str, uint size);
[DllImport("apr-0", CharSet=CharSet.Ansi)] static extern
internal IntPtr apr_pstrmemdup(IntPtr pool, string str, uint size);
[DllImport("apr-0")] static extern
internal int apr_strnatcmp(IntPtr stra, IntPtr strb);
[DllImport("apr-0")] static extern
internal int apr_strnatcmp(IntPtr stra, string strb);
[DllImport("apr-0")] static extern
internal int apr_strnatcasecmp(IntPtr stra, IntPtr strb);
[DllImport("apr-0")] static extern
internal int apr_strnatcasecmp(IntPtr stra, string strb);
[DllImport("apr-0")] static extern
internal char * apr_pstrcat (apr_pool_t *p,...)
[DllImport("apr-0")] static extern
internal char * apr_pstrcatv (apr_pool_t *p, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes)
[DllImport("apr-0")] static extern
internal char * apr_pvsprintf (apr_pool_t *p, const char *fmt, va_list ap)
[DllImport("apr-0")] static extern
internal char * apr_psprintf (apr_pool_t *p, const char *fmt,...)
[DllImport("apr-0")] static extern
internal char * apr_cpystrn (char *dst, const char *src, apr_size_t dst_size)
[DllImport("apr-0")] static extern
internal char * apr_collapse_spaces (char *dest, const char *src)
[DllImport("apr-0")] static extern
internal apr_status_t apr_tokenize_to_argv (const char *arg_str, char ***argv_out, apr_pool_t *token_context)
[DllImport("apr-0")] static extern
internal char * apr_strtok (char *str, const char *sep, char **last)
[DllImport("apr-0")] static extern
internal char * apr_itoa (apr_pool_t *p, int n)
[DllImport("apr-0")] static extern
internal char * apr_ltoa (apr_pool_t *p, long n)
[DllImport("apr-0")] static extern
internal char * apr_off_t_toa (apr_pool_t *p, apr_off_t n)
[DllImport("apr-0")] static extern
internal apr_int64_t apr_strtoi64 (const char *buf, char **end, int base)
[DllImport("apr-0")] static extern
internal apr_int64_t apr_atoi64 (const char *buf)
[DllImport("apr-0")] static extern
internal char * apr_strfsize (apr_off_t size, char *buf)
*/
#endregion
}
}