assert( ctrls == NULL ); /* ctrls not implemented */
+ if (op->o_response)
+ return op->o_response( conn, op, tag, msgid, err, matched,
+ text, ref, resoid, resdata, sasldata, ctrls);
+
ber = ber_alloc_t( LBER_USE_DER );
#ifdef NEW_LOGGING
char *tmp = NULL;
assert( !LDAP_API_ERROR( err ) );
+ if (op->o_sresult)
+ return op->o_sresult(conn, op, err, matched, text, refs,
+ ctrls, nentries);
+
#ifdef NEW_LOGGING
LDAP_LOG(( "operation", LDAP_LEVEL_ENTRY,
"send_search_result: conn %d err=%d matched=\"%s\"\n",
#define o_tls_ssf o_authz.sai_tls_ssf
#define o_sasl_ssf o_authz.sai_sasl_ssf
+struct slap_op;
+struct slap_conn;
+
+typedef void (slap_response)(struct slap_conn *, struct slap_op *, ber_tag_t,
+ ber_int_t, ber_int_t, const char *, const char *, struct berval **,
+ const char *, struct berval *, struct berval *, LDAPControl **);
+
+typedef void (slap_sresult)(struct slap_conn *, struct slap_op *, ber_int_t,
+ const char *, const char *, struct berval **, LDAPControl **,
+ int nentries);
+
/*
* represents an operation pending from an ldap client
*/
ldap_pvt_thread_mutex_t o_abandonmutex; /* protects o_abandon */
int o_abandon; /* abandon flag */
+ slap_response *o_response; /* callback function */
+ slap_sresult *o_sresult; /* search result callback */
struct slap_op *o_next; /* next operation in list */
void *o_private; /* anything the backend needs */
+ void *o_glue; /* for the glue backend */
} Operation;
/*