version 1.52, 2000/10/11 02:23:23
|
version 1.53, 2000/10/11 19:11:34
|
Line 1
|
Line 1
|
/* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.51 2000/10/04 23:40:36 kurt Exp $ */ |
/* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.52 2000/10/11 02:23:23 kurt Exp $ */ |
/* |
/* |
* Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. |
* Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
Line 130 chkResponseList( LDAP *ld,
|
Line 130 chkResponseList( LDAP *ld,
|
* wait until it arrives or timeout occurs. |
* wait until it arrives or timeout occurs. |
*/ |
*/ |
|
|
|
Debug( LDAP_DEBUG_TRACE, "chkResponseList for msgid %d, all %d\n", |
|
msgid, all, 0 ); |
lastlm = NULL; |
lastlm = NULL; |
for ( lm = ld->ld_responses; lm != NULL; lm = nextlm ) { |
for ( lm = ld->ld_responses; lm != NULL; lm = nextlm ) { |
nextlm = lm->lm_next; |
nextlm = lm->lm_next; |
|
|
if ( ldap_abandoned( ld, lm->lm_msgid ) ) { |
if ( ldap_abandoned( ld, lm->lm_msgid ) ) { |
|
Debug( LDAP_DEBUG_TRACE, "chkResponseList msg abandoned, msgid %d\n", |
|
msgid, 0, 0 ); |
ldap_mark_abandoned( ld, lm->lm_msgid ); |
ldap_mark_abandoned( ld, lm->lm_msgid ); |
|
|
if ( lastlm == NULL ) { |
if ( lastlm == NULL ) { |
|
/* Remove first entry in list */ |
ld->ld_responses = lm->lm_next; |
ld->ld_responses = lm->lm_next; |
} else { |
} else { |
lastlm->lm_next = nextlm; |
lastlm->lm_next = nextlm; |
Line 172 chkResponseList( LDAP *ld,
|
Line 177 chkResponseList( LDAP *ld,
|
lastlm = lm; |
lastlm = lm; |
} |
} |
if ( lm != NULL ) { |
if ( lm != NULL ) { |
|
/* Found an entry, remove it from the list */ |
if ( lastlm == NULL ) { |
if ( lastlm == NULL ) { |
ld->ld_responses = (all == LDAP_MSG_ONE && lm->lm_chain != NULL |
ld->ld_responses = (all == LDAP_MSG_ONE && lm->lm_chain != NULL |
? lm->lm_chain : lm->lm_next); |
? lm->lm_chain : lm->lm_next); |
Line 186 chkResponseList( LDAP *ld,
|
Line 192 chkResponseList( LDAP *ld,
|
} |
} |
lm->lm_next = NULL; |
lm->lm_next = NULL; |
} |
} |
|
|
|
#ifdef LDAP_DEBUG |
|
if( lm == NULL) { |
|
Debug( LDAP_DEBUG_TRACE, "chkResponseList returns NULL\n", 0, 0, 0); |
|
} else { |
|
Debug( LDAP_DEBUG_TRACE, "chkResponseList returns msgid %d, type %lu\n", |
|
lm->lm_msgid, (unsigned long) lm->lm_msgtype, 0); |
|
} |
|
#endif |
return lm; |
return lm; |
} |
} |
static int |
static int |
Line 226 wait4msg(
|
Line 241 wait4msg(
|
rc = -2; |
rc = -2; |
while ( rc == -2 ) { |
while ( rc == -2 ) { |
#ifdef LDAP_DEBUG |
#ifdef LDAP_DEBUG |
|
Debug( LDAP_DEBUG_TRACE, "wait4msg continue, msgid %d, all %d\n", |
|
msgid, all, 0 ); |
if ( ldap_debug & LDAP_DEBUG_TRACE ) { |
if ( ldap_debug & LDAP_DEBUG_TRACE ) { |
ldap_dump_connection( ld, ld->ld_conns, 1 ); |
ldap_dump_connection( ld, ld->ld_conns, 1 ); |
ldap_dump_requests_and_responses( ld ); |
ldap_dump_requests_and_responses( ld ); |
} |
} |
#endif /* LDAP_DEBUG */ |
#endif /* LDAP_DEBUG */ |
for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) { |
|
if ( ber_sockbuf_ctrl( lc->lconn_sb, |
|
LBER_SB_OPT_DATA_READY, NULL ) ) { |
|
if( (*result = chkResponseList(ld, msgid, all)) == NULL ) { |
|
rc = try_read1msg( ld, msgid, all, lc->lconn_sb, |
|
lc, result ); |
|
} else { |
|
rc = (*result)->lm_msgtype; |
|
} |
|
break; |
|
} |
|
} |
|
|
|
if ( lc == NULL ) { |
if( (*result = chkResponseList(ld, msgid, all)) != NULL ) { |
rc = do_ldap_select( ld, tvp ); |
rc = (*result)->lm_msgtype; |
|
} else { |
|
|
|
for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) { |
|
if ( ber_sockbuf_ctrl( lc->lconn_sb, |
|
LBER_SB_OPT_DATA_READY, NULL ) ) { |
|
rc = try_read1msg( ld, msgid, all, lc->lconn_sb, |
|
lc, result ); |
|
break; |
|
} |
|
} |
|
|
|
if ( lc == NULL ) { |
|
rc = do_ldap_select( ld, tvp ); |
|
|
|
|
#ifdef LDAP_DEBUG |
#ifdef LDAP_DEBUG |
if ( rc == -1 ) { |
if ( rc == -1 ) { |
Debug( LDAP_DEBUG_TRACE, |
Debug( LDAP_DEBUG_TRACE, |
"do_ldap_select returned -1: errno %d\n", |
"do_ldap_select returned -1: errno %d\n", |
errno, 0, 0 ); |
errno, 0, 0 ); |
} |
} |
#endif |
#endif |
|
|
if ( rc == 0 || ( rc == -1 && ( |
if ( rc == 0 || ( rc == -1 && ( |
!LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART) |
!LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART) |
|| errno != EINTR ))) |
|| errno != EINTR ))) |
{ |
{ |
ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : |
ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : |
LDAP_TIMEOUT); |
LDAP_TIMEOUT); |
return( rc ); |
return( rc ); |
} |
} |
|
|
if ( rc == -1 ) { |
if ( rc == -1 ) { |
rc = -2; /* select interrupted: loop */ |
rc = -2; /* select interrupted: loop */ |
} else { |
} else { |
rc = -2; |
rc = -2; |
for ( lc = ld->ld_conns; rc == -2 && lc != NULL; |
for ( lc = ld->ld_conns; rc == -2 && lc != NULL; |
lc = nextlc ) { |
lc = nextlc ) { |
nextlc = lc->lconn_next; |
nextlc = lc->lconn_next; |
if ( lc->lconn_status == |
if ( lc->lconn_status == |
LDAP_CONNST_CONNECTED && |
LDAP_CONNST_CONNECTED && |
ldap_is_read_ready( ld, |
ldap_is_read_ready( ld, |
lc->lconn_sb )) { |
lc->lconn_sb )) { |
rc = try_read1msg( ld, msgid, all, |
rc = try_read1msg( ld, msgid, all, |
lc->lconn_sb, lc, result ); |
lc->lconn_sb, lc, result ); |
} |
} |
} |
} |
} |
} |
|
} |
} |
} |
|
|
if ( rc == -2 && tvp != NULL ) { |
if ( rc == -2 && tvp != NULL ) { |