Changeset 6257 for branches/licq_group/src/icqpacket.cpp
- Timestamp:
- 06/11/08 08:20:10 (6 months ago)
- Files:
-
- 1 modified
-
branches/licq_group/src/icqpacket.cpp (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/licq_group/src/icqpacket.cpp
r6230 r6257 41 41 #include "support.h" 42 42 43 using namespace std; 43 44 44 45 unsigned short ReversePort(unsigned short p) … … 2813 2814 { 2814 2815 // 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) 2817 2819 { 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; 2824 2823 } 2825 2824 … … 2828 2827 { 2829 2828 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 } 2835 2844 2836 2845 if (m_nGSID == 0) 2837 2846 m_nGSID = 1; // General (unless user renamed group or wasnt created yet) 2838 2847 } 2839 gUserManager.UnlockGroupIDList();2840 2848 2841 2849 u->SetGSID(m_nGSID); … … 2867 2875 if (szUnicodeName) 2868 2876 free(szUnicodeName); 2869 2877 2870 2878 free(*i); 2871 2879 } … … 2873 2881 2874 2882 //-----ExportGroupsToServerList------------------------------------------------- 2875 CPU_ExportGroupsToServerList::CPU_ExportGroupsToServerList( GroupList &groups)2883 CPU_ExportGroupsToServerList::CPU_ExportGroupsToServerList(const GroupNameMap& groups) 2876 2884 : CPU_CommonFamily(ICQ_SNACxFAM_LIST, ICQ_SNACxLIST_ROSTxADD) 2877 2885 { … … 2879 2887 int nGSID = 0; 2880 2888 2881 Group List::iterator g;2889 GroupNameMap::const_iterator g; 2882 2890 for (g = groups.begin(); g != groups.end(); ++g) 2883 2891 { 2884 c har *szUnicode = gTranslator.ToUnicode(*g);2892 const char* szUnicode = gTranslator.ToUnicode(g->second.c_str()); 2885 2893 nSize += strlen(szUnicode); 2886 2894 nSize += 10; 2887 2895 delete [] szUnicode; 2888 2896 } 2889 2897 2890 2898 m_nSize += nSize; 2891 2899 InitBuffer(); … … 2898 2906 nGSID = gUserManager.GenerateSID(); 2899 2907 2900 gUserManager.ModifyGroupID( *g, nGSID);2901 2902 c har *szUnicodeName = gTranslator.ToUnicode(*g);2908 gUserManager.ModifyGroupID(g->first, nGSID); 2909 2910 const char* szUnicodeName = gTranslator.ToUnicode(g->second.c_str()); 2903 2911 2904 2912 buffer->PackUnsignedShortBE(strlen(szUnicodeName)); … … 2963 2971 2964 2972 // Check for a group id 2965 GroupIDList *pID = gUserManager.LockGroupIDList(LOCK_R);2973 const UserGroupList& userGroups = u->GetGroups(); 2966 2974 if (_nGroup) 2967 2975 { 2968 2976 // Use the passed in group 2969 m_nGSID = (*pID)[_nGroup-1];2977 m_nGSID = gUserManager.GetIDFromGroup(_nGroup); 2970 2978 } 2971 2979 else if (u->GetGSID() && _bAuthReq) … … 2976 2984 { 2977 2985 // 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) 2979 2987 { 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; 2986 2991 } 2987 2992 } … … 3007 3012 { 3008 3013 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 3015 3016 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) 3017 3031 } 3018 3032 … … 3022 3036 SetExtraInfo(m_nGSID); 3023 3037 u->SetGSID(m_nGSID); 3024 gUserManager.UnlockGroupIDList();3025 3038 gUserManager.DropUser(u); 3026 3039 … … 3087 3100 if (_bTopLevel) 3088 3101 { 3089 GroupIDList *pID = gUserManager.LockGroupIDList(LOCK_R);3090 3091 3102 // We are creating our top level group, so attach all the group ids now 3092 3103 buffer->PackUnsignedShortBE(0x00C8); 3093 3104 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 3099 3111 } 3100 3112 else … … 3271 3283 unsigned short nNameLen = strlen(_szName); 3272 3284 char *szUnicodeName = 0; 3273 GroupIDList *gID= 0;3285 const GroupMap* groups = 0; 3274 3286 CBuffer tlvBuffer; 3275 3287 … … 3317 3329 if (nGSID == 0) 3318 3330 { 3319 g ID = gUserManager.LockGroupIDList(LOCK_R);3320 nExtraLen += (g ID->size() * 2);3331 groups = gUserManager.LockGroupList(LOCK_R); 3332 nExtraLen += (groups->size() * 2); 3321 3333 if (nExtraLen == 0) 3322 gUserManager.UnlockGroup IDList();3334 gUserManager.UnlockGroupList(); 3323 3335 } 3324 3336 else … … 3362 3374 buffer->PackUnsignedShortBE(0x00C8); 3363 3375 buffer->PackUnsignedShortBE(nExtraLen-4); 3364 3376 3365 3377 if (nGSID == 0) 3366 3378 { 3367 for (unsigned int i = 0; i != gID->size(); i++) 3379 GroupMap::const_iterator i; 3380 for (i = groups->begin(); i != groups->end(); ++i) 3368 3381 { 3369 buffer->PackUnsignedShortBE((*gID)[i]); 3382 i->second->Lock(LOCK_R); 3383 buffer->PackUnsignedShortBE(i->second->icqGroupId()); 3384 i->second->Unlock(); 3370 3385 } 3371 gUserManager.UnlockGroup IDList();3386 gUserManager.UnlockGroupList(); 3372 3387 } 3373 3388 else
