Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
ripperi committed Jun 28, 2024
1 parent 8214b4c commit 5866262
Showing 1 changed file with 51 additions and 52 deletions.
103 changes: 51 additions & 52 deletions pkg/vere/pier.c
Original file line number Diff line number Diff line change
Expand Up @@ -559,19 +559,33 @@ _resolve_czar(u3_work* wok_u, c3_c* who_c)
return czar_c;
}

static c3_w
_czar_peer_rift(c3_c* czar_c, c3_c* who_c)
{
u3l_log("dbug: _CZAR_PEER_RIFT");
c3_w czar_ryf_w = 0xFFFFFFFF;
static c3_o
_czar_boot_data(c3_c* czar_c,
c3_c* who_c,
c3_w* bone_w,
c3_w* czar_glx_w,
c3_w* czar_ryf_w,
c3_w* czar_lyf_w,
c3_w* czar_bon_w,
c3_w* czar_ack_w)
{
u3l_log("dbug: _CZAR_BOOT_DATA");
c3_c url[256];
c3_w len_w;
c3_y* hun_y;

sprintf(url, "https://%s.urbit.org/~/boot/%s", czar_c+1, who_c);
u3l_log("dbug: fetch: %s", url);
sprintf(url, "http://localhost:80/~/boot/%s", who_c);
u3l_log("dbug: fetch: %s", url);
c3_y* hun_y = 0;

if (bone_w != NULL) {
sprintf(url, "https://%s.urbit.org/~/boot/%s/%d",
czar_c+1, who_c, *bone_w + 1);
u3l_log("dbug: fetch: %s", url);
sprintf(url, "http://localhost:80/~/boot/%s/%d", who_c, *bone_w + 1);
u3l_log("dbug: fetch: %s", url);
} else {
sprintf(url, "https://%s.urbit.org/~/boot/%s", czar_c+1, who_c);
u3l_log("dbug: fetch: %s", url);
sprintf(url, "http://localhost:80/~/boot/%s", who_c);
u3l_log("dbug: fetch: %s", url);
}

c3_i ret_i = king_curl_bytes(url, &len_w, &hun_y, 1);
u3l_log("dbug: ret_i: %d", ret_i);
Expand All @@ -582,43 +596,23 @@ _czar_peer_rift(c3_c* czar_c, c3_c* who_c)
u3_noun cued = u3qe_cue(jamd);
u3m_p("dbug: _czar_boot_state cued", cued);

u3_noun czar_glx, czar_ryf, czar_lyf;
u3x_trel(cued, &czar_glx, &czar_ryf, &czar_lyf);
czar_ryf_w = u3r_word(0, czar_ryf);
u3_noun czar_glx, czar_ryf, czar_lyf, czar_bon, czar_ack;
u3x_hext(cued, 0, &czar_glx, &czar_ryf, &czar_lyf, &czar_bon, &czar_ack);

*czar_glx_w = u3r_word(0, czar_glx);
*czar_ryf_w = u3r_word(0, czar_ryf);
*czar_lyf_w = u3r_word(0, czar_lyf);
if (czar_bon != 0) *czar_bon_w = u3r_word(0, u3t(czar_bon));
if (czar_ack != 0) *czar_ack_w = u3r_word(0, u3t(czar_ack));

u3z(jamd);
u3z(cued);
c3_free(hun_y);
}

return czar_ryf_w;
}

static c3_w
_czar_last_ack(c3_c* czar_c,
c3_c* who_c,
c3_w bone_w)
{
u3l_log("dbug: _CZAR_LAST_ACK");
c3_w czar_last_ack_w = 0xFFFFFFFF;
c3_c url[256];
c3_w len_w;
c3_y* hun_y;

sprintf(url, "https://%s.urbit.org/~/boot/%s/%d", czar_c+1, who_c, bone_w + 1);
u3l_log("dbug: fetch: %s", url);
sprintf(url, "http://localhost:80/~/boot/%s/%d", who_c, bone_w + 1);
u3l_log("dbug: fetch: %s", url);

c3_i ret_i = king_curl_bytes(url, &len_w, &hun_y, 1);
u3l_log("dbug: ret_i: %d", ret_i);
if (!ret_i) {
u3l_log("dbug: len_w: %d, hun_y: %s", len_w, hun_y);
czar_last_ack_w = strtoumax((c3_c*)hun_y, NULL, 10);
return c3y;
}

c3_free(hun_y);
return czar_last_ack_w;
return c3n;
}

static void
Expand All @@ -627,11 +621,13 @@ _boot_scry_cb(void* vod_p, u3_noun nun)
u3m_p("dbug: nun", nun);
u3_work* wok_u = (u3_work*)vod_p;

u3_atom who = u3dc("scot", c3__p, u3i_chubs(2, wok_u->pir_u->who_d));
c3_c* who_c = u3r_string(who);
u3_atom who = u3dc("scot", c3__p, u3i_chubs(2, wok_u->pir_u->who_d));
c3_c* who_c = u3r_string(who);

u3_noun rem, glx, ryf, bon, cur, nex;
c3_w glx_w, ryf_w, bon_w, cur_w, nex_w;

u3_noun rem, glx, ryf, bon, cur, nex;
c3_w glx_w, ryf_w, bon_w, cur_w, nex_w;
c3_w czar_glx_w, czar_ryf_w, czar_lyf_w, czar_bon_w, czar_ack_w = 0xFFFFFFFF;

if (c3y == u3r_qual(nun, 0, 0, 0, &rem) &&
c3y == u3r_hext(rem, &glx, &ryf, 0, &bon, &cur, &nex)) {
Expand All @@ -651,15 +647,16 @@ _boot_scry_cb(void* vod_p, u3_noun nun)
u3_atom czar = u3dc("scot", c3__p, glx_w);
c3_c* czar_c = u3r_string(czar);
u3l_log("dbug: czar: %s", czar_c);
c3_w czar_ryf_w = _czar_peer_rift(czar_c, who_c);

if (czar_ryf_w == 0xFFFFFFFF) {
if (c3n == _czar_boot_data(czar_c, who_c, &bon_w,
&czar_glx_w, &czar_ryf_w,
&czar_lyf_w, &czar_bon_w,
&czar_ack_w)) {
u3l_log("boot: peer-state unvailable on czar, cannot protect from double boot");
_pier_work(wok_u);
} else {
u3l_log("dbug: czar rift: %d, ship rift: %d", czar_ryf_w, ryf_w);
if (czar_ryf_w == ryf_w) {
c3_w czar_ack_w = _czar_last_ack(czar_c, who_c, bon_w);
c3_w ack_w = cur_w - 1;
u3l_log("dbug: czar last ack: %d, ship last ack: %d",
czar_ack_w, ack_w);
Expand Down Expand Up @@ -693,14 +690,16 @@ _boot_scry_cb(void* vod_p, u3_noun nun)
*/
u3l_log("dbug: SCRY NO DATA");
c3_c* czar_c = _resolve_czar(wok_u, who_c);
c3_w czar_ryf_w = _czar_peer_rift(czar_c, who_c);
c3_free(czar_c);

if (czar_ryf_w == 0xFFFFFFFF) {
if (c3n == _czar_boot_data(czar_c, who_c, 0,
&czar_glx_w, &czar_ryf_w,
&czar_lyf_w, 0, 0)) {
u3l_log("dbug: peer state not found under czar, continue boot");
c3_free(czar_c);
_pier_work(wok_u);
} else {
// Peer state found under czar
c3_free(czar_c);
u3l_log("dbug: czar rift: %d", czar_ryf_w);
u3_weak kf_ryf = wok_u->pir_u->ryf;
if (kf_ryf == u3_none) {
Expand Down Expand Up @@ -822,7 +821,7 @@ _pier_work_init(u3_pier* pir_u)
u3l_log("dbug: point part-1: %llu; part-2: %llu", pi_d, pt_d);

if ((pi_d < 256 && pt_d == 0) /*|| c3n == u3_Host.ops_u.net*/) {
// Skip double boot procection for galaxies and local mode ships
// Skip double boot protection for galaxies and local mode ships
//
_pier_work(wok_u);
} else {
Expand Down

0 comments on commit 5866262

Please sign in to comment.