Difference between revisions of "Server:MacSupport"

From The Al`Kabor Project Wiki
Jump to navigation Jump to search
(Created page with "Mac Clients do not have a server select option. As a result, server selection is passed to them after successful login. While there is a way to have the client select a serv...")
 
Line 1: Line 1:
Mac Clients do not have a server select option.  As a result, server selection is passed to them after successful login.  While there is a way to have the client select a server based on an Apple IPC mechanism, the server is currently hardcoded as a configuration setting in `login.ini` as well as the `loginserversettings` table.


== Opcodes ==
== Opcodes ==
Line 23: Line 22:
* <s>OP_PollResponse=0x0011</s>
* <s>OP_PollResponse=0x0011</s>


When a client first authenticates to the loginserver, it sends the <pre>OP_LoginOSX</pre> opcode followed by the username/password and eqworld-52.989studios.com.
== Login ==
When a client first authenticates to the loginserver, it sends the **OP_LoginOSX** opcode followed by the username/password and eqworld-52.989studios.com.  This url is no longer used but rather parsed server-side to validate mac clients (see [https://github.com/EQArchives/EQMacEmu/blob/09da8370ff01ea671fbc772511579b8d4876741e/loginserver/client.cpp#L62 OP_LoginOSX] and [https://github.com/EQArchives/EQMacEmu/blob/09da8370ff01ea671fbc772511579b8d4876741e/loginserver/client.cpp#L245 handle_login] behavior).
 
The key difference between a Windows Client and OSX client successfully authenticating is the following [https://github.com/EQArchives/EQMacEmu/blob/09da8370ff01ea671fbc772511579b8d4876741e/loginserver/client.cpp#L337|block of code] that sends an extra packet:
<pre>
string buf = server.options.GetNetworkIP();
auto outapp2 = new EQApplicationPacket(OP_ServerName, (uint32)buf.length() + 1);
strncpy((char*)outapp2->pBuffer, buf.c_str(), buf.length() + 1);
connection->QueuePacket(outapp2);
delete outapp2;
sentsessioninfo = true;
</pre>
 
_GetNetworkIP()_ pulls the world server's URL from you login.ini file and/or the database as mentioned previously.  This leaves you with a packet containing "0x4900" and your server's URL which the client will then use to reach server select.
 
== Server Selection ==
Mac Clients do not have a server select option.  As a result, server selection is passed to them after successful login.  While there is a way to have the client select a server based on an Apple IPC mechanism, the server is currently hardcoded as a configuration setting in `login.ini` as well as the `loginserversettings` table.

Revision as of 01:06, 22 December 2023

Opcodes

All opcodes are found at login_opcodes_oldver.conf and listed below for convenience:

  • OP_SessionReady=0x5900
  • OP_LoginOSX=0x8e00
  • OP_LoginPC=0x0100
  • OP_ClientError=0x0200
  • OP_ServerListRequest=0x4600
  • OP_PlayEverquestRequest=0x4700
  • OP_LoginUnknown1=0x4800
  • OP_LoginUnknown2=0x4A00
  • OP_PlayEverquestResponse=0x0021
  • OP_ChatMessage=0x0016
  • OP_LoginAccepted=0x0400
  • OP_LoginComplete=0x8800
  • OP_ServerName=0x4900
  • OP_LoginBanner=0x5200
  • OP_ServerListResponse=0x004a
  • OP_Poll=0x0029
  • OP_EnterChat=0x000f
  • OP_PollResponse=0x0011

Login

When a client first authenticates to the loginserver, it sends the **OP_LoginOSX** opcode followed by the username/password and eqworld-52.989studios.com. This url is no longer used but rather parsed server-side to validate mac clients (see OP_LoginOSX and handle_login behavior).

The key difference between a Windows Client and OSX client successfully authenticating is the following of code that sends an extra packet:

string buf = server.options.GetNetworkIP();
auto outapp2 = new EQApplicationPacket(OP_ServerName, (uint32)buf.length() + 1);
strncpy((char*)outapp2->pBuffer, buf.c_str(), buf.length() + 1);
connection->QueuePacket(outapp2);
delete outapp2;
sentsessioninfo = true;

_GetNetworkIP()_ pulls the world server's URL from you login.ini file and/or the database as mentioned previously. This leaves you with a packet containing "0x4900" and your server's URL which the client will then use to reach server select.

Server Selection

Mac Clients do not have a server select option. As a result, server selection is passed to them after successful login. While there is a way to have the client select a server based on an Apple IPC mechanism, the server is currently hardcoded as a configuration setting in `login.ini` as well as the `loginserversettings` table.