sefun query_ip_number an driver sefun angeglichen
Die sefun verhaelt sich nun wie die vom driver gelieferte
sefun und interactive_info(...,II_IP_NUMBER), d.h.
es wird garantiert ein string als Ergebnis geliefert und
es ist ein Fehler, wenn das Objekt nicht existiert oder
nicht interatkiv ist.
Ausserdem Kommentare ergaenzt.
Change-Id: I8131e667a9702b505e6817136c087ebb626bca3d
diff --git a/secure/simul_efun/query_ip_name.c b/secure/simul_efun/query_ip_name.c
index 222fd26..4ad213e 100644
--- a/secure/simul_efun/query_ip_name.c
+++ b/secure/simul_efun/query_ip_name.c
@@ -1,12 +1,16 @@
/* This sefun is to provide a replacement for the efuns query_ip_name() and
* query_ip_number().
* Feel free to add it to your mudlibs, if you have much code relying on that.
+ *
+ * The code of the helper functions originates from the driver sources, they
+ * are kept as-is intentionally.
*/
#if ! __EFUN_DEFINED__(query_ip_name)
#include <interactive_info.h>
+// (actually not used in MG)
private varargs string _query_ip_name(object player)
{
object ob = player;
@@ -15,7 +19,7 @@
return efun::interactive_info(ob, II_IP_NAME);
}
-private varargs string _query_ip_number(object player)
+private varargs string int_query_ip_number(object player)
{
object ob = player;
ob ||= efun::this_player();
@@ -23,22 +27,35 @@
return efun::interactive_info(ob, II_IP_NUMBER);
}
-// * Herkunfts-Ermittlung
-string query_ip_number(object ob)
+// First tries to get the "real" IP (instead of the proxy's one), which was
+// saved in the object by the login object. If that is unsuccessful, it falls
+// back to the driver information of the IP the interactive object is
+// connected to.
+public string query_ip_number(object ob)
{
- ob= ob || this_player();
- if (!objectp(ob) || !interactive(ob)) return 0;
- if(ob->query_realip() && ob->query_realip()!="")
+ ob = ob || this_player();
+ if(objectp(ob) && interactive(ob))
{
- return ob->query_realip();
+ string realip = ob->query_realip();
+ if (sizeof(ob->query_realip()))
+ {
+ return realip;
+ }
}
- return _query_ip_number(ob);
+ return int_query_ip_number(ob);
}
+/* Liefert zu einer gegebenen ipnum den Hostnamen.
+ * @param ipnum eine numerische ip-adresse oder ein interactive
+ * @return den Hostnamen der zu der angegebenen ip-adresse gehoert.
+ * wenn der hostname nicht bekannt ist, wird die ipadresse zurueckgegeben.
+ */
public string query_ip_name(string|object ob)
{
+ // First get the IP number (as string) for the object or a 0.
if ( !ob || objectp(ob) )
ob=query_ip_number(ob);
+ // then get its host name from the lookup & cache daemon.
return "/p/daemon/iplookup"->host(ob);
}