Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
2d1b255c
Commit
2d1b255c
authored
Feb 08, 2008
by
Quanah Gibson-Mount
Browse files
moved ldap_result() code to the LDAPRequest-Class
parent
a655210a
Changes
3
Hide whitespace changes
Inline
Side-by-side
contrib/ldapc++/src/LDAPMessageQueue.cpp
View file @
2d1b255c
...
...
@@ -6,10 +6,8 @@
#include
"config.h"
#include
"debug.h"
#include
<ldap.h>
#include
"LDAPMessageQueue.h"
#include
"LDAPRequest.h"
#include
"LDAPAsynConnection.h"
#include
"LDAPResult.h"
#include
"LDAPSearchReference.h"
#include
"LDAPSearchRequest.h"
...
...
@@ -40,110 +38,99 @@ LDAPMessageQueue::~LDAPMessageQueue(){
LDAPMsg
*
LDAPMessageQueue
::
getNext
(){
DEBUG
(
LDAP_DEBUG_TRACE
,
"LDAPMessageQueue::getNext()"
<<
endl
);
LDAPMessage
*
msg
;
LDAPRequest
*
req
=
m_activeReq
.
top
();
int
msg_id
=
req
->
getMsgID
();
int
res
;
const
LDAPAsynConnection
*
con
=
req
->
getConnection
();
res
=
ldap_result
(
con
->
getSessionHandle
(),
msg_id
,
0
,
0
,
&
msg
);
if
(
res
<=
0
){
if
(
msg
!=
0
){
ldap_msgfree
(
msg
);
}
throw
LDAPException
(
con
);
}
else
{
const
LDAPConstraints
*
constr
=
req
->
getConstraints
();
LDAPMsg
*
ret
=
0
;
//this can throw an exception (Decoding Error)
try
{
ret
=
LDAPMsg
::
create
(
req
,
msg
);
ldap_msgfree
(
msg
);
}
catch
(
LDAPException
e
){
//do some clean up
delete
req
;
m_activeReq
.
top
();
throw
;
}
switch
(
ret
->
getMessageType
())
{
case
LDAPMsg
::
SEARCH_REFERENCE
:
if
(
constr
->
getReferralChase
()
){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
}
return
ret
;
break
;
case
LDAPMsg
::
SEARCH_ENTRY
:
return
ret
;
break
;
case
LDAPMsg
::
SEARCH_DONE
:
if
(
req
->
isReferral
()){
req
->
unbind
();
LDAPMsg
*
ret
=
0
;
try
{
ret
=
req
->
getNextMessage
();
}
catch
(
LDAPException
e
){
//do some clean up
delete
req
;
m_activeReq
.
top
();
throw
;
}
const
LDAPConstraints
*
constr
=
req
->
getConstraints
();
switch
(
ret
->
getMessageType
())
{
case
LDAPMsg
::
SEARCH_REFERENCE
:
if
(
constr
->
getReferralChase
()
){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
switch
(
((
LDAPResult
*
)
ret
)
->
getResultCode
())
{
case
LDAPResult
::
REFERRAL
:
if
(
constr
->
getReferralChase
()){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
pop
();
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
}
return
ret
;
break
;
case
LDAPResult
::
SUCCESS
:
if
(
req
->
isReferral
()){
delete
ret
;
}
return
ret
;
break
;
case
LDAPMsg
::
SEARCH_ENTRY
:
return
ret
;
break
;
case
LDAPMsg
::
SEARCH_DONE
:
if
(
req
->
isReferral
()){
req
->
unbind
();
}
switch
(
((
LDAPResult
*
)
ret
)
->
getResultCode
())
{
case
LDAPResult
::
REFERRAL
:
if
(
constr
->
getReferralChase
()){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
pop
();
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
else
{
m_activeReq
.
pop
();
return
ret
;
}
break
;
default:
}
return
ret
;
break
;
case
LDAPResult
::
SUCCESS
:
if
(
req
->
isReferral
()){
delete
ret
;
m_activeReq
.
pop
();
return
ret
;
break
;
}
break
;
//must be some kind of LDAPResultMessage
default:
if
(
req
->
isReferral
()){
req
->
unbind
();
}
LDAPResult
*
res_p
=
(
LDAPResult
*
)
ret
;
switch
(
res_p
->
getResultCode
())
{
case
LDAPResult
::
REFERRAL
:
if
(
constr
->
getReferralChase
()){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
pop
();
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
}
return
ret
;
break
;
default:
return
getNext
();
}
else
{
m_activeReq
.
pop
();
return
ret
;
}
break
;
}
}
}
break
;
default:
m_activeReq
.
pop
();
return
ret
;
break
;
}
break
;
//must be some kind of LDAPResultMessage
default:
if
(
req
->
isReferral
()){
req
->
unbind
();
}
LDAPResult
*
res_p
=
(
LDAPResult
*
)
ret
;
switch
(
res_p
->
getResultCode
())
{
case
LDAPResult
::
REFERRAL
:
if
(
constr
->
getReferralChase
()){
//throws Exception (limit Exceeded)
LDAPRequest
*
refReq
=
chaseReferral
(
ret
);
if
(
refReq
!=
0
){
m_activeReq
.
pop
();
m_activeReq
.
push
(
refReq
);
m_issuedReq
.
push_back
(
refReq
);
delete
ret
;
return
getNext
();
}
}
return
ret
;
break
;
default:
m_activeReq
.
pop
();
return
ret
;
}
break
;
}
}
// TODO Maybe moved to LDAPRequest::followReferral seems more reasonable
...
...
contrib/ldapc++/src/LDAPRequest.cpp
View file @
2d1b255c
...
...
@@ -47,6 +47,29 @@ LDAPRequest::~LDAPRequest(){
delete
m_cons
;
}
LDAPMsg
*
LDAPRequest
::
getNextMessage
()
const
{
DEBUG
(
LDAP_DEBUG_DESTROY
,
"LDAPRequest::getNextMessage()"
<<
endl
);
int
res
;
LDAPMessage
*
msg
;
res
=
ldap_result
(
this
->
m_connection
->
getSessionHandle
(),
this
->
m_msgID
,
0
,
0
,
&
msg
);
if
(
res
<=
0
){
if
(
msg
!=
0
){
ldap_msgfree
(
msg
);
}
throw
LDAPException
(
this
->
m_connection
);
}
else
{
LDAPMsg
*
ret
=
0
;
//this can throw an exception (Decoding Error)
ret
=
LDAPMsg
::
create
(
this
,
msg
);
ldap_msgfree
(
msg
);
return
ret
;
}
}
const
LDAPConstraints
*
LDAPRequest
::
getConstraints
()
const
{
DEBUG
(
LDAP_DEBUG_TRACE
,
"LDAPRequest::getConstraints()"
<<
endl
);
return
m_cons
;
...
...
contrib/ldapc++/src/LDAPRequest.h
View file @
2d1b255c
...
...
@@ -40,6 +40,7 @@ class LDAPRequest{
const
LDAPConstraints
*
getConstraints
()
const
;
const
LDAPAsynConnection
*
getConnection
()
const
;
LDAPMsg
*
getNextMessage
()
const
;
int
getType
()
const
;
int
getMsgID
()
const
;
int
getHopCount
()
const
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment