summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/map/map.h3
-rw-r--r--src/map/pc.c6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/map/map.h b/src/map/map.h
index 9934fdf..dde7d7f 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -6,6 +6,7 @@
#include <stdarg.h>
#include <time.h>
#include <sys/time.h>
+#include <netinet/in.h>
#include "mmo.h"
#ifndef MAX
@@ -400,6 +401,8 @@ struct map_session_data
unsigned int flood_rates[0x220];
time_t packet_flood_reset_due;
int packet_flood_in;
+
+ in_addr_t ip;
};
struct npc_timerevent_list
diff --git a/src/map/pc.c b/src/map/pc.c
index 869d479..2b5dc3e 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -761,6 +761,8 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
struct guild *g;
int i;
unsigned long tick = gettick ();
+ struct sockaddr_in sai;
+ socklen_t sa_len = sizeof(struct sockaddr);
sd = map_id2sd (id);
if (sd == NULL)
@@ -963,6 +965,10 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
memset(sd->flood_rates, 0, sizeof(sd->flood_rates));
sd->packet_flood_reset_due = sd->packet_flood_in = 0;
+ // Obtain IP address (if they are still connected)
+ if (!getpeername(sd->fd, (struct sockaddr *)&sai, &sa_len))
+ sd->ip = sai.sin_addr.s_addr;
+
// message of the limited time of the account
if (connect_until_time != 0)
{ // don't display if it's unlimited or unknow value