mirror of
https://github.com/urbit/shrub.git
synced 2024-12-22 18:31:44 +03:00
Merge branches 'u3x_hext' and 'andthus'
This commit is contained in:
commit
e9c0af36a9
@ -117,3 +117,16 @@
|
|||||||
u3_noun* d,
|
u3_noun* d,
|
||||||
u3_noun* e,
|
u3_noun* e,
|
||||||
u3_noun* f);
|
u3_noun* f);
|
||||||
|
|
||||||
|
/* u3x_hext():
|
||||||
|
**
|
||||||
|
** Divide `a` as a hextuple `[b c d e f g]`.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
u3x_hext(u3_noun a,
|
||||||
|
u3_noun* b,
|
||||||
|
u3_noun* c,
|
||||||
|
u3_noun* d,
|
||||||
|
u3_noun* e,
|
||||||
|
u3_noun* f,
|
||||||
|
u3_noun* g);
|
||||||
|
@ -88,3 +88,21 @@ u3x_quil(u3_noun a,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* u3x_hext():
|
||||||
|
**
|
||||||
|
** Divide `a` as a hextuple `[b c d e f g]`.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
u3x_hext(u3_noun a,
|
||||||
|
u3_noun* b,
|
||||||
|
u3_noun* c,
|
||||||
|
u3_noun* d,
|
||||||
|
u3_noun* e,
|
||||||
|
u3_noun* f,
|
||||||
|
u3_noun* g)
|
||||||
|
{
|
||||||
|
if ( c3n == u3r_hext(a, b, c, d, e, f, g) ) {
|
||||||
|
u3m_bail(c3__exit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
86
vere/cttp.c
86
vere/cttp.c
@ -463,9 +463,14 @@ _cttp_httr_cres(c3_l num_l, u3_cres* res_u)
|
|||||||
/* _cttp_httr_fail(): fail out a request by number.
|
/* _cttp_httr_fail(): fail out a request by number.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_cttp_httr_fail(c3_l num_l, c3_c* msg_c)
|
_cttp_httr_fail(c3_l num_l, c3_w cod_w, c3_c* msg_c)
|
||||||
{
|
{
|
||||||
return _cttp_httr(num_l, 404, u3_nul, u3_nul);
|
if ( msg_c ) {
|
||||||
|
fprintf(stderr, "http: fail (%d, %d): %s\r\n", num_l, cod_w, msg_c);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "http: fail (%d, %d): %s\r\n", num_l, cod_w, msg_c);
|
||||||
|
}
|
||||||
|
return _cttp_httr(num_l, cod_w, u3_nul, u3_nul);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _cttp_cres_free(): free a u3_cres.
|
/* _cttp_cres_free(): free a u3_cres.
|
||||||
@ -719,7 +724,7 @@ _cttp_ccon_waste(u3_ccon* coc_u, c3_c* msg_c)
|
|||||||
while ( coc_u->ceq_u ) {
|
while ( coc_u->ceq_u ) {
|
||||||
u3_creq* ceq_u = coc_u->ceq_u;
|
u3_creq* ceq_u = coc_u->ceq_u;
|
||||||
|
|
||||||
_cttp_httr_fail(ceq_u->num_l, msg_c);
|
_cttp_httr_fail(ceq_u->num_l, 504, msg_c);
|
||||||
coc_u->ceq_u = ceq_u->nex_u;
|
coc_u->ceq_u = ceq_u->nex_u;
|
||||||
if ( 0 == coc_u->ceq_u ) {
|
if ( 0 == coc_u->ceq_u ) {
|
||||||
c3_assert(ceq_u == coc_u->qec_u);
|
c3_assert(ceq_u == coc_u->qec_u);
|
||||||
@ -748,29 +753,10 @@ _cttp_ccon_waste(u3_ccon* coc_u, c3_c* msg_c)
|
|||||||
free(coc_u);
|
free(coc_u);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _cttp_ccon_reset(): reset a live connection.
|
/* _cttp_ccon_stop(): stop appropriate I/O on failure case.
|
||||||
*/
|
|
||||||
void
|
|
||||||
_cttp_ccon_reset(u3_ccon* coc_u)
|
|
||||||
{
|
|
||||||
if ( coc_u->ceq_u ) {
|
|
||||||
_cttp_bods_free(coc_u->rub_u);
|
|
||||||
coc_u->rub_u = coc_u->bur_u = 0;
|
|
||||||
|
|
||||||
if ( coc_u->ceq_u->res_u ) {
|
|
||||||
_cttp_cres_free(coc_u->ceq_u->res_u);
|
|
||||||
coc_u->ceq_u->res_u = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
c3_assert(0 == coc_u->rub_u);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* _cttp_ccon_reboot(): stop appropriate I/O on failure case.
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
_cttp_ccon_reboot(u3_ccon* coc_u)
|
_cttp_ccon_stop(u3_ccon* coc_u)
|
||||||
{
|
{
|
||||||
switch ( coc_u->sat_e ) {
|
switch ( coc_u->sat_e ) {
|
||||||
default: c3_assert(0);
|
default: c3_assert(0);
|
||||||
@ -796,24 +782,9 @@ _cttp_ccon_reboot(u3_ccon* coc_u)
|
|||||||
}
|
}
|
||||||
case u3_csat_cryp:
|
case u3_csat_cryp:
|
||||||
case u3_csat_clyr: {
|
case u3_csat_clyr: {
|
||||||
/* We had a connection but it broke. Either there are no
|
/* Socket broke. Waste it.
|
||||||
** living requests, in which case waste; otherwise reset.
|
|
||||||
*/
|
*/
|
||||||
if ( 0 == coc_u->ceq_u ) {
|
_cttp_ccon_waste(coc_u, 0);
|
||||||
_cttp_ccon_waste(coc_u, 0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Clear any unsent data.
|
|
||||||
*/
|
|
||||||
coc_u->sat_e = u3_csat_dead;
|
|
||||||
_cttp_ccon_reset(coc_u);
|
|
||||||
|
|
||||||
/* Begin again.
|
|
||||||
*/
|
|
||||||
uL(fprintf(uH, "ccon: rekick\r\n"));
|
|
||||||
_cttp_ccon_kick(coc_u);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -825,7 +796,7 @@ _cttp_ccon_fail_cb(uv_handle_t* wax_u)
|
|||||||
{
|
{
|
||||||
u3_ccon *coc_u = _cttp_ccon_wax((uv_tcp_t*)wax_u);
|
u3_ccon *coc_u = _cttp_ccon_wax((uv_tcp_t*)wax_u);
|
||||||
|
|
||||||
_cttp_ccon_reboot(coc_u);
|
_cttp_ccon_stop(coc_u);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _cttp_ccon_fail(): report failure and reset connection.
|
/* _cttp_ccon_fail(): report failure and reset connection.
|
||||||
@ -838,9 +809,8 @@ _cttp_ccon_fail(u3_ccon* coc_u, u3_noun say)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( coc_u->sat_e < u3_csat_crop ) {
|
if ( coc_u->sat_e < u3_csat_crop ) {
|
||||||
_cttp_ccon_reboot(coc_u);
|
_cttp_ccon_stop(coc_u);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
uL(fprintf(uH, "cttp: close: %p\n", coc_u));
|
uL(fprintf(uH, "cttp: close: %p\n", coc_u));
|
||||||
uv_close((uv_handle_t*)&coc_u->wax_u, _cttp_ccon_fail_cb);
|
uv_close((uv_handle_t*)&coc_u->wax_u, _cttp_ccon_fail_cb);
|
||||||
}
|
}
|
||||||
@ -1077,7 +1047,6 @@ _cttp_ccon_cryp_hurr(u3_ccon* coc_u, int rev)
|
|||||||
|
|
||||||
switch ( err ) {
|
switch ( err ) {
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "cttp: wasted: %p\r\n", coc_u->ssl.ssl_u);
|
|
||||||
_cttp_ccon_waste(coc_u, "ssl lost");
|
_cttp_ccon_waste(coc_u, "ssl lost");
|
||||||
break;
|
break;
|
||||||
case SSL_ERROR_NONE:
|
case SSL_ERROR_NONE:
|
||||||
@ -1192,9 +1161,17 @@ _cttp_ccon_kick_read_cryp_cb(uv_stream_t* tcp_u,
|
|||||||
|
|
||||||
{
|
{
|
||||||
if ( siz_w == UV_EOF ) {
|
if ( siz_w == UV_EOF ) {
|
||||||
// _cttp_ccon_fail(coc_u, c3n); // replaced with uv_close() 2016-06-07
|
#if 1
|
||||||
uv_close((uv_handle_t*) tcp_u, NULL); // https://github.com/urbit/urbit/issues/254
|
_cttp_ccon_fail(coc_u, c3n);
|
||||||
} else if ( siz_w < 0 ) {
|
#else
|
||||||
|
// old workaround:
|
||||||
|
//
|
||||||
|
// https://github.com/urbit/urbit/issues/254
|
||||||
|
//
|
||||||
|
uv_close((uv_handle_t*) tcp_u, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if ( siz_w < 0 ) {
|
||||||
uL(fprintf(uH, "cttp: read 2: %s\n", uv_strerror(siz_w)));
|
uL(fprintf(uH, "cttp: read 2: %s\n", uv_strerror(siz_w)));
|
||||||
_cttp_ccon_fail(coc_u, c3y);
|
_cttp_ccon_fail(coc_u, c3y);
|
||||||
}
|
}
|
||||||
@ -1238,8 +1215,15 @@ _cttp_ccon_kick_read_clyr_cb(uv_stream_t* tcp_u,
|
|||||||
|
|
||||||
{
|
{
|
||||||
if ( siz_w == UV_EOF ) {
|
if ( siz_w == UV_EOF ) {
|
||||||
// _cttp_ccon_fail(coc_u, c3n); // replaced with uv_close() 2016-06-07
|
#if 1
|
||||||
uv_close((uv_handle_t*) tcp_u, NULL); // https://github.com/urbit/urbit/issues/254
|
_cttp_ccon_fail(coc_u, c3n);
|
||||||
|
#else
|
||||||
|
// old workaround:
|
||||||
|
//
|
||||||
|
// https://github.com/urbit/urbit/issues/254
|
||||||
|
//
|
||||||
|
uv_close((uv_handle_t*) tcp_u, NULL);
|
||||||
|
#endif
|
||||||
} else if ( siz_w < 0 ) {
|
} else if ( siz_w < 0 ) {
|
||||||
uL(fprintf(uH, "cttp: read 1: %s\n", uv_strerror(siz_w)));
|
uL(fprintf(uH, "cttp: read 1: %s\n", uv_strerror(siz_w)));
|
||||||
_cttp_ccon_fail(coc_u, c3y);
|
_cttp_ccon_fail(coc_u, c3y);
|
||||||
|
Loading…
Reference in New Issue
Block a user