aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/database_postgres.cc17
-rw-r--r--src/database_sqlite.cc16
-rw-r--r--src/hostcache.cc5
-rw-r--r--src/query.cc14
-rw-r--r--src/querymanager.hh2
5 files changed, 23 insertions, 31 deletions
diff --git a/src/database_postgres.cc b/src/database_postgres.cc
index bcadcea..7a676e2 100644
--- a/src/database_postgres.cc
+++ b/src/database_postgres.cc
@@ -1634,23 +1634,12 @@ bool GetCharacterEndpoints(TDatabase *Database, int AccountID, DynamicArray<TCha
int NumRows = PQntuples(Result);
for(int Row = 0; Row < NumRows; Row += 1){
- int WorldAddress;
- const char *CharacterName = GetResultText(Result, Row, 0);
- const char *WorldName = GetResultText(Result, Row, 1);
- const char *HostName = GetResultText(Result, Row, 2);
- if(HostName == NULL || !ResolveHostName(HostName, &WorldAddress)){
- LOG_ERR("Failed to resolve world \"%s\" host name \"%s\" for character \"%s\"",
- WorldName, HostName, CharacterName);
- continue;
- }
-
TCharacterEndpoint Character = {};
- StringBufCopy(Character.Name, CharacterName);
- StringBufCopy(Character.WorldName, WorldName);
- Character.WorldAddress = WorldAddress;
+ StringBufCopy(Character.Name, GetResultText(Result, Row, 0));
+ StringBufCopy(Character.WorldName, GetResultText(Result, Row, 1));
+ StringBufCopy(Character.WorldHost, GetResultText(Result, Row, 2));
Character.WorldPort = GetResultInt(Result, Row, 3);
Characters->Push(Character);
-
}
return true;
diff --git a/src/database_sqlite.cc b/src/database_sqlite.cc
index 35581a4..8523854 100644
--- a/src/database_sqlite.cc
+++ b/src/database_sqlite.cc
@@ -780,20 +780,10 @@ bool GetCharacterEndpoints(TDatabase *Database, int AccountID, DynamicArray<TCha
}
while(sqlite3_step(Stmt) == SQLITE_ROW){
- int WorldAddress;
- const char *CharacterName = (const char*)sqlite3_column_text(Stmt, 0);
- const char *WorldName = (const char*)sqlite3_column_text(Stmt, 1);
- const char *HostName = (const char*)sqlite3_column_text(Stmt, 2);
- if(HostName == NULL || !ResolveHostName(HostName, &WorldAddress)){
- LOG_ERR("Failed to resolve world \"%s\" host name \"%s\" for character \"%s\"",
- WorldName, HostName, CharacterName);
- continue;
- }
-
TCharacterEndpoint Character = {};
- StringBufCopy(Character.Name, CharacterName);
- StringBufCopy(Character.WorldName, WorldName);
- Character.WorldAddress = WorldAddress;
+ StringBufCopy(Character.Name, (const char*)sqlite3_column_text(Stmt, 0));
+ StringBufCopy(Character.WorldName, (const char*)sqlite3_column_text(Stmt, 1));
+ StringBufCopy(Character.WorldHost, (const char*)sqlite3_column_text(Stmt, 2));
Character.WorldPort = sqlite3_column_int(Stmt, 3);
Characters->Push(Character);
}
diff --git a/src/hostcache.cc b/src/hostcache.cc
index 23be08f..9fda094 100644
--- a/src/hostcache.cc
+++ b/src/hostcache.cc
@@ -58,7 +58,10 @@ static bool DoResolveHostName(const char *HostName, int *OutAddr){
}
bool ResolveHostName(const char *HostName, int *OutAddr){
- ASSERT(HostName != NULL && !StringEmpty(HostName));
+ if(HostName == NULL || StringEmpty(HostName)){
+ return false;
+ }
+
THostCacheEntry *Entry = NULL;
int LeastRecentlyUsedIndex = 0;
int LeastRecentlyUsedTime = g_CachedHostNames[0].ResolveTime;
diff --git a/src/query.cc b/src/query.cc
index b9484c6..c4d81a1 100644
--- a/src/query.cc
+++ b/src/query.cc
@@ -587,8 +587,18 @@ static void LoginAccountTx(TDatabase *Database, TQuery *Query,
for(int i = 0; i < NumCharacters; i += 1){
Response->WriteString(Characters[i].Name);
Response->WriteString(Characters[i].WorldName);
- Response->Write32BE((uint32)Characters[i].WorldAddress);
- Response->Write16((uint16)Characters[i].WorldPort);
+
+ int WorldAddress;
+ if(ResolveHostName(Characters[i].WorldHost, &WorldAddress)){
+ Response->Write32BE(WorldAddress);
+ Response->Write16(Characters[i].WorldPort);
+ }else{
+ LOG_ERR("Failed to resolve world \"%s\" host name \"%s\" for character \"%s\"",
+ Characters[i].WorldName, Characters[i].WorldHost, Characters[i].Name);
+
+ Response->Write32BE(0);
+ Response->Write16(0);
+ }
}
Response->Write16((uint16)(Account.PremiumDays + Account.PendingPremiumDays));
QueryFinishResponse(Query);
diff --git a/src/querymanager.hh b/src/querymanager.hh
index 1d4b36b..1b90a0d 100644
--- a/src/querymanager.hh
+++ b/src/querymanager.hh
@@ -801,7 +801,7 @@ struct TAccountBuddy{
struct TCharacterEndpoint{
char Name[30];
char WorldName[30];
- int WorldAddress;
+ char WorldHost[100];
int WorldPort;
};