Add NS-USBloader network-stopper feature
and also a bit fixed and corrected WaitSendNetworkData() function at network_util.cpp.
This commit is contained in:
parent
dd2390f8c6
commit
eed1817688
@ -23,7 +23,7 @@ SOFTWARE.
|
||||
|
||||
namespace netInstStuff {
|
||||
void OnUnwound();
|
||||
void sendExitCommands();
|
||||
void sendExitCommands(std::string url);
|
||||
void installTitleNet(std::vector<std::string> ourUrlList, int ourStorage, std::vector<std::string> urlListAltNames, std::string ourSource);
|
||||
std::vector<std::string> OnSelected();
|
||||
}
|
@ -78,6 +78,8 @@ namespace tin::network
|
||||
int StreamDataRange(size_t offset, size_t size, std::function<size_t (u8* bytes, size_t size)> streamFunc);
|
||||
};
|
||||
|
||||
void NSULDrop(std::string url);
|
||||
|
||||
size_t WaitReceiveNetworkData(int sockfd, void* buf, size_t len);
|
||||
size_t WaitSendNetworkData(int sockfd, void* buf, size_t len);
|
||||
}
|
@ -12,6 +12,7 @@ namespace inst::util {
|
||||
bool removeDirectory(std::string dir);
|
||||
bool copyFile(std::string inFile, std::string outFile);
|
||||
std::string formatUrlString(std::string ourString);
|
||||
std::string formatUrlLink(std::string ourString);
|
||||
std::string shortenString(std::string ourString, int ourLength, bool isFile);
|
||||
std::string readTextFromFile(std::string ourFile);
|
||||
std::string softwareKeyboard(std::string guideText, std::string initialText, int LenMax);
|
||||
|
@ -108,15 +108,14 @@ namespace netInstStuff{
|
||||
curl_global_cleanup();
|
||||
}
|
||||
|
||||
void sendExitCommands()
|
||||
void sendExitCommands(std::string url)
|
||||
{
|
||||
LOG_DEBUG("Telling the server we're done installing\n");
|
||||
// Send 1 byte ack to close the server, OG tinfoil compatibility
|
||||
u8 ack = 0;
|
||||
tin::network::WaitSendNetworkData(m_clientSocket, &ack, sizeof(u8));
|
||||
// Send 'DEAD\r\n' so ns-usbloader knows we're done
|
||||
u8 nsUsbAck [6] = {0x44,0x45,0x41,0x44,0x0D,0x0A};
|
||||
tin::network::WaitSendNetworkData(m_clientSocket, &nsUsbAck, sizeof(u8) * 6);
|
||||
// Send 'DROP' header so ns-usbloader knows we're done
|
||||
tin::network::NSULDrop(url);
|
||||
}
|
||||
|
||||
void installTitleNet(std::vector<std::string> ourUrlList, int ourStorage, std::vector<std::string> urlListAltNames, std::string ourSource)
|
||||
@ -189,7 +188,7 @@ namespace netInstStuff{
|
||||
inst::util::setClockSpeed(2, previousClockValues[2]);
|
||||
}
|
||||
|
||||
sendExitCommands();
|
||||
sendExitCommands(inst::util::formatUrlLink(ourUrlList[0]));
|
||||
OnUnwound();
|
||||
|
||||
if(nspInstalled) {
|
||||
|
@ -156,8 +156,12 @@ namespace inst::ui {
|
||||
|
||||
void netInstPage::onInput(u64 Down, u64 Up, u64 Held, pu::ui::Touch Pos) {
|
||||
if (Down & KEY_B) {
|
||||
if (this->menu->GetItems().size() > 0) {}
|
||||
netInstStuff::sendExitCommands();
|
||||
if (this->menu->GetItems().size() > 0){
|
||||
if (this->selectedUrls.size() == 0) {
|
||||
this->selectTitle(this->menu->GetSelectedIndex());
|
||||
}
|
||||
netInstStuff::sendExitCommands(inst::util::formatUrlLink(this->selectedUrls[0]));
|
||||
}
|
||||
netInstStuff::OnUnwound();
|
||||
mainApp->LoadLayout(mainApp->mainPage);
|
||||
}
|
||||
@ -180,8 +184,6 @@ namespace inst::ui {
|
||||
if (Down & KEY_PLUS) {
|
||||
if (this->selectedUrls.size() == 0) {
|
||||
this->selectTitle(this->menu->GetSelectedIndex());
|
||||
this->startInstall(false);
|
||||
return;
|
||||
}
|
||||
this->startInstall(false);
|
||||
}
|
||||
|
@ -245,15 +245,48 @@ namespace tin::network
|
||||
|
||||
size_t WaitSendNetworkData(int sockfd, void* buf, size_t len)
|
||||
{
|
||||
errno = 0;
|
||||
int ret = 0;
|
||||
size_t written = 0;
|
||||
|
||||
while ((((ret = send(sockfd, (u8*)buf + written, len - written, 0)) > 0 && (written += ret) < len) || errno == EAGAIN))
|
||||
{
|
||||
errno = 0;
|
||||
}
|
||||
while (written < len)
|
||||
{
|
||||
if (hidKeysDown(CONTROLLER_P1_AUTO) & KEY_B) // Break if user clicks 'B'
|
||||
break;
|
||||
|
||||
errno = 0;
|
||||
ret = send(sockfd, (u8*)buf + written, len - written, 0);
|
||||
|
||||
if (ret < 0){ // If error
|
||||
if (errno == EWOULDBLOCK || errno == EAGAIN){ // Is it because other side is busy?
|
||||
sleep(5);
|
||||
continue;
|
||||
}
|
||||
break; // No? Die.
|
||||
}
|
||||
|
||||
written += ret;
|
||||
}
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
void NSULDrop(std::string url)
|
||||
{
|
||||
CURL* curl = curl_easy_init();
|
||||
|
||||
if (!curl)
|
||||
{
|
||||
THROW_FORMAT("Failed to initialize curl\n");
|
||||
}
|
||||
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DROP");
|
||||
curl_easy_setopt(curl, CURLOPT_USERAGENT, "tinfoil");
|
||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 50);
|
||||
|
||||
curl_easy_perform(curl); // ignore returning value
|
||||
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
}
|
@ -140,6 +140,14 @@ namespace inst::util {
|
||||
return finalString;
|
||||
}
|
||||
|
||||
std::string formatUrlLink(std::string ourString){
|
||||
std::string::size_type pos = ourString.find('/');
|
||||
if (pos != std::string::npos)
|
||||
return ourString.substr(0, pos);
|
||||
else
|
||||
return ourString;
|
||||
}
|
||||
|
||||
std::string shortenString(std::string ourString, int ourLength, bool isFile) {
|
||||
std::filesystem::path ourStringAsAPath = ourString;
|
||||
std::string ourExtension = ourStringAsAPath.extension().string();
|
||||
|
Reference in New Issue
Block a user