/* * ldap_result - wait for an ldap result response to a message from the * ldap server. If msgid is LDAP_RES_ANY (-1), any message will be * accepted. If msgid is LDAP_RES_UNSOLICITED (0), any unsolicited * message is accepted. Otherwise ldap_result will wait for a response * with msgid. If all is LDAP_MSG_ONE (0) the first message with id * msgid will be accepted, otherwise, ldap_result will wait for all * responses with id msgid and then return a pointer to the entire list * of messages. In general, this is only useful for search responses, * which can be of three message types (zero or more entries, zero or * search references, followed by an ldap result). An extension to * LDAPv3 allows partial extended responses to be returned in response * to any request. The type of the first message received is returned. * When waiting, any messages that have been abandoned/discarded are * discarded. * * Example: * ldap_result( s, msgid, all, timeout, result ) */ int ldap_result( LDAP *ld, int msgid, int all, struct timeval *timeout, LDAPMessage **result ) { LDAPMessage *lm = NULL; int rc; assert( ld != NULL ); assert( result != NULL ); Debug( LDAP_DEBUG_TRACE, "ldap_result ld %p msgid %d\n", (void *)ld, msgid, 0 ); #ifdef LDAP_R_COMPILE ldap_pvt_thread_mutex_lock( &ld->ld_res_mutex ); #endif #if 0 /* this is already done inside wait4msg(), right?... */ lm = chkResponseList( ld, msgid, all ); #endif if ( lm == NULL ) { rc = wait4msg( ld, msgid, all, timeout, result ); } else { *result = lm; ld->ld_errno = LDAP_SUCCESS; rc = lm->lm_msgtype; } #ifdef LDAP_R_COMPILE ldap_pvt_thread_mutex_unlock( &ld->ld_res_mutex ); #endif return rc; }
/* * ldap_result - wait for an ldap result response to a message from the * ldap server. If msgid is LDAP_RES_ANY (-1), any message will be * accepted. If msgid is LDAP_RES_UNSOLICITED (0), any unsolicited * message is accepted. Otherwise ldap_result will wait for a response * with msgid. If all is LDAP_MSG_ONE (0) the first message with id * msgid will be accepted, otherwise, ldap_result will wait for all * responses with id msgid and then return a pointer to the entire list * of messages. In general, this is only useful for search responses, * which can be of three message types (zero or more entries, zero or * search references, followed by an ldap result). An extension to * LDAPv3 allows partial extended responses to be returned in response * to any request. The type of the first message received is returned. * When waiting, any messages that have been abandoned/discarded are * discarded. * * Example: * ldap_result( s, msgid, all, timeout, result ) */ int ldap_result( LDAP *ld, int msgid, int all, struct timeval *timeout, LDAPMessage **result ) { int rc; assert( ld != NULL ); assert( result != NULL ); Debug( LDAP_DEBUG_TRACE, "ldap_result ld %p msgid %d\n", (void *)ld, msgid, 0 ); if (ld->ld_errno == LDAP_LOCAL_ERROR || ld->ld_errno == LDAP_SERVER_DOWN) return -1; LDAP_MUTEX_LOCK( &ld->ld_res_mutex ); rc = wait4msg( ld, msgid, all, timeout, result ); LDAP_MUTEX_UNLOCK( &ld->ld_res_mutex ); return rc; }