/**
* Performs a DNS lookup on an IP address.
*
* @param address IP address to look up.
* @return Returns a domain name.
* @author Ben Forta (ben@forta.com)
* @version 1, December 19, 2001
*/
// Variables
var iaclass="";
var addr="";
// Init class
iaclass=CreateObject("java", "java.net.InetAddress");
// Get address
addr=iaclass.getByName(arguments.address);
for(i=1; i lte arrayLen(variables.activeusers);i=i+1){
if(variables.activeusers[i].clientid is arguments.clientid) ret=variables.activeusers[i];
}
if(not structKeyExists(variables,"activeusers")) variables.activeusers=arrayNew(1);
for(j=1; j lte listLen(variables.botList); j=j+1){
skipUpdate = skipUpdate + findNoCase(listGetAt(variables.botList,j),arguments.whoson.UserAgent,1);
}
for(j=1; j lte listLen(variables.ignorePages); j=j+1){
skipUpdate = skipUpdate + findNoCase(listGetAt(variables.ignorePages,j),arguments.whoson.CurrentPage,1);
}
// ===================================================================
// Perform a sanity check: Does this IP have more than 10 hits logged?
if(arrayLen(ipBlockList)){
for(i=1; i lte arrayLen(ipBlockList); i=i+1){
if(ipBlockList[i].ip is arguments.whoson.ip) skipIPCheck=skipIPCheck+1;
}
}
if(skipIPCheck is 0){
for(j=1; j lte arrayLen(variables.activeusers); j=j+1){
if(variables.activeusers[j].ip is arguments.whoson.ip) n=n+1;
}
if(n gte variables.ipBlockListThreshhold){
// Add this IP to the ipBlockList
tempHistory=structNew();
tempHistory.ip=arguments.whoson.ip;
arrayAppend(variables.ipBlockList,tempHistory);
skipUpdate=skipUpdate+n;
for(i=arrayLen(variables.activeusers); i gt 0; i=i-1){
arrayDeleteAt(variables.activeusers,i);
}
// Update the Max counts to reflect the correct number
variables.users.maxcount=variables.users.maxcount-(variables.ipBlockListThreshold-1);
// Purge out info in WhosOnCFCStats, if it exists
if(structKeyExists(variables,"whosonstats")){
result=variables.whosonstats.purgeByIPAddress(thisIP=arguments.whoson.ip);
}
}
}
skipUpdate=skipUpdate+skipIPCheck;
// END OF IP CHECKING
// ===================================================================
n=0;
// Reset the userCount if we purged out any data
userCount=arrayLen(variables.activeusers);
// Purge out old entries
if(userCount gt 0){
for(n=userCount; n gte 1; n=n-1){
if(DateDiff("n",variables.ActiveUsers[n].LastUpdated,Now()) gte WhosOn.defaultTimeout){// gte X where X=seconds to wait before purging from struct
ArrayDeleteAt(variables.ActiveUsers,n);
}
}
userCount=arrayLen(variables.activeusers);
}
if((skipUpdate is 0) or (arguments.showBots is true)){
// See if we can find the client in active user array
for(n=1; n lte userCount; n=n+1){
if(variables.ActiveUsers[n].ClientID is WhosOn.thisClient) updateFlag=n;
}
// Insert / Update a client
if(updateFlag is 0){
userData=structNew();
// This defines the information tracked on your user
userData.UserID=WhosOn.thisUser;
userData.ClientID=WhosOn.thisClient;
userData.Created=Now();
userData.LastUpdated=Now();
userData.Referer=WhosOn.Referer;
userData.IP=WhosOn.IP;
userData.HostName=getHostName(address=WhosOn.IP);
if(arguments.geoTrack){
gInfo=getGeoInfo(address=whoson.ip);
userData.Coords=gInfo.coordinates;
userData.Country=gInfo.country;
userData.City=gInfo.local;
}
userData.CurrentPage=WhosOn.Prefix & WhosOn.ServerName & WhosOn.CurrentPage;
//Joe Danziger requested MOD
userData.EntryPage=userData.CurrentPage;
userData.PageCount=1;
if(len(WhosOn.QueryString)) userData.CurrentPage=userData.CurrentPage & "?#WhosOn.QueryString#";
userData.UserAgent=WhosOn.UserAgent;
if(arguments.pagehistory){
userData.PageHistory=ArrayNew(1);
tempHistory=structNew();
tempHistory.Page=userData.CurrentPage;
tempHistory.PageTime=0;
ArrayAppend(userData.PageHistory,tempHistory);
}
arrayAppend(variables.activeusers,userData);
variables.structKeys=structKeyList(userData);
userCount=arrayLen(variables.activeusers);
if(structKeyExists(variables,"whosonstats")){
variables.whosonstats.updateClient(requestData=userData);
}
} else {
// This defines the information updated after a user has been created
variables.activeusers[updateFlag].UserID=WhosOn.thisUser;
variables.activeusers[updateFlag].IP=WhosOn.IP;
variables.activeusers[updateFlag].CurrentPage=WhosOn.Prefix & WhosOn.ServerName & WhosOn.CurrentPage;
if(len(WhosOn.QueryString)) variables.activeusers[updateFlag].CurrentPage = variables.activeusers[updateFlag].CurrentPage & "?#WhosOn.QueryString#";
if(arguments.pagehistory){
result=arrayLen(variables.activeusers[updateFlag].PageHistory);
variables.activeusers[updateFlag].PageHistory[result].PageTime=DateDiff("s",variables.activeusers[updateFlag].LastUpdated,Now());
tempHistory=structNew();
tempHistory.Page=variables.activeusers[updateFlag].CurrentPage;
tempHistory.PageTime=0;
ArrayAppend(variables.activeusers[updateFlag].PageHistory,tempHistory);
// Clean the user history
result=arrayLen(variables.activeusers[updateFlag].PageHistory);
n=0;
for(j=result; j gt 0; j=j-1){
n=n+variables.activeusers[updateFlag].PageHistory[j].PageTime;
if(n gt variables.storeHistory*60) arrayDeleteAt(variables.activeusers[updateFlag].PageHistory,j);
}
}
variables.activeusers[updateFlag].PageCount+=1;
variables.activeusers[updateFlag].LastUpdated=Now();
if(structKeyExists(variables,"whosonstats")){
result=variables.whosonstats.updateClient(requestData=variables.activeusers[updateFlag]);
}
}
}