#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
+#include <arpa/inet.h>
#include <time.h>
#include <string.h>
#include <sys/stat.h>
#include <limits.h>
#include "sysdep.h"
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
#include "citadel.h"
#include "server.h"
#include "dynloader.h"
#include "tools.h"
#include "citserver.h"
+#include "locate_host.h"
#include "msgbase.h"
#include "sysdep_decls.h"
#include "support.h"
DWORD uin;
char name[32];
DWORD status;
+ char host[26];
};
/* <ig> */
-/* ICQROOM is the name of the room in which each user's ICQ configuration
- * and contact lists will be stored. (It's a personal room.)
- */
-#define ICQROOM "My ICQ Config"
-
/* MIME types to use for storing ICQ stuff */
#define ICQMIME "application/x-citadel-icq" /* configuration */
#define ICQCLMIME "application/x-citadel-icq-cl" /* contact list */
char icq_rm[ROOMNAMELEN];
strcpy(hold_rm, CC->quickroom.QRname);
- MailboxName(icq_rm, &CC->usersupp, ICQROOM);
+ MailboxName(icq_rm, &CC->usersupp, CONFIGROOM);
strcpy(ThisICQ->icq_config, "");
if (getroom(&CC->quickroom, icq_rm) != 0) {
/* We want the last (and probably only) config in this room */
lprintf(9, "We're in <%s> looking for config\n",
CC->quickroom.QRname);
- CtdlForEachMessage(MSGS_LAST, 1, ICQMIME, CtdlICQ_Read_Config_Backend);
+ CtdlForEachMessage(MSGS_LAST, 1, ICQMIME, NULL,
+ CtdlICQ_Read_Config_Backend);
getroom(&CC->quickroom, hold_rm);
return;
}
fclose(fp);
/* this handy API function does all the work for us */
- CtdlWriteObject(ICQROOM, ICQMIME, temp, 1, 0, 1);
+ CtdlWriteObject(CONFIGROOM, ICQMIME, temp, &CC->usersupp, 0, 1, 0);
unlink(temp);
}
fclose(fp);
/* this handy API function does all the work for us */
- CtdlWriteObject(ICQROOM, ICQCLMIME, temp, 1, 0, 1);
+ CtdlWriteObject(CONFIGROOM, ICQCLMIME, temp, &CC->usersupp, 0, 1, 0);
unlink(temp);
}
char icq_rm[ROOMNAMELEN];
strcpy(hold_rm, CC->quickroom.QRname);
- MailboxName(icq_rm, &CC->usersupp, ICQROOM);
+ MailboxName(icq_rm, &CC->usersupp, CONFIGROOM);
strcpy(ThisICQ->icq_config, "");
if (getroom(&CC->quickroom, icq_rm) != 0) {
}
/* We want the last (and probably only) list in this room */
- CtdlForEachMessage(MSGS_LAST, 1, ICQCLMIME, CtdlICQ_Read_CL_Backend);
+ CtdlForEachMessage(MSGS_LAST, 1, ICQCLMIME, NULL,
+ CtdlICQ_Read_CL_Backend);
getroom(&CC->quickroom, hold_rm);
}
if (ThisICQ->icq_Sok < 0) return;
icq_ContClear();
+ CtdlICQ_Read_CL();
if (ThisICQ->icq_numcl) for (i=0; i<ThisICQ->icq_numcl; ++i) {
if (ThisICQ->icq_cl[i].uin > 0L) {
icq_ContAddUser(ThisICQ->icq_cl[i].uin);
icq_SendContactList();
- if (ThisICQ->icq_numcl) for (i=0; i<ThisICQ->icq_numcl; ++i) {
- if (ThisICQ->icq_cl[i].uin > 0L) {
- icq_SendInfoReq(ThisICQ->icq_cl[i].uin);
- }
- }
}
uin = extract_long(ThisICQ->icq_config, 0);
extract(pass, ThisICQ->icq_config, 1);
- lprintf(9, "Here's my config: %s\n", ThisICQ->icq_config);
-
if ( (uin > 0L) && (strlen(pass)>0) ) {
icq_Init(uin, pass);
if (icq_Connect("icq1.mirabilis.com", 4000) >= 0) {
icq_Login(STATUS_ONLINE);
- CtdlICQ_Refresh_Contact_List();
}
}
}
0, /* no session ID */
ThisICQ->icq_cl[i].name,
icq_ConvertStatus2Str(ThisICQ->icq_cl[i].status),
- " ", /* FIX add host */
+ ThisICQ->icq_cl[i].host,
" ", /* no client */
time(NULL), /* now? */
" ", /* no last command */
void CtdlICQ_Logged(void) {
- CtdlICQ_Read_CL();
CtdlICQ_Refresh_Contact_List();
}
void CtdlICQ_UserOnline(DWORD uin, DWORD status, DWORD ip,
DWORD port, DWORD realip) {
+ DWORD decoded_ip;
+
CtdlICQ_Status_Update(uin, status);
+ decoded_ip = ntohl(ip);
+ locate_host(CtdlICQ_CLent(uin)->host, (struct in_addr *)&decoded_ip);
}