Q Algorithm [ [1]Construct ] [ Algorithm ] All packets: { If there is a q construct in the path: Skip to "All packets with q constructs" If the packet entered the server from an UDP port: { Append ,qAU,SERVERLOGIN Quit q processing } If the packet entered the server from an unverified connection and has been converted to TCPXX format (per current validation algorithm): { (All packets not deemed "OK" from an unverified connection should never make it here.) Append ,qAX,FROMCALL Skip to "All packets with q constructs" } If packet entered the server from a verified connection: { If header is terminated with ,I: { If the VIACALL preceding the ,I matches the login: Change from ,VIACALL,I to ,qAR,VIACALL Else Change from ,VIACALL,I to ,qAr,VIACALL } Else If the FROMCALL matches the login: Append ,qAC,FROMCALL Else Append ,qAS,login Skip to "All packets with q constructs" } If packet entered the server from an outbound connection (to another server's port 1313, for instance): { If header is terminated with ,I: Change from ,VIACALL,I to ,qAr,VIACALL Else Append ,qAS,IPADDR (IPADDR is an 8 character hex representation of the IP address of the remote server) } } All packets with q constructs: { if ,qAZ, is the q construct: { Dump to the packet to the reject log Quit processing the packet } If ,SERVERLOGIN or IGATECALL is found after the q construct: { Dump to the loop log with the sender's IP address for identification Quit processing the packet } If the packet is from a verified port and the login is found after the q construct but is not the LAST VIACALL: { Dump to the loop log with the sender's IP address for identification Quit processing the packet } If trace is on, the q construct is qAI, or the FROMCALL is on the server's trace list: { If the packet is from a verified port where the login is not found after the q construct: Append ,login Append ,SERVERLOGIN } }