MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 1 | /* This sefun is to provide a replacement for the efuns query_ip_name() and |
| 2 | * query_ip_number(). |
| 3 | * Feel free to add it to your mudlibs, if you have much code relying on that. |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 4 | * |
| 5 | * The code of the helper functions originates from the driver sources, they |
| 6 | * are kept as-is intentionally. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 7 | */ |
| 8 | |
| 9 | #if ! __EFUN_DEFINED__(query_ip_name) |
| 10 | |
| 11 | #include <interactive_info.h> |
| 12 | |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 13 | // (actually not used in MG) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 14 | private varargs string _query_ip_name(object player) |
| 15 | { |
| 16 | object ob = player; |
| 17 | ob ||= efun::this_player(); |
| 18 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 19 | return efun::interactive_info(ob, II_IP_NAME); |
| 20 | } |
| 21 | |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 22 | private varargs string int_query_ip_number(object player) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 23 | { |
| 24 | object ob = player; |
| 25 | ob ||= efun::this_player(); |
| 26 | |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 27 | return efun::interactive_info(ob, II_IP_NUMBER); |
| 28 | } |
| 29 | |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 30 | // First tries to get the "real" IP (instead of the proxy's one), which was |
| 31 | // saved in the object by the login object. If that is unsuccessful, it falls |
| 32 | // back to the driver information of the IP the interactive object is |
| 33 | // connected to. |
| 34 | public string query_ip_number(object ob) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 35 | { |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 36 | ob = ob || this_player(); |
| 37 | if(objectp(ob) && interactive(ob)) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 38 | { |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 39 | string realip = ob->query_realip(); |
| 40 | if (sizeof(ob->query_realip())) |
| 41 | { |
| 42 | return realip; |
| 43 | } |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 44 | } |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 45 | return int_query_ip_number(ob); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 46 | } |
| 47 | |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 48 | /* Liefert zu einer gegebenen ipnum den Hostnamen. |
| 49 | * @param ipnum eine numerische ip-adresse oder ein interactive |
| 50 | * @return den Hostnamen der zu der angegebenen ip-adresse gehoert. |
| 51 | * wenn der hostname nicht bekannt ist, wird die ipadresse zurueckgegeben. |
| 52 | */ |
Zesstra | 2bffcd4 | 2020-02-04 22:17:55 +0100 | [diff] [blame] | 53 | public string query_ip_name(string|object ob) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 54 | { |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 55 | // First get the IP number (as string) for the object or a 0. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 56 | if ( !ob || objectp(ob) ) |
| 57 | ob=query_ip_number(ob); |
Zesstra | 7452d55 | 2020-02-04 22:21:56 +0100 | [diff] [blame^] | 58 | // then get its host name from the lookup & cache daemon. |
Zesstra | 4dbb988 | 2019-11-26 21:26:36 +0100 | [diff] [blame] | 59 | return "/p/daemon/iplookup"->host(ob); |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 60 | } |
| 61 | |
| 62 | #endif |
| 63 | |