Skip to content

Commit

Permalink
Fix WDS DHCP
Browse files Browse the repository at this point in the history
  • Loading branch information
LipkeGu committed Feb 2, 2019
1 parent c3077bd commit ff7300f
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 19 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -233,3 +233,4 @@ $RECYCLE.BIN/
BINL-Server.VC.db
*.opendb
*.db
*.com
Binary file added BINL-Server/Boot/x86/wdsnbp.com
Binary file not shown.
6 changes: 3 additions & 3 deletions BINL-Server/src/Client.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,14 @@ class Client
uint32_t GetReferralServer();

WDSNBP_OPTION_NEXTACTION NextAction = APPROVAL;
uint8_t ActionDone = 0;
uint8_t ActionDone = 1;
uint16_t PollIntervall = 10;
uint16_t RetryCount = 10;
uint32_t requestid = 1;

uint32_t referralIP = 0;
std::string AdminMessage = "";
bool ServerSelection = false;
std::string AdminMessage = "BINL-Server 0.2 - FBLipke.de";
bool ServerSelection = true;
} WDS;

struct RBCP {
Expand Down
36 changes: 24 additions & 12 deletions BINL-Server/src/Connection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,18 @@ void Connection::Handle_Request(ServerType type, sockaddr_in& remote, const char
break;
case TFTP_ERR:
this->Handle_ERR_Request(c, packet, this->serverType);

break;
default:
c->TFTP_CLIENT.SetTFTPState(TFTP_Done);
break;
}

if (c->TFTP_CLIENT.GetTFTPState() == TFTP_Done || c->TFTP_CLIENT.GetTFTPState() == TFTP_Error)
this->clients->erase(*c->id);
break;
default:
break;
}
clients->erase(*c->id);

delete packet;
}

Expand Down Expand Up @@ -233,13 +234,6 @@ void Connection::Handle_ACK_Request(Client* client, Packet* packet, ServerType t
if (client->TFTP_CLIENT.GetBytesRead() == client->TFTP_CLIENT.GetBytesToRead())
client->TFTP_CLIENT.SetTFTPState(TFTP_Done);
}


if (client->TFTP_CLIENT.GetTFTPState() == TFTP_Done || client->TFTP_CLIENT.GetTFTPState() == TFTP_Error)
{
delete client->file;
this->clients->erase(*client->id);
}
}

void Connection::Handle_RRQ_Request(Client* client, Packet* packet, ServerType type)
Expand Down Expand Up @@ -383,8 +377,7 @@ void Connection::Handle_DHCP_Request(Client* client, Packet* packet, ServerType

/* Client Boot file */
ClearBuffer(&client->Data->GetBuffer()[108], 128);
sprintf(&client->Data->GetBuffer()[108], "%s", \
client->DHCP_CLIENT.GetBootfile(INTEL_X86).c_str());
sprintf(&client->Data->GetBuffer()[108], "%s", DHCP_BOOTFILE);

/* MAGIC COOKIE */
client->Data->Write(&packet->GetBuffer()[BOOTP_OFFSET_COOKIE], sizeof(uint32_t));
Expand Down Expand Up @@ -412,6 +405,25 @@ void Connection::Handle_DHCP_Request(Client* client, Packet* packet, ServerType
if (client->GetBCDfile().size() != 0 && this->serverType == TYPE_BINL)
client->Data->Add_DHCPOption(DHCP_Option(252, client->GetBCDfile()));

// WDS Option -> Used by WDSNBP
std::vector<DHCP_Option> wdsOptions;
wdsOptions.emplace_back(WDSBP_OPT_NEXT_ACTION, static_cast<unsigned char>(client->DHCP_CLIENT.WDS.GetNextAction()));
wdsOptions.emplace_back(WDSBP_OPT_REQUEST_ID, static_cast<unsigned long>(BS32(client->DHCP_CLIENT.WDS.GetRequestID())));
wdsOptions.emplace_back(WDSBP_OPT_POLL_INTERVAL, static_cast<unsigned short>(BS16(client->DHCP_CLIENT.WDS.GetPollInterval())));
wdsOptions.emplace_back(WDSBP_OPT_POLL_RETRY_COUNT, static_cast<unsigned short>(BS16(client->DHCP_CLIENT.WDS.GetRetryCount())));

if (client->DHCP_CLIENT.WDS.GetNextAction() == REFERRAL)
{
wdsOptions.emplace_back(WDSBP_OPT_REFERRAL_SERVER, client->DHCP_CLIENT.WDS.GetReferralServer());
wdsOptions.emplace_back(WDSBP_OPT_ALLOW_SERVER_SELECTION, static_cast<unsigned char>(1));
}

wdsOptions.emplace_back(WDSBP_OPT_ACTION_DONE, static_cast<unsigned char>(client->DHCP_CLIENT.WDS.ActionDone));

if (client->DHCP_CLIENT.WDS.GetWDSMessage().size() != 0)
wdsOptions.emplace_back(WDSBP_OPT_MESSAGE, client->DHCP_CLIENT.WDS.GetWDSMessage());

client->Data->Add_DHCPOption(DHCP_Option(250, wdsOptions));
/* DHCP Option "end of Packet" */
client->Data->Commit();

Expand Down
8 changes: 4 additions & 4 deletions BINL-Server/src/Defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ enum WDSNBP_Options
WDSBP_OPT_ACTION_DONE = 14,
WDSBP_OPT_ALLOW_SERVER_SELECTION = 15,
WDSBP_OPT_SERVER_FEATURES = 16,
WDSBP_OPT_END = 255
WDSBP_OPT_END = 0xff
};

enum WDSNBP_OPTION_NEXTACTION
{
APPROVAL = 1,
REFERRAL = 3,
ABORT = 5
APPROVAL = 0x01,
REFERRAL = 0x03,
ABORT = 0x05
};

enum LogType
Expand Down

0 comments on commit ff7300f

Please sign in to comment.