Show
Ignore:
Timestamp:
05/01/03 14:14:19 (6 years ago)
Author:
emostar
Message:

Exporting AIM users to the server side list works

Location:
branches/protocol_plugin_1_3_0/licq/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/protocol_plugin_1_3_0/licq/src/icqd-srv.cpp

    r3469 r3473  
    128128 
    129129  // Export users on a per group basis for the update group packet to work 
    130   UinList doneUin; 
     130  UserStringList doneUsers; 
    131131  for (unsigned int j = 1; j <= g->size(); j++) 
    132132  { 
    133     UinList uins; 
    134     FOR_EACH_USER_START(LOCK_R) 
     133    UserStringList users; 
     134    FOR_EACH_PROTO_USER_START(LICQ_PPID, LOCK_R) 
    135135    { 
    136136      if (pUser->GetInGroup(GROUPS_USER, j) && pUser->GetSID() == 0 && 
    137137          !pUser->IgnoreList()) 
    138138      { 
    139         UinList::const_iterator p = std::find(doneUin.begin(), doneUin.end(), 
    140           pUser->Uin()); 
    141  
    142         if (p == doneUin.end()) 
    143         { 
    144           uins.push_back(pUser->Uin()); 
    145           doneUin.push_back(pUser->Uin()); 
     139        UserStringList::const_iterator p = std::find(doneUsers.begin(), doneUsers.end(), 
     140          pUser->IdString()); 
     141 
     142        if (p == doneUsers.end()) 
     143        { 
     144          users.push_back(strdup(pUser->IdString())); 
     145          doneUsers.push_back(strdup(pUser->IdString())); 
    146146 
    147147          pthread_mutex_lock(&mutex_modifyserverusers); 
    148           m_lszModifyServerUsers.push_back(strdup(pUser->UinString())); 
     148          m_lszModifyServerUsers.push_back(strdup(pUser->IdString())); 
    149149          pthread_mutex_unlock(&mutex_modifyserverusers); 
    150150        } 
    151151      } 
    152152    } 
    153     FOR_EACH_USER_END 
    154  
    155     if (uins.size()) 
    156       icqExportUsers(uins, ICQ_ROSTxNORMAL); 
    157   } 
     153    FOR_EACH_PROTO_USER_END 
     154 
     155    if (users.size()) 
     156      icqExportUsers(users, ICQ_ROSTxNORMAL); 
     157  } 
     158   
     159  UserStringList::iterator it; 
     160  for (it = doneUsers.begin(); it != doneUsers.end(); it++) 
     161    free(*it); 
    158162 
    159163  // Export visible/invisible/ignore list 
    160   UinList visibleUins, invisibleUins, ignoredUins; 
    161   FOR_EACH_USER_START(LOCK_R) 
     164  UserStringList visibleUsers, invisibleUsers, ignoredUsers; 
     165  FOR_EACH_PROTO_USER_START(LICQ_PPID, LOCK_R) 
    162166  { 
    163167    if (pUser->IgnoreList() && pUser->GetSID() == 0) 
    164168    { 
    165       ignoredUins.push_back(pUser->Uin()); 
     169      ignoredUsers.push_back(strdup(pUser->IdString())); 
    166170 
    167171      pthread_mutex_lock(&mutex_modifyserverusers); 
    168       m_lszModifyServerUsers.push_back(strdup(pUser->UinString())); 
     172      m_lszModifyServerUsers.push_back(strdup(pUser->IdString())); 
    169173      pthread_mutex_unlock(&mutex_modifyserverusers); 
    170174    } 
     
    173177      if (pUser->InvisibleList() && pUser->GetInvisibleSID() == 0) 
    174178      { 
    175         invisibleUins.push_back(pUser->Uin()); 
     179        invisibleUsers.push_back(strdup(pUser->IdString())); 
    176180 
    177181        pthread_mutex_lock(&mutex_modifyserverusers); 
    178         m_lszModifyServerUsers.push_back(strdup(pUser->UinString())); 
     182        m_lszModifyServerUsers.push_back(strdup(pUser->IdString())); 
    179183        pthread_mutex_unlock(&mutex_modifyserverusers); 
    180184      } 
     
    182186      if (pUser->VisibleList() && pUser->GetVisibleSID() == 0) 
    183187      { 
    184         visibleUins.push_back(pUser->Uin()); 
     188        visibleUsers.push_back(strdup(pUser->IdString())); 
    185189 
    186190        pthread_mutex_lock(&mutex_modifyserverusers); 
    187         m_lszModifyServerUsers.push_back(strdup(pUser->UinString())); 
     191        m_lszModifyServerUsers.push_back(strdup(pUser->IdString())); 
    188192        pthread_mutex_unlock(&mutex_modifyserverusers); 
    189193      } 
    190194    } 
    191195  } 
    192   FOR_EACH_USER_END 
    193  
    194   if (visibleUins.size()) 
    195     icqExportUsers(visibleUins, ICQ_ROSTxVISIBLE); 
    196  
    197   if (invisibleUins.size()) 
    198     icqExportUsers(invisibleUins, ICQ_ROSTxINVISIBLE); 
    199  
    200   if (ignoredUins.size()) 
    201     icqExportUsers(ignoredUins, ICQ_ROSTxIGNORE); 
     196  FOR_EACH_PROTO_USER_END 
     197 
     198  if (visibleUsers.size()) 
     199    icqExportUsers(visibleUsers, ICQ_ROSTxVISIBLE); 
     200 
     201  if (invisibleUsers.size()) 
     202    icqExportUsers(invisibleUsers, ICQ_ROSTxINVISIBLE); 
     203 
     204  if (ignoredUsers.size()) 
     205    icqExportUsers(ignoredUsers, ICQ_ROSTxIGNORE); 
    202206} 
    203207 
    204208//-----icqExportUsers----------------------------------------------------------- 
    205 void CICQDaemon::icqExportUsers(UinList &uins, unsigned short _nType) 
     209void CICQDaemon::icqExportUsers(UserStringList &users, unsigned short _nType) 
    206210{ 
    207211  if (!UseServerContactList())  return; 
     
    210214  SendEvent_Server(pStart); 
    211215 
    212   CSrvPacketTcp *pExport = new CPU_ExportToServerList(uins, _nType); 
     216  CSrvPacketTcp *pExport = new CPU_ExportToServerList(users, _nType); 
    213217  gLog.Info("%sExporting users to server contact list...\n", L_SRVxSTR); 
    214218  SendExpectEvent_Server(0L, pExport, NULL); 
     
    827831{ 
    828832  unsigned short n = 0; 
    829   UinList uins; 
    830   FOR_EACH_USER_START(LOCK_W) 
     833  UserStringList users; 
     834  FOR_EACH_PROTO_USER_START(LICQ_PPID, LOCK_W) 
    831835  { 
    832836    n++; 
    833     uins.push_back(pUser->Uin()); 
     837    users.push_back(strdup(pUser->IdString())); 
    834838    if (n == m_nMaxUsersPerPacket) 
    835839    { 
    836       CSrvPacketTcp *p = new CPU_GenericUinList(uins, ICQ_SNACxFAM_BUDDY, ICQ_SNACxBDY_ADDxTOxLIST); 
     840      CSrvPacketTcp *p = new CPU_GenericUinList(users, ICQ_SNACxFAM_BUDDY, ICQ_SNACxBDY_ADDxTOxLIST); 
    837841      gLog.Info("%sUpdating contact list (#%ld)...\n", L_SRVxSTR, p->Sequence()); 
    838842      SendEvent_Server(p); 
    839       uins.erase(uins.begin(), uins.end()); 
     843      users.erase(users.begin(), users.end()); 
    840844      n = 0; 
    841845    } 
     
    843847    if (!pUser->StatusOffline()) ChangeUserStatus(pUser, ICQ_STATUS_OFFLINE); 
    844848  } 
    845   FOR_EACH_USER_END 
     849  FOR_EACH_PROTO_USER_END 
    846850  if (n != 0) 
    847851  { 
    848     CSrvPacketTcp *p = new CPU_GenericUinList(uins, ICQ_SNACxFAM_BUDDY, ICQ_SNACxBDY_ADDxTOxLIST); 
     852    CSrvPacketTcp *p = new CPU_GenericUinList(users, ICQ_SNACxFAM_BUDDY, ICQ_SNACxBDY_ADDxTOxLIST); 
    849853    gLog.Info("%sUpdating contact list (#%ld)...\n", L_SRVxSTR, p->Sequence()); 
    850854    SendEvent_Server(p); 
     
    858862  // Go through the entire list of users, checking if each one is on 
    859863  // the visible list 
    860   UinList uins; 
    861   FOR_EACH_USER_START(LOCK_R) 
     864  UserStringList users; 
     865  FOR_EACH_PROTO_USER_START(LICQ_PPID, LOCK_R) 
    862866  { 
    863867    if (pUser->GetInGroup(GROUPS_SYSTEM, GROUP_VISIBLE_LIST) ) 
    864       uins.push_back(pUser->Uin()); 
    865   } 
    866   FOR_EACH_USER_END 
    867   CSrvPacketTcp* p = new CPU_GenericUinList(uins, ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_ADDxVISIBLExLIST); 
     868      users.push_back(strdup(pUser->IdString())); 
     869  } 
     870  FOR_EACH_PROTO_USER_END 
     871  CSrvPacketTcp* p = new CPU_GenericUinList(users, ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_ADDxVISIBLExLIST); 
    868872  gLog.Info("%sSending visible list (#%ld)...\n", L_SRVxSTR, p->Sequence()); 
    869873  SendEvent_Server(p); 
     
    874878void CICQDaemon::icqSendInvisibleList() 
    875879{ 
    876   UinList uins; 
    877   FOR_EACH_USER_START(LOCK_R) 
     880  UserStringList users; 
     881  FOR_EACH_PROTO_USER_START(LICQ_PPID, LOCK_R) 
    878882  { 
    879883    if (pUser->GetInGroup(GROUPS_SYSTEM, GROUP_INVISIBLE_LIST) ) 
    880       uins.push_back(pUser->Uin()); 
    881   } 
    882   FOR_EACH_USER_END 
    883  
    884   CSrvPacketTcp* p = new CPU_GenericUinList(uins, ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_ADDxINVISIBxLIST); 
     884      users.push_back(strdup(pUser->IdString())); 
     885  } 
     886  FOR_EACH_PROTO_USER_END 
     887 
     888  CSrvPacketTcp* p = new CPU_GenericUinList(users, ICQ_SNACxFAM_BOS, ICQ_SNACxBOS_ADDxINVISIBxLIST); 
    885889  gLog.Info("%sSending invisible list (#%ld)...\n", L_SRVxSTR, p->Sequence()); 
    886890  SendEvent_Server(p); 
  • branches/protocol_plugin_1_3_0/licq/src/icqpacket.cpp

    r3469 r3473  
    917917} 
    918918 
     919CPU_GenericUinList::CPU_GenericUinList(UserStringList &users, unsigned short family, unsigned short Subtype) 
     920  : CPU_CommonFamily(family, Subtype) 
     921{ 
     922  char len[2]; 
     923  len[1] = '\0'; 
     924  int nLen = 0; 
     925  UserStringList::iterator it; 
     926  for (it = users.begin(); it != users.end(); it++) 
     927    nLen += strlen(*it)+1; 
     928 
     929  char *contacts = new char[nLen+1]; 
     930  contacts[0] = '\0'; 
     931 
     932  for (it = users.begin(); it != users.end(); it++) { 
     933    len[0] = strlen(*it); 
     934    strcat(contacts, len); 
     935    strcat(contacts, *it); 
     936    free (*it); 
     937  } 
     938 
     939  m_nSize += strlen(contacts); 
     940  InitBuffer(); 
     941 
     942  buffer->Pack(contacts, strlen(contacts)); 
     943} 
     944 
    919945CPU_GenericUinList::CPU_GenericUinList(const char *szId, unsigned short family, unsigned short Subtype) 
    920946  : CPU_CommonFamily(family, Subtype) 
     
    17871813 
    17881814//-----ExportToServerList------------------------------------------------------- 
    1789 CPU_ExportToServerList::CPU_ExportToServerList(UinList &uins, 
     1815CPU_ExportToServerList::CPU_ExportToServerList(UserStringList &users, 
    17901816                                               unsigned short _nType) 
    17911817  : CPU_CommonFamily(ICQ_SNACxFAM_LIST, ICQ_SNACxLIST_ROSTxADD) 
     
    17951821  int nSize = 0; 
    17961822 
    1797   UinList::iterator i; 
    1798   for (i = uins.begin(); i != uins.end(); i++) 
    1799   { 
    1800     ICQUser *pUser = gUserManager.FetchUser(*i, LOCK_R); 
     1823  UserStringList::iterator i; 
     1824  for (i = users.begin(); i != users.end(); i++) 
     1825  { 
     1826    ICQUser *pUser = gUserManager.FetchUser(*i, LICQ_PPID, LOCK_R); 
    18011827    if (pUser) 
    18021828    { 
    1803       char szTmp[13]; 
    1804       szTmp[12] = '\0'; 
    1805  
    1806       nSize += snprintf(szTmp, 12, "%lu", *i); 
     1829      nSize += strlen(*i); 
    18071830      nSize += 10; 
    18081831 
     
    18201843  InitBuffer(); 
    18211844 
    1822   for (i = uins.begin(); i != uins.end(); i++) 
    1823   { 
    1824     char szUin[13]; 
    1825     szUin[12] = '\0'; 
     1845  for (i = users.begin(); i != users.end(); i++) 
     1846  { 
    18261847    int nLen; 
    18271848    int nAliasSize = 0; 
     
    18311852 
    18321853    // Save the SID 
    1833     ICQUser *u = gUserManager.FetchUser(*i, LOCK_W); 
     1854    ICQUser *u = gUserManager.FetchUser(*i, LICQ_PPID, LOCK_W); 
    18341855    switch (_nType) 
    18351856    { 
     
    18781899    SetExtraInfo(m_nGSID); 
    18791900 
    1880     nLen = snprintf(szUin, 12, "%lu", *i); 
     1901    nLen = strlen(*i); 
    18811902    buffer->PackUnsignedShortBE(nLen); 
    1882     buffer->Pack(szUin, nLen); 
     1903    buffer->Pack(*i, nLen); 
    18831904    buffer->PackUnsignedShortBE(m_nGSID); 
    18841905    buffer->PackUnsignedShortBE(m_nSID); 
     
    18971918    if (szUnicodeName) 
    18981919      delete [] szUnicodeName; 
     1920       
     1921    free(*i); 
    18991922  } 
    19001923}