@@ -274,7 +274,7 @@ static DWORD CALLBACK Buddy_GetBestDerpRegionThread(LPVOID Arg)
274
274
uint8_t Buffer [64 * 1024 ];
275
275
size_t BufferSize = Buddy_DownloadDerpMap (Buddy -> HttpSession , Buffer , sizeof (Buffer ));
276
276
277
- JsonObject * Json = JsonObject_Parse ((char * )Buffer , (int )BufferSize );
277
+ JsonObject * Json = BufferSize ? JsonObject_Parse ((char * )Buffer , (int )BufferSize ) : NULL ;
278
278
JsonObject * Regions = JsonObject_GetObject (Json , JsonCSTR ("Regions" ));
279
279
JsonIterator * Iterator = JsonObject_GetIterator (Regions );
280
280
if (Iterator )
@@ -2373,6 +2373,7 @@ static INT_PTR CALLBACK Buddy_DialogProc(HWND Dialog, UINT Message, WPARAM WPara
2373
2373
2374
2374
SetFocus (GetDlgItem (Dialog , BUDDY_ID_SHARE_COPY ));
2375
2375
2376
+ Buddy -> DialogWindow = Dialog ;
2376
2377
Buddy -> DerpRegionThread = CreateThread (NULL , 0 , & Buddy_GetBestDerpRegionThread , Buddy , 0 , NULL );
2377
2378
Assert (Buddy -> DerpRegionThread );
2378
2379
}
@@ -2485,18 +2486,28 @@ static INT_PTR CALLBACK Buddy_DialogProc(HWND Dialog, UINT Message, WPARAM WPara
2485
2486
}
2486
2487
else if (Control == BUDDY_ID_SHARE_NEW )
2487
2488
{
2488
- DerpNet_CreateNewKey (& Buddy -> MyPrivateKey );
2489
- DerpNet_GetPublicKey (& Buddy -> MyPrivateKey , & Buddy -> MyPublicKey );
2489
+ if (Buddy -> DerpRegion == 0 )
2490
+ {
2491
+ Edit_SetText (GetDlgItem (Dialog , BUDDY_ID_SHARE_KEY ), L"...initializing..." );
2490
2492
2491
- DATA_BLOB BlobInput = { sizeof (Buddy -> MyPrivateKey ), Buddy -> MyPrivateKey .Bytes };
2492
- DATA_BLOB BlobOutput ;
2493
- BOOL Protected = CryptProtectData (& BlobInput , NULL , NULL , NULL , NULL , CRYPTPROTECT_UI_FORBIDDEN , & BlobOutput );
2494
- Assert (Protected );
2493
+ Buddy -> DerpRegionThread = CreateThread (NULL , 0 , & Buddy_GetBestDerpRegionThread , Buddy , 0 , NULL );
2494
+ Assert (Buddy -> DerpRegionThread );
2495
+ }
2496
+ else
2497
+ {
2498
+ DerpNet_CreateNewKey (& Buddy -> MyPrivateKey );
2499
+ DerpNet_GetPublicKey (& Buddy -> MyPrivateKey , & Buddy -> MyPublicKey );
2495
2500
2496
- WritePrivateProfileStructW (BUDDY_CONFIG , L"DerpPrivateKey" , BlobOutput .pbData , BlobOutput .cbData , Buddy -> ConfigPath );
2497
- LocalFree (BlobOutput .pbData );
2501
+ DATA_BLOB BlobInput = { sizeof (Buddy -> MyPrivateKey ), Buddy -> MyPrivateKey .Bytes };
2502
+ DATA_BLOB BlobOutput ;
2503
+ BOOL Protected = CryptProtectData (& BlobInput , NULL , NULL , NULL , NULL , CRYPTPROTECT_UI_FORBIDDEN , & BlobOutput );
2504
+ Assert (Protected );
2498
2505
2499
- Dialog_ShowShareKey (GetDlgItem (Dialog , BUDDY_ID_SHARE_KEY ), Buddy -> DerpRegion , & Buddy -> MyPublicKey );
2506
+ WritePrivateProfileStructW (BUDDY_CONFIG , L"DerpPrivateKey" , BlobOutput .pbData , BlobOutput .cbData , Buddy -> ConfigPath );
2507
+ LocalFree (BlobOutput .pbData );
2508
+
2509
+ Dialog_ShowShareKey (GetDlgItem (Dialog , BUDDY_ID_SHARE_KEY ), Buddy -> DerpRegion , & Buddy -> MyPublicKey );
2510
+ }
2500
2511
}
2501
2512
else if (Control == BUDDY_ID_CONNECT_PASTE )
2502
2513
{
@@ -2561,15 +2572,16 @@ static INT_PTR CALLBACK Buddy_DialogProc(HWND Dialog, UINT Message, WPARAM WPara
2561
2572
2562
2573
case BUDDY_WM_BEST_REGION :
2563
2574
{
2575
+ WaitForSingleObject (Buddy -> DerpRegionThread , INFINITE );
2576
+ CloseHandle (Buddy -> DerpRegionThread );
2577
+
2564
2578
if (WParam == 0 )
2565
2579
{
2566
- MessageBoxW (Buddy -> DialogWindow , L"Cannot determine best DERP region!" , L"Error" , MB_ICONERROR );
2567
- ExitProcess (0 );
2580
+ Edit_SetText (GetDlgItem (Dialog , BUDDY_ID_SHARE_KEY ), L"Error!" );
2581
+ MessageBoxW (Buddy -> DialogWindow , L"Cannot determine best DERP region! Please check your\ninternet connection and retry new code generation." , BUDDY_TITLE , MB_ICONERROR );
2582
+ return 0 ;
2568
2583
}
2569
-
2570
2584
Buddy -> DerpRegion = (uint32_t )WParam ;
2571
- WaitForSingleObject (Buddy -> DerpRegionThread , INFINITE );
2572
- CloseHandle (Buddy -> DerpRegionThread );
2573
2585
2574
2586
wchar_t DerpRegionText [128 ];
2575
2587
StrFormat (DerpRegionText , L"%u" , Buddy -> DerpRegion );
0 commit comments