/**
	Exposes include/ldap.h

	Only meant to be used internally.
 */
module dldap.c.ldap_h;

import dldap.c.ldap_int;
import dldap.c.liblber.lber_int;

nothrow:
extern(C):


// Init
ldap* ldap_init (const char* host, int port);
int ldap_initialize (ldap** ldp, const char* uri);

// Bind -- deprecated. TODO: ldap_sasl_bind(_s)
int ldap_bind(ldap *ld, const char* dn, const char* passwd, int authmethod);
int ldap_simple_bind_s(ldap* ld, const char* who, const char* passwd);

// Unbind 
int ldap_unbind_s(ldap* ld);
int ldap_unbind(ldap* ld);

// Search
int ldap_search_s(
		ldap *ld, 
		const char *base, 
		int scope_, 
		const char *filter,
		char **attrs, 
		int attrsonly,
		ldapmsg **res);

char* ldap_err2string(int err);

// Message
int ldap_msgfree(ldapmsg* msg);
char *ldap_get_dn(ldap *ld, ldapmsg *entry);
ldapmsg* ldap_first_message(ldap* ld, ldapmsg* result);
ldapmsg* ldap_next_message(ldap* ld, ldapmsg* message);

// Attributes
char* ldap_first_attribute(ldap* ld, ldapmsg* entry, berelement** berptr);
char* ldap_next_attribute(ldap* ld, ldapmsg* entry, berelement* ber);

// Attribute values
char** ldap_get_values(ldap* ld, ldapmsg* entry, char* attr);
void ldap_value_free(char** vals);

// membfree
void ldap_memfree(void* p);