Difference between revisions of "Server:MacSupport"

From The Al`Kabor Project Wiki
Jump to navigation Jump to search
Line 23: Line 23:


== Login ==
== 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).
When a client first authenticates to the loginserver, it sends the <span style="font-weight:bold">OP_LoginOSX</span> 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:
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:
Line 35: Line 35:
</pre>
</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.
<span style="font-weight:bold">GetNetworkIP()</span> 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 ==
== 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.
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:07, 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.