示例#1
0
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) ;
}
示例#2
0
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 ;
}
示例#4
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);
}
示例#5
0
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);
}