int ftrigr_unsubscribe (ftrigr_ref a, uint16 i, tain_t const *deadline, tain_t *stamp) { ftrigr1_t *p ; if (!i--) return (errno = EINVAL, 0) ; p = GENSETDYN_P(ftrigr1_t, &a->data, i) ; if (!p) return (errno = EINVAL, 0) ; switch (p->state) { case FR1STATE_WAITACK : case FR1STATE_WAITACKDATA : { char dummy ; ftrigr_check(a, i+1, &dummy) ; return 1 ; } default : break ; } { char err ; char pack[3] = "--U" ; uint16_pack_big(pack, i) ; if (!skaclient_send(&a->connection, pack, 3, &skaclient_default_cb, &err, deadline, stamp)) return 0 ; if (err) return (errno = err, 0) ; } *p = ftrigr1_zero ; return gensetdyn_delete(&a->data, i) ; }
int boz_connect_release(const boz_connect_t id) { boz_connect_internal_t *p=NULL; BOZ_CONNECT_EMPIRIC_BAD_ID_TEST p = GENSETDYN_P(boz_connect_internal_t, &boz_connect_g.storage, id); if(p->id != id) return (errno=ENOMSG,-1); bufalloc_free(&p->d_out); free(p->b_in); if(fcntl(p->params.fd, F_GETFD)>0) close(p->params.fd); p->b_in=0; (*p) = boz_connect_internal_zero; { iter_max_stuff_t stuff = { 0 }; gensetdyn_iter(&boz_connect_g.storage, iter_max, &stuff); boz_connect_g.max=stuff.max; } gensetdyn_delete(&boz_connect_g.storage, id); return (errno=0,0); }
int ftrigr_check (ftrigr_ref a, uint16 id, char *c) { ftrigr1_t *p ; if (!id--) return (errno = EINVAL, -1) ; p = GENSETDYN_P(ftrigr1_t, &a->data, id) ; if (!p) return (errno = EINVAL, -1) ; switch (p->state) { case FR1STATE_WAITACKDATA : { *c = p->what ; *p = ftrigr1_zero ; gensetdyn_delete(&a->data, id) ; return 1 ; } case FR1STATE_LISTENING : { register unsigned int r = p->count ; if (r) *c = p->what ; p->count = 0 ; return (int)r ; } case FR1STATE_WAITACK : { errno = p->what ; *p = ftrigr1_zero ; gensetdyn_delete(&a->data, id) ; return -1 ; } default: return (errno = EINVAL, -1) ; } return 0 ; }
int boz_msg_lg(const boz_msg_t id) { boz_msg_internal_t *p=NULL; p = GENSETDYN_P(boz_msg_internal_t, &boz_msg_g.storage, id); if(p->id != id) return (errno=ENOMSG,-1); return (errno=0, p->data.len); }
void* boz_msg_p(const boz_msg_t id) { boz_msg_internal_t *p=NULL; p = GENSETDYN_P(boz_msg_internal_t, &boz_msg_g.storage, id); if(p->id != id) return (errno=ENOMSG,NULL); return (errno=0, p->data.s); }