Difference between revisions of "Server:MacSupport"
(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: | ||
== 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 | == 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 00: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=0x0021OP_ChatMessage=0x0016- OP_LoginAccepted=0x0400
- OP_LoginComplete=0x8800
- OP_ServerName=0x4900
- OP_LoginBanner=0x5200
OP_ServerListResponse=0x004aOP_Poll=0x0029OP_EnterChat=0x000fOP_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.