]> git.sur5r.net Git - openldap/blob - contrib/ldapc++/src/LDAPUrl.h
88730bba4e5d516d579daed074ebfd7995ea5a8a
[openldap] / contrib / ldapc++ / src / LDAPUrl.h
1 // $OpenLDAP$
2 /*
3  * Copyright 2000-2017 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7
8 #ifndef LDAP_URL_H
9 #define LDAP_URL_H
10
11 #include <StringList.h>
12
13 class LDAPUrlException;
14 /**
15  * This class is used to analyze and store LDAP-Urls as returned by a
16  * LDAP-Server as Referrals and Search References. LDAP-URLs are defined
17  * in RFC1959 and have the following format: <BR>
18  * <code>
19  * ldap://host:port/baseDN[?attr[?scope[?filter]]] <BR>
20  * </code>
21  */
22 class LDAPUrl{
23
24     public : 
25         /**
26          * Create a new object from a string that contains a LDAP-Url
27          * @param url The URL String
28          */
29         LDAPUrl(const std::string &url="");
30
31         /**
32          * Destructor
33          */
34         ~LDAPUrl();
35
36         /**
37          * @return The part of the URL that is representing the network
38          * port
39          */
40         int getPort() const;
41         
42         /**
43          * Set the port value of the URL
44          * @param dn The port value
45          */
46         void setPort(int port);
47
48         /**
49          * @return The scope part of the URL is returned. 
50          */
51         int getScope() const;
52
53         /**
54          * Set the Scope part of the URL
55          * @param scope The new scope
56          */
57         void setScope(const std::string& scope);
58
59         /**
60          * @return The complete URL as a string
61          */
62         const std::string& getURLString() const;
63
64         /**
65          * Set the URL member attribute
66          * @param url The URL String
67          */
68         void setURLString(const std::string &url);
69
70         /**
71          * @return The hostname or IP-Address of the destination host.
72          */
73         const std::string& getHost() const;
74
75         /**
76          * Set the Host part of the URL
77          * @param host The new host part
78          */
79         void setHost( const std::string &host);
80
81         /**
82          * @return The Protocol Scheme of the URL.
83          */
84         const std::string& getScheme() const;
85
86         /**
87          * Set the Protocol Scheme of the URL
88          * @param host The Protcol scheme. Allowed values are 
89          *       ldap,ldapi,ldaps and cldap
90          */
91         void setScheme( const std::string &scheme );
92
93         /**
94          * @return The Base-DN part of the URL
95          */
96         const std::string& getDN() const;
97         
98         /**
99          * Set the DN part of the URL
100          * @param dn The new DN part
101          */
102         void setDN( const std::string &dn);
103
104         
105         /**
106          * @return The Filter part of the URL
107          */
108         const std::string& getFilter() const;
109         
110         /**
111          * Set the Filter part of the URL
112          * @param filter The new Filter
113          */
114         void setFilter( const std::string &filter);
115
116         /**
117          * @return The List of attributes  that was in the URL
118          */
119         const StringList& getAttrs() const;
120         
121         /**
122          * Set the Attributes part of the URL
123          * @param attrs StringList constaining the List of Attributes
124          */
125         void setAttrs( const StringList &attrs);
126         void setExtensions( const StringList &ext);
127         const StringList& getExtensions() const;
128
129         /**
130          * Percent-decode a string
131          * @param src The string that is to be decoded
132          * @param dest The decoded result string
133          */
134         void percentDecode( const std::string& src, std::string& dest );
135         
136         /**
137          * Percent-encoded a string
138          * @param src The string that is to be encoded
139          * @param dest The encoded result string
140          * @param flags
141          */
142         std::string& percentEncode( const std::string& src, 
143                     std::string& dest, 
144                     int flags=0 ) const;
145    
146     protected : 
147         /**
148          * Split the url string that is associated with this Object into
149          * it components. The compontens of the URL can be access via the 
150          * get...() methods.
151          * (this function is mostly for internal use and gets called 
152          * automatically whenever necessary)
153          */
154         void parseUrl();
155         
156         /**
157          * Generate an URL string from the components that were set with
158          * the various set...() methods
159          * (this function is mostly for internal use and gets called 
160          * automatically whenever necessary)
161          */
162         void components2Url() const;
163         
164         void string2list(const std::string &src, StringList& sl,
165                 bool percentDecode=false);
166
167     protected :
168         mutable bool regenerate;
169         int m_Port;
170         int m_Scope;
171         std::string m_Host;
172         std::string m_DN;
173         std::string m_Filter;
174         StringList m_Attrs;
175         StringList m_Extensions;
176         mutable std::string m_urlString;
177         std::string m_Scheme;
178         enum mode { base, attrs, scope, filter, extensions };
179 };
180
181 /// @cond
182 struct code2string_s {
183     int code;
184     const char* string;
185 };
186 /// @endcond
187
188 class LDAPUrlException {
189     public :
190         LDAPUrlException(int code, const std::string &msg="" );
191
192         int getCode() const;
193         const std::string getErrorMessage() const;
194         const std::string getAdditionalInfo() const;
195
196         static const int INVALID_SCHEME      = 1;
197         static const int INVALID_PORT        = 2;
198         static const int INVALID_SCOPE       = 3;
199         static const int INVALID_URL         = 4;
200         static const int URL_DECODING_ERROR  = 5; 
201         static const code2string_s code2string[]; 
202
203     private:
204         int m_code;
205         std::string m_addMsg;
206 };
207 #endif //LDAP_URL_H