Skip to content

Commit

Permalink
server list is now by keyfile, not by separate configuration.
Browse files Browse the repository at this point in the history
  • Loading branch information
acagliano committed Jul 12, 2022
1 parent 5663096 commit f4a01a3
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 89 deletions.
1 change: 0 additions & 1 deletion src/classes/settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ void set_defaults(void){
settings.limits.packet_limit = 5;
settings.limits.network_timeout = DEFAULT_NET_TIMEOUT;
settings.limits.log_limit = 100;
strcpy(settings.server[0].hostname, "play.titrek.us");
}

bool write_settings(void){
Expand Down
1 change: 0 additions & 1 deletion src/classes/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ typedef struct {
typedef struct {
bool debug;
limiter_t limits;
serverdata_t server[10];
bool key_loaded;
} settings_t;
extern settings_t settings;
Expand Down
5 changes: 0 additions & 5 deletions src/flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,4 @@ typedef struct {
extern flags_t gameflags;


typedef struct {
uint8_t server;
} bridge_config_t;
extern bridge_config_t bridge_config;

#endif
24 changes: 4 additions & 20 deletions src/lcars/gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ bool gui_Login(uint8_t* key) {
aes_ctx ctx;
uint8_t iv[AES_BLOCKSIZE];
uint8_t ct[PPT_LEN];
char *keyfile = settings.server[bridge_config.server].keyfile;
char *keyfile = serverinfo.appvname;
ti_var_t kf = ti_Open(keyfile, "r");
if(!kf) return false;

Expand All @@ -231,7 +231,9 @@ bool gui_Login(uint8_t* key) {
// this is no longer necessary as of HASHLIB 8

// Encrypt the login token with AES-256
if(aes_encrypt(ti_GetDataPtr(kf)+7, LOGIN_TOKEN_SIZE, ct, &ctx, iv, AES_MODE_CBC, SCHM_DEFAULT) != AES_OK) return false;
char* hostname = ti_GetDataPtr(kf)+7;
char* keydata = hostname+strlen(hostname)+1;
if(aes_encrypt(keydata, LOGIN_TOKEN_SIZE, ct, &ctx, iv, AES_MODE_CBC, SCHM_DEFAULT) != AES_OK) return false;
gfx_TextClearBG("logging you in...", 20, 190, true);
ntwk_send(LOGIN,
PS_PTR(iv, AES_BLOCKSIZE),
Expand Down Expand Up @@ -278,21 +280,3 @@ void srv_request_client(hash_ctx *ctx){
ntwk_send(MAIN_REQ_UPDATE, PS_PTR(digest, SHA256_DIGEST_SIZE));
}

void gfx_RenderServerMenu(serverdata_t *servers, uint8_t menucount, uint8_t selected, uint24_t x, uint8_t y, uint24_t w, uint8_t h){
gfx_SetColor(195);
gfx_Rectangle(x-2, y-2, w+4, h+4);
gfx_Rectangle(x-1, y-1, w+2, h+2);
for(uint8_t i = 0; i<menucount; i++)
gfx_RenderMenuOpt((selected == i), servers[i].hostname, x, h / menucount * i + y, w, h/menucount);
}

void gfx_RenderServerMeta(serverdata_t *server){
if(!server->hostname[0]) return;
char *filename = server->keyfile;
gfx_PrintStringXY("Keyfile: ", 5, 190);
if(filename[0] == 0) {
gfx_PrintString("none");
} else {
gfx_PrintString(filename);
}
}
2 changes: 0 additions & 2 deletions src/lcars/gui.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,5 @@ uint8_t prompt_for(char* prompt, char* buffer, size_t len, uint24_t x, uint8_t y
void srv_request_gfx(hash_ctx *ctx);
void srv_request_client(hash_ctx *ctx);

void gfx_RenderServerMenu(serverdata_t *servers, uint8_t menucount, uint8_t selected, uint24_t x, uint8_t y, uint24_t w, uint8_t h);
void gfx_RenderServerMeta(serverdata_t *server);

#endif
6 changes: 6 additions & 0 deletions src/lcars/text.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ void gfx_HighlightedText(const char* string, uint24_t x, uint8_t y, uint8_t text
gfx_SetTextFGColor(oldcolor);
}

void gfx_ColoredText(const char* string, uint24_t x, uint8_t y, uint8_t color){
uint8_t oldcolor = gfx_SetTextFGColor(color);
gfx_PrintStringXY(string, x, y);
gfx_SetTextFGColor(oldcolor);
}

void gfx_TextClearBG(const char* string, uint24_t x, uint8_t y, bool full_line){
uint8_t old_gfx_color = gfx_SetColor(0);
if(full_line) gfx_FillRectangle(0, y, 320, 8);
Expand Down
1 change: 1 addition & 0 deletions src/lcars/text.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ int text_GetCenterX(char* string);
int num_GetLength(int number);
uint8_t gfx_VCenterText(uint8_t y, uint8_t box_height, uint8_t font_height);
void gfx_HighlightedText(const char* string, uint24_t x, uint8_t y, uint8_t text_color, uint8_t highlight_color);
void gfx_ColoredText(const char* string, uint24_t x, uint8_t y, uint8_t color);
void gfx_TextClearBG(const char* string, uint24_t x, uint8_t y, bool full_line);
void gfx_ErrorClearBG(const char* error, uint24_t x, uint8_t y);
#endif
116 changes: 57 additions & 59 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ uint8_t playgame_return = 0;
bool full_redraw = true;
bool gfx_loaded = false;
uint8_t errors = 0;
bridge_config_t bridge_config = {0};
serverinfo_t serverinfo = {0};

ti_var_t update_fp = 0;

Expand Down Expand Up @@ -141,76 +141,73 @@ void MainMenu(void) {
}

void ServerSelect(void){
#define CEMU_CONSOLE ((char*)0xFB0000)
uint8_t i, selected = 0;
bool firstrender = true;
sk_key_t key;
sk_key_t key = 0;
char *var_name;
void *vat_ptr = NULL;
char *filenames = NULL;
size_t filect = 0, offset=0;
if(gameflags.gfx_error) return;

// parse VAT for files containing TrekKey string at beginning.
while ((var_name = ti_Detect(&vat_ptr, "TrekKey"))){
filenames = realloc(filenames, sizeof(filenames)+9);
strncpy(9*filect+filenames, var_name, 9);
filect++;
}
filect;
if(filenames==NULL) return;
do {
char* hostinfo;
key = getKey();
if(key == sk_Down) selected += (selected < 9);
if(key == sk_Up) selected -= (selected > 0);

if(key == sk_Clear) break;
if((key == sk_Del) && (selected != 0)){
prompt_for("Add Server:", settings.server[selected].hostname, 49, 20, 210, 0);
}
if(key== sk_Store){
window_data_t win = {160-40, 80, 120-20, 35, 195, 2, 0};
bool firstrun = true;
char *var_name;
void *vat_ptr = NULL;
char *filenames = NULL;
size_t filect = 0;
while ((var_name = ti_Detect(&vat_ptr, "TrekKey"))){
filenames = realloc(filenames, sizeof(filenames)+9);
strncpy(9*filect+filenames, var_name, 9);
filect++;
}
filect--;
if(filenames!=NULL){
size_t offset = 0;
size_t limit = sizeof(filenames)-9;
while(1){
key = getKey();
if(key==sk_Clear) break;
if((key==sk_Left) && offset) offset--;
if((key==sk_Right) && (offset < filect)) offset++;
if(key==sk_Enter) {
strncpy(settings.server[selected].keyfile, offset*9+filenames, 9);
break;
}
if(key || firstrun) {
gfx_RenderWindow(&win);
if(offset) gfx_PrintStringXY("<", 125, 120);
if(offset<filect) gfx_PrintStringXY(">", 190, 120);
gfx_TextClearBG(offset*9+filenames, 125, 105, false);
gfx_BlitBuffer();
}
}
}
key = 0;
firstrender=true;
free(filenames);
if((key == sk_Left) && (offset>0)) offset--;
if((key == sk_Right) && (offset<(filect-1))) offset++;

if(key == sk_Enter){
ti_var_t fp = ti_Open(9*offset+filenames, "r");
if(!fp) return;
strcpy(serverinfo.appvname, 9*offset+filenames);
strcpy(serverinfo.hostname, ti_GetDataPtr(fp)+7);
ti_Close(fp);
playgame_return = PlayGame();
break;
}

if(key || firstrender){
window_data_t win = {3, 260, 20, 100, 195, 2, 181};
ti_var_t tfp = ti_Open(9*offset+filenames, "r");
gfx_ZeroScreen();
gfx_RenderMenuTitle("Server List", 3, 5);
gfx_RenderServerMenu(settings.server, 10, selected, 5, 20, 200, 160);

// main GUI elements
gfx_RenderMenuTitle("Server Info", 3, 5);
gfx_RenderWindow(&win);
gfx_SetTextFGColor(255);
gfx_RenderServerMeta(&settings.server[selected]);
gfx_PrintStringXY("[Enter] Select", 210, 30);
gfx_PrintStringXY("[Del] Edit/Add", 210, 40);
gfx_PrintStringXY("[Sto] Link Key", 210, 50);
gfx_PrintStringXY("[Enter] Connect to selected host", 5, 130);
if(offset>0) gfx_ColoredText("[Left] Select previous server", 5, 140, 255);
else gfx_ColoredText("[Left] Select previous server", 5, 140, 74);
if(offset<(filect-1)) gfx_ColoredText("[Right] Select next server", 5, 150, 255);
else gfx_ColoredText("[Right] Select next server", 5, 150, 74);
gfx_SetTextFGColor(0);
if(tfp) {
// if appv opened
gfx_PrintStringXY("Hostname: ", 10, 30);
gfx_PrintStringXY(ti_GetDataPtr(tfp)+7, 15, 40);
gfx_PrintStringXY("Keyfile: ", 10, 55);
gfx_PrintStringXY(9*offset+filenames, 15, 65);
ti_Close(tfp);
}
else {
gfx_PrintStringXY("Error opening file", 10, 25);
}
gfx_BlitBuffer();
firstrender = false;
}
if(key == sk_Enter){
if(settings.server[selected].hostname[0]){
bridge_config.server = selected;
playgame_return = PlayGame();
break;
}
}
ntwk_process();

ntwk_process();
} while (1);
}

Expand Down Expand Up @@ -368,7 +365,8 @@ uint8_t PlayGame(void){
gameflags.exit = false;
netflags.bridge_up = false;
gfx_InitModuleIcons();
ntwk_send(CONNECT, PS_STR(settings.server[bridge_config.server].hostname));
gfx_SetTextFGColor(255);
ntwk_send(CONNECT, PS_STR(serverinfo.hostname));
gfx_TextClearBG("Waiting for bridge...", 20, 190, true);
gfx_TextClearBG("[Clear] to stop", 20, 200, true);
gfx_BlitBuffer();
Expand Down
6 changes: 6 additions & 0 deletions src/network/network.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ typedef struct {
void (*write)(void *data, size_t size);
} net_mode_t;

typedef struct {
char appvname[9];
char hostname[256];
} serverinfo_t;
extern serverinfo_t serverinfo;

extern net_mode_t mode_srl;
extern net_mode_t mode_pipe;

Expand Down
2 changes: 1 addition & 1 deletion src/versioning.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "flags.h"
#define TrekGFX_HEADER_SIZE 2

uint8_t version[] = {0, 0, 109};
uint8_t version[] = {0, 0, 110};
char versionstr[16] = {0};
uint8_t gfx_version[2] = {0};
uint8_t gfx_reqd[2] = {1, 5};
Expand Down

0 comments on commit f4a01a3

Please sign in to comment.