Show
Ignore:
Timestamp:
06/11/08 08:20:10 (6 months ago)
Author:
eugene
Message:

Applied the latest version of flynd's daemon patch.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/licq_group/src/icqpacket.cpp

    r6230 r6257  
    4141#include "support.h" 
    4242 
     43using namespace std; 
    4344 
    4445unsigned short ReversePort(unsigned short p) 
     
    28132814    { 
    28142815      // Use the first group that the user is in as the server stored group 
    2815       GroupIDList *pID = gUserManager.LockGroupIDList(LOCK_R); 
    2816       for (unsigned short j = 1; j < pID->size() + 1; j++) 
     2816      const UserGroupList& userGroups = u->GetGroups(); 
     2817 
     2818      for (UserGroupList::const_iterator j = userGroups.begin(); j != userGroups.end(); ++j) 
    28172819      { 
    2818         if (u->GetInGroup(GROUPS_USER, j)) 
    2819         { 
    2820           m_nGSID = (*pID)[j-1]; 
    2821           if (m_nGSID) 
    2822             break; 
    2823         } 
     2820        m_nGSID = gUserManager.GetIDFromGroup(*j); 
     2821        if (m_nGSID != 0) 
     2822          break; 
    28242823      } 
    28252824 
     
    28282827      { 
    28292828        unsigned short nNewGroup = gUserManager.NewUserGroup(); 
    2830         if (nNewGroup && nNewGroup <= pID->size()) 
    2831           m_nGSID = (*pID)[nNewGroup-1]; 
    2832  
    2833         if (m_nGSID == 0 && pID->size()) 
    2834           m_nGSID = (*pID)[0]; // first group if none was specified 
     2829        m_nGSID = gUserManager.GetIDFromGroup(nNewGroup); 
     2830 
     2831        if (m_nGSID == 0) 
     2832        { 
     2833          // First group if none was specified 
     2834          GroupMap* groups = gUserManager.LockGroupList(LOCK_R); 
     2835          if (groups->size() > 0) 
     2836          { 
     2837            LicqGroup* g = groups->begin()->second; 
     2838            g->Lock(LOCK_R); 
     2839            m_nGSID = g->icqGroupId(); 
     2840            g->Unlock(); 
     2841          } 
     2842          gUserManager.UnlockGroupList(); 
     2843        } 
    28352844 
    28362845        if (m_nGSID == 0) 
    28372846          m_nGSID = 1; // General (unless user renamed group or wasnt created yet) 
    28382847      } 
    2839       gUserManager.UnlockGroupIDList(); 
    28402848 
    28412849      u->SetGSID(m_nGSID); 
     
    28672875    if (szUnicodeName) 
    28682876      free(szUnicodeName); 
    2869        
     2877 
    28702878    free(*i); 
    28712879  } 
     
    28732881 
    28742882//-----ExportGroupsToServerList------------------------------------------------- 
    2875 CPU_ExportGroupsToServerList::CPU_ExportGroupsToServerList(GroupList &groups) 
     2883CPU_ExportGroupsToServerList::CPU_ExportGroupsToServerList(const GroupNameMap& groups) 
    28762884  : CPU_CommonFamily(ICQ_SNACxFAM_LIST, ICQ_SNACxLIST_ROSTxADD) 
    28772885{ 
     
    28792887  int nGSID = 0; 
    28802888 
    2881   GroupList::iterator g; 
     2889  GroupNameMap::const_iterator g; 
    28822890  for (g = groups.begin(); g != groups.end(); ++g) 
    28832891  { 
    2884     char *szUnicode = gTranslator.ToUnicode(*g); 
     2892    const char* szUnicode = gTranslator.ToUnicode(g->second.c_str()); 
    28852893    nSize += strlen(szUnicode); 
    28862894    nSize += 10; 
    28872895    delete [] szUnicode; 
    28882896  } 
    2889    
     2897 
    28902898  m_nSize += nSize; 
    28912899  InitBuffer(); 
     
    28982906    nGSID = gUserManager.GenerateSID(); 
    28992907 
    2900     gUserManager.ModifyGroupID(*g, nGSID); 
    2901  
    2902     char *szUnicodeName = gTranslator.ToUnicode(*g); 
     2908    gUserManager.ModifyGroupID(g->first, nGSID); 
     2909 
     2910    const char* szUnicodeName = gTranslator.ToUnicode(g->second.c_str()); 
    29032911 
    29042912    buffer->PackUnsignedShortBE(strlen(szUnicodeName)); 
     
    29632971 
    29642972      // Check for a group id 
    2965       GroupIDList *pID = gUserManager.LockGroupIDList(LOCK_R); 
     2973      const UserGroupList& userGroups = u->GetGroups(); 
    29662974      if (_nGroup) 
    29672975      { 
    29682976        // Use the passed in group 
    2969         m_nGSID = (*pID)[_nGroup-1]; 
     2977        m_nGSID = gUserManager.GetIDFromGroup(_nGroup); 
    29702978      } 
    29712979      else if (u->GetGSID() && _bAuthReq) 
     
    29762984      { 
    29772985        // Use the first group that the user is in as the server stored group 
    2978         for (unsigned short i = 1; i < pID->size() + 1; i++) 
     2986        for (UserGroupList::iterator i = userGroups.begin(); i != userGroups.end(); ++i) 
    29792987        { 
    2980           if (u->GetInGroup(GROUPS_USER, i)) 
    2981           { 
    2982             m_nGSID = (*pID)[i-1]; 
    2983             if (m_nGSID) 
    2984               break; 
    2985           } 
     2988          m_nGSID = gUserManager.GetIDFromGroup(*i); 
     2989          if (m_nGSID != 0) 
     2990            break; 
    29862991        } 
    29872992      } 
     
    30073012      { 
    30083013        unsigned short nNewGroup = gUserManager.NewUserGroup(); 
    3009         if (nNewGroup && nNewGroup <= pID->size()) 
    3010           m_nGSID = (*pID)[nNewGroup-1]; 
    3011  
    3012         if (m_nGSID == 0 && pID->size()) 
    3013           m_nGSID = (*pID)[0]; 
    3014          
     3014        m_nGSID = gUserManager.GetIDFromGroup(nNewGroup); 
     3015 
    30153016        if (m_nGSID == 0) 
    3016           m_nGSID = 1; // General (unless user renamed group) 
     3017        { 
     3018          GroupMap* groups = gUserManager.LockGroupList(LOCK_R); 
     3019          if (groups->size() > 0) 
     3020          { 
     3021            LicqGroup* g = groups->begin()->second; 
     3022            g->Lock(LOCK_R); 
     3023            m_nGSID = g->icqGroupId(); 
     3024            g->Unlock(); 
     3025          } 
     3026          gUserManager.UnlockGroupList(); 
     3027        } 
     3028 
     3029        if (m_nGSID == 0) 
     3030          m_nGSID = 1; // General (unless user renamed group or wasnt created yet) 
    30173031      } 
    30183032 
     
    30223036      SetExtraInfo(m_nGSID); 
    30233037      u->SetGSID(m_nGSID); 
    3024       gUserManager.UnlockGroupIDList(); 
    30253038      gUserManager.DropUser(u); 
    30263039 
     
    30873100    if (_bTopLevel) 
    30883101    { 
    3089       GroupIDList *pID = gUserManager.LockGroupIDList(LOCK_R); 
    3090  
    30913102      // We are creating our top level group, so attach all the group ids now 
    30923103      buffer->PackUnsignedShortBE(0x00C8); 
    30933104      buffer->PackUnsignedShortBE(gUserManager.NumGroups() * 2); 
    3094        
    3095       for (unsigned short i = 0; i < pID->size(); i++) 
    3096         buffer->PackUnsignedShortBE((*pID)[i]); 
    3097       
    3098       gUserManager.UnlockGroupIDList(); 
     3105 
     3106      FOR_EACH_GROUP_START(LOCK_R) 
     3107      { 
     3108        buffer->PackUnsignedShortBE(pGroup->icqGroupId()); 
     3109      } 
     3110      FOR_EACH_GROUP_END 
    30993111    } 
    31003112    else 
     
    32713283  unsigned short nNameLen = strlen(_szName); 
    32723284  char *szUnicodeName = 0; 
    3273   GroupIDList *gID = 0; 
     3285  const GroupMap* groups = 0; 
    32743286  CBuffer tlvBuffer; 
    32753287 
     
    33173329      if (nGSID == 0) 
    33183330      { 
    3319         gID = gUserManager.LockGroupIDList(LOCK_R); 
    3320         nExtraLen += (gID->size() * 2); 
     3331        groups = gUserManager.LockGroupList(LOCK_R); 
     3332        nExtraLen += (groups->size() * 2); 
    33213333        if (nExtraLen == 0) 
    3322           gUserManager.UnlockGroupIDList(); 
     3334          gUserManager.UnlockGroupList(); 
    33233335      } 
    33243336      else 
     
    33623374      buffer->PackUnsignedShortBE(0x00C8); 
    33633375      buffer->PackUnsignedShortBE(nExtraLen-4); 
    3364        
     3376 
    33653377      if (nGSID == 0) 
    33663378      { 
    3367         for (unsigned int i = 0; i != gID->size(); i++) 
     3379        GroupMap::const_iterator i; 
     3380        for (i = groups->begin(); i != groups->end(); ++i) 
    33683381        { 
    3369           buffer->PackUnsignedShortBE((*gID)[i]); 
     3382          i->second->Lock(LOCK_R); 
     3383          buffer->PackUnsignedShortBE(i->second->icqGroupId()); 
     3384          i->second->Unlock(); 
    33703385        } 
    3371         gUserManager.UnlockGroupIDList(); 
     3386        gUserManager.UnlockGroupList(); 
    33723387      } 
    33733388      else