Dchp thing fixed. yord.

git-svn-id: https://spexeah.com:8443/svn/Asuro@972 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
kieron 2020-07-11 01:05:33 +00:00
parent 739898068b
commit 717a642370

View File

@ -23,10 +23,14 @@ procedure DHCPDiscover();
implementation implementation
type
TFlipExclude = Array[0..255] of boolean;
PFlipExclude = ^TFlipExclude;
var var
XID : uint32; XID : uint32;
Socket : PUDPBindContext; Socket : PUDPBindContext;
FlipExclude : bitpacked Array[0..255] of boolean; FlipExclude : PFlipExclude;
procedure newOption(DHCPOptions : PDHCPOptions; Opcode : TDHCPOpCode; Data : void; Length : uint32; SwapEndian : Boolean); procedure newOption(DHCPOptions : PDHCPOptions; Opcode : TDHCPOpCode; Data : void; Length : uint32; SwapEndian : Boolean);
var var
@ -117,7 +121,7 @@ begin
HaveLen:= false; HaveLen:= false;
while (uint32(buffer) < uint32(bufferEnd)) do begin while (uint32(buffer) < uint32(bufferEnd)) do begin
if HaveLen then begin if HaveLen then begin
newOption(DHCPOptions, Opcode, void(buffer), Length, not FlipExclude[ord(Opcode)]); newOption(DHCPOptions, Opcode, void(buffer), Length, not FlipExclude^[ord(Opcode)]);
inc(buffer, Length); inc(buffer, Length);
HaveOp:= false; HaveOp:= false;
HaveLen:= false; HaveLen:= false;
@ -160,65 +164,66 @@ var
begin begin
tracer.push_trace('dhcp.register'); tracer.push_trace('dhcp.register');
console.outputln('DHCP', 'Register begin.'); console.outputln('DHCP', 'Register begin.');
FlipExclude:= PFlipExclude(kalloc(sizeof(TFlipExclude)));
for i:=0 to 255 do begin for i:=0 to 255 do begin
FlipExclude[i]:= false; FlipExclude^[i]:= false;
end; end;
// FlipExclude[ord(PAD)]:= true; FlipExclude^[ord(PAD)]:= true;
// FlipExclude[ord(SUBNET_MASK)]:= true; FlipExclude^[ord(SUBNET_MASK)]:= true;
// FlipExclude[ord(ROUTER)]:= true; FlipExclude^[ord(ROUTER)]:= true;
// FlipExclude[ord(TIME_SERVER)]:= true; FlipExclude^[ord(TIME_SERVER)]:= true;
// FlipExclude[ord(NAME_SERVER)]:= true; FlipExclude^[ord(NAME_SERVER)]:= true;
// FlipExclude[ord(DNS_SERVER)]:= true; FlipExclude^[ord(DNS_SERVER)]:= true;
// FlipExclude[ord(LOG_SERVER)]:= true; FlipExclude^[ord(LOG_SERVER)]:= true;
// FlipExclude[ord(COOKIE_SERVER)]:= true; FlipExclude^[ord(COOKIE_SERVER)]:= true;
// FlipExclude[ord(LPR_SERVER)]:= true; FlipExclude^[ord(LPR_SERVER)]:= true;
// FlipExclude[ord(IMPRESS_SERVER)]:= true; FlipExclude^[ord(IMPRESS_SERVER)]:= true;
// FlipExclude[ord(RESOURCE_LOCATION_SERVER)]:= true; FlipExclude^[ord(RESOURCE_LOCATION_SERVER)]:= true;
// FlipExclude[ord(HOST_NAME)]:= true; FlipExclude^[ord(HOST_NAME)]:= true;
// FlipExclude[ord(MERIT_DUMP_FILE)]:= true; FlipExclude^[ord(MERIT_DUMP_FILE)]:= true;
// FlipExclude[ord(DOMAIN_NAME)]:= true; FlipExclude^[ord(DOMAIN_NAME)]:= true;
// FlipExclude[ord(SWAP_SERVER)]:= true; FlipExclude^[ord(SWAP_SERVER)]:= true;
// FlipExclude[ord(ROOT_PATH)]:= true; FlipExclude^[ord(ROOT_PATH)]:= true;
// FlipExclude[ord(EXTENSIONS_PATH)]:= true; FlipExclude^[ord(EXTENSIONS_PATH)]:= true;
// FlipExclude[ord(END_VENDOR_OPTIONS)]:= true; FlipExclude^[ord(END_VENDOR_OPTIONS)]:= true;
// FlipExclude[ord(BROADCAST_ADDRESS)]:= true; FlipExclude^[ord(BROADCAST_ADDRESS)]:= true;
// FlipExclude[ord(ROUTER_SOLICITATION_ADDRESS)]:= true; FlipExclude^[ord(ROUTER_SOLICITATION_ADDRESS)]:= true;
// FlipExclude[ord(STATIC_ROUTE)]:= true; FlipExclude^[ord(STATIC_ROUTE)]:= true;
// FlipExclude[ord(NETWORK_INFORMATION_SERVICE_DOMAIN)]:= true; FlipExclude^[ord(NETWORK_INFORMATION_SERVICE_DOMAIN)]:= true;
// FlipExclude[ord(NETWORK_INFORMATION_SERVERS)]:= true; FlipExclude^[ord(NETWORK_INFORMATION_SERVERS)]:= true;
// FlipExclude[ord(NTP_SERVERS)]:= true; FlipExclude^[ord(NTP_SERVERS)]:= true;
// FlipExclude[ord(VENDOR_SPECIFIC_INFORMATION)]:= true; FlipExclude^[ord(VENDOR_SPECIFIC_INFORMATION)]:= true;
// FlipExclude[ord(NETBIOS_OVER_TCP_NAME_SERVER)]:= true; FlipExclude^[ord(NETBIOS_OVER_TCP_NAME_SERVER)]:= true;
// FlipExclude[ord(NETBIOS_OVER_TCP_DATAGRAM_DISTRIBUTION_SERVER)]:= true; FlipExclude^[ord(NETBIOS_OVER_TCP_DATAGRAM_DISTRIBUTION_SERVER)]:= true;
// FlipExclude[ord(NETBIOS_OVER_TCP_SCOPE)]:= true; FlipExclude^[ord(NETBIOS_OVER_TCP_SCOPE)]:= true;
// FlipExclude[ord(X_WINDOW_SYSTEM_FONT_SERVER)]:= true; FlipExclude^[ord(X_WINDOW_SYSTEM_FONT_SERVER)]:= true;
// FlipExclude[ord(X_WINDOW_SYSTEM_DISPLAY_MANAGER)]:= true; FlipExclude^[ord(X_WINDOW_SYSTEM_DISPLAY_MANAGER)]:= true;
// FlipExclude[ord(NETWORK_INFORMATION_SERVICE_PLUS_DOMAIN)]:= true; FlipExclude^[ord(NETWORK_INFORMATION_SERVICE_PLUS_DOMAIN)]:= true;
// FlipExclude[ord(NETWORK_INFORMATION_SERVICE_PLUS_SERVERS)]:= true; FlipExclude^[ord(NETWORK_INFORMATION_SERVICE_PLUS_SERVERS)]:= true;
// FlipExclude[ord(MOBILE_IP_HOME_AGENT)]:= true; FlipExclude^[ord(MOBILE_IP_HOME_AGENT)]:= true;
// FlipExclude[ord(SMTP_SERVER)]:= true; FlipExclude^[ord(SMTP_SERVER)]:= true;
// FlipExclude[ord(POP3_SERVER)]:= true; FlipExclude^[ord(POP3_SERVER)]:= true;
// FlipExclude[ord(NNTP_SERVER)]:= true; FlipExclude^[ord(NNTP_SERVER)]:= true;
// FlipExclude[ord(DEFAULT_WWW_SERVER)]:= true; FlipExclude^[ord(DEFAULT_WWW_SERVER)]:= true;
// FlipExclude[ord(DEFAULT_FINGER_SERVER)]:= true; FlipExclude^[ord(DEFAULT_FINGER_SERVER)]:= true;
// FlipExclude[ord(DEFAULT_IRC_SERVER)]:= true; FlipExclude^[ord(DEFAULT_IRC_SERVER)]:= true;
// FlipExclude[ord(STREETTALK_SERVER)]:= true; FlipExclude^[ord(STREETTALK_SERVER)]:= true;
// FlipExclude[ord(STDA_SERVER)]:= true; FlipExclude^[ord(STDA_SERVER)]:= true;
// FlipExclude[ord(REQUESTED_IP_ADDRESS)]:= true; FlipExclude^[ord(REQUESTED_IP_ADDRESS)]:= true;
// FlipExclude[ord(SERVER_IDENTIFIER)]:= true; FlipExclude^[ord(SERVER_IDENTIFIER)]:= true;
// FlipExclude[ord(PARAMETER_REQUEST_LIST)]:= true; FlipExclude^[ord(PARAMETER_REQUEST_LIST)]:= true;
// FlipExclude[ord(VENDOR_CLASS_IDENTIFIER)]:= true; FlipExclude^[ord(VENDOR_CLASS_IDENTIFIER)]:= true;
// FlipExclude[ord(CLIENT_IDENTIFIER)]:= true; FlipExclude^[ord(CLIENT_IDENTIFIER)]:= true;
// FlipExclude[ord(TFTP_SERVER_NAME)]:= true; FlipExclude^[ord(TFTP_SERVER_NAME)]:= true;
// FlipExclude[ord(BOOTFILE_NAME)]:= true; FlipExclude^[ord(BOOTFILE_NAME)]:= true;
// FlipExclude[ord(RELAY_AGENT_INFORMATION)]:= true; FlipExclude^[ord(RELAY_AGENT_INFORMATION)]:= true;
// FlipExclude[ord(NDS_SERVERS)]:= true; FlipExclude^[ord(NDS_SERVERS)]:= true;
// FlipExclude[ord(NDS_TREE_NAME)]:= true; FlipExclude^[ord(NDS_TREE_NAME)]:= true;
// FlipExclude[ord(NDS_CONTEXT)]:= true; FlipExclude^[ord(NDS_CONTEXT)]:= true;
// FlipExclude[ord(POSIX_TIMEZONE)]:= true; FlipExclude^[ord(POSIX_TIMEZONE)]:= true;
// FlipExclude[ord(TZ_TIMEZONE)]:= true; FlipExclude^[ord(TZ_TIMEZONE)]:= true;
// FlipExclude[ord(DOMAIN_SEARCH)]:= true; FlipExclude^[ord(DOMAIN_SEARCH)]:= true;
// FlipExclude[ord(CLASSLESS_STATIC_ROUTE)]:= true; FlipExclude^[ord(CLASSLESS_STATIC_ROUTE)]:= true;
Socket:= PUDPBindContext(Kalloc(sizeof(TUDPBindContext))); Socket:= PUDPBindContext(Kalloc(sizeof(TUDPBindContext)));
Socket^.Port:= 68; Socket^.Port:= 68;
Socket^.Callback:= @processPacket; Socket^.Callback:= @processPacket;