⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pils.cxx

📁 pwlib源码库
💻 CXX
字号:
/* * pils.cxx * * Microsoft Internet Location Server Protocol interface class. * * Portable Windows Library * * Copyright (c) 1993-2003 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: pils.cxx,v $ * Revision 1.5  2003/06/05 23:19:52  rjongbloed * Changed LDAP version to be compatible with ILS servers. * * Revision 1.4  2003/04/11 00:07:56  robertj * More for Microsoft IP address specification wierdness (registration side). * * Revision 1.3  2003/04/07 13:05:20  robertj * Workaround for Microsoft IP address specification wierdness. * * Revision 1.2  2003/03/31 12:18:43  robertj * Fixed pragma implementation * * Revision 1.1  2003/03/31 03:35:20  robertj * Major addition of LDAP functionality. * Added ILS specialisation of LDAP. * */#ifdef __GNUC__#pragma implementation "pils.h"#endif#include <ptlib.h>#include <ptclib/pils.h>#if P_LDAP// Microsoft in their infinite wisdom save the IP address as an little endian// integer from a 32 bit integer that was in network byte order (big endian)// which causes immense confusion. Reading into a PIPSocket::Address does not// work as it assumes that any integer forms would be in host order.istream & operator>>(istream & s, PILSSession::MSIPAddress & a){  DWORD u;  s >> u;#if PBYTE_ORDER==PLITTLE_ENDIAN  a = u;#else  a = PIPSocket::Address((BYTE)(u>>24),(BYTE)(u>>16),(BYTE)(u>>8),(BYTE)u);#endif  return s;}ostream & operator<<(ostream & s, PILSSession::MSIPAddress & a){#if PBYTE_ORDER==PLITTLE_ENDIAN  DWORD u = a;#else  DWORD u = (a.Byte1()<<24)|(a.Byte2()<<16)|(a.Byte3()<<8)|a.Byte4();#endif  return s << u;}///////////////////////////////////////////////////////////////////////////////PILSSession::PILSSession()  : PLDAPSession("objectClass=RTPerson"){  protocolVersion = 2;}BOOL PILSSession::AddPerson(const RTPerson & person){  return Add(person.GetDN(), person);}BOOL PILSSession::ModifyPerson(const RTPerson & person){  return Modify(person.GetDN(), person);}BOOL PILSSession::DeletePerson(const RTPerson & person){  return Delete(person.GetDN());}BOOL PILSSession::SearchPerson(const PString & canonicalName, RTPerson & person){  SearchContext context;  if (!Search(context, "cn="+canonicalName))    return FALSE;  if (!GetSearchResult(context, person))    return FALSE;  // Return FALSE if there is more than one match  return !GetNextSearchResult(context);}PList<PILSSession::RTPerson> PILSSession::SearchPeople(const PString & filter){  PList<RTPerson> persons;  SearchContext context;  if (Search(context, filter)) {    do {      RTPerson * person = new RTPerson;      if (GetSearchResult(context, *person))        persons.Append(person);      else        delete person;    } while (GetNextSearchResult(context));  }  return persons;}PString PILSSession::RTPerson::GetDN() const{  PStringStream dn;  if (!c)    dn << "c=" << c << ", ";  if (!o)    dn << "o=" << o << ", ";  dn << "cn=" + cn + ", objectClass=" + objectClass;  return dn;}#endif // P_LDAP// End of file ////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -