Ejemplo n.º 1
0
static x_object *
bind_on_assign(x_object *this__, x_obj_attr_t *attrs)
{
  int id;
  x_string_t val;
  x_object *msg;
  x_object *tmp;
  struct x_bus *bus = (struct x_bus *) this__->bus;
  ENTER;

//  val = (int) ht_get("bind", &bus->wall[0], &id);
  val = _AGET(this__,"$bind_state");
  if (val && EQ(val,"BIND_SENT"))
    {

    }
  else if (val && EQ(val,"BIND_OK"))
    {

    }
  else
    {
      msg = _GNEW("bind",NULL);
      _ASET(msg, "xmlns", "urn:ietf:params:xml:ns:xmpp-bind");

      tmp = _GNEW("resource",NULL);
      x_string_write(&tmp->content, _ENV(this__,"resource"),
          x_strlen(_ENV(this__,"resource")));

      _INS(msg, tmp);

      tmp = _GNEW("iq",NULL);
      _ASET(tmp, "type", "set");
      _ASET(tmp, "id", "bind_1");
      _INS(tmp, msg);

//      ht_set("bind", (VAL) BIND_SENT, &bus->wall[0]);
      _ASET(this__, "$bind_state", "BIND_SENT");
      x_object_send_down(X_OBJECT(bus), tmp, NULL);
      _REFPUT(tmp, NULL);
    }

  EXIT;
  return this__;
}
Ejemplo n.º 2
0
static void
bind_exit(x_object *this__)
{
  x_object *msg;
  x_object *_m;
  x_object *tmp;
  x_object *o;
  x_string_t state;
  char *ptr;
  struct x_bus *bus = (struct x_bus *) this__->bus;
  ENTER;

  state = _AGET(this__,"$bind_state");

  if (state && EQ(state,"BIND_SENT"))
    {
      o = _CHLD(this__, "jid");
      if (o)
        {
          _ASET(this__, "$bind_state", "BIND_OK");

          TRACE("New JID:=\"%s\"\n", o->content.cbuf);

          /* set new xmppbot jid */
          _ASET(X_OBJECT(bus), "jid", o->content.cbuf);

          /* update resource name */
          if ((ptr = x_strrchr(o->content.cbuf, '/')) != NULL)
            _ASET(X_OBJECT(bus), "resource", ++ptr);

          tmp = _CHLD(X_OBJECT(bus), "stream:stream");
          if (tmp)
            {
              /* send session initiate */
              _m = _GNEW("iq",NULL);
              _ASET(_m, "type", "set");
              _ASET(_m, "id", "bind_2");

              msg = _GNEW("session",NULL);
              _ASET(msg, "xmlns", "urn:ietf:params:xml:ns:xmpp-session");
              _INS(_m, msg);

              x_object_send_down(tmp, _m, NULL);
              _REFPUT(_m, NULL);

              /* append presence object to stream */
              msg = x_object_new("presence");
              x_object_append_child(tmp, msg);
            }
        }
    }

  EXIT;
}
Ejemplo n.º 3
0
static void
__procsys_collect_network_ifaces(x_object *netdir)
{
  int i = 0;
  char addrstrbuf[64];
  x_object *tmp;
  struct sockaddr **local_addrs;

  ENTER;

  _REFGET(netdir);

#ifdef ANDROID
  local_addrs = __x_bus_get_local_addr_list();
#else
  local_addrs = __x_bus_get_local_addr_list2();
#endif

  for (i = 0; local_addrs[i]; i++)
    {
      void *src = NULL;
      socklen_t len;

      if (local_addrs[i]->sa_family == AF_INET)
        {
          struct sockaddr_in *ip4addr = (struct sockaddr_in *) (void *) local_addrs[i];
          if (ip4addr->sin_addr.s_addr == INADDR_LOOPBACK
              || ip4addr->sin_addr.s_addr == htonl(INADDR_LOOPBACK))
            continue;

          src = (void *) &ip4addr->sin_addr;
          len = sizeof(struct sockaddr_in);
        }
      else if (local_addrs[i]->sa_family == AF_INET6)
        {
          struct sockaddr_in6 *ip6addr = (struct sockaddr_in6 *) (void *) local_addrs[i];
          src = (void *) &ip6addr->sin6_addr;
          len = sizeof(struct sockaddr_in6);
        }
      else
        {
          continue;
        }

      x_inet_ntop(local_addrs[i]->sa_family, src, addrstrbuf, len);

      /* dataport candidate */
      tmp = _GNEW(_XS("$interface"),NULL);
      BUG_ON(!tmp);
      TRACE("ADDING IP ADDRESS '%s'\n", &addrstrbuf[0]);
      _ASET(tmp, _XS("ip"), &addrstrbuf[0]);
      _ASET(tmp, _XS("type"), (local_addrs[i]->sa_family == AF_INET6)
          ? _XS("IPv6") : _XS("IPv4"));

      _INS(netdir, tmp);

    }

//  x_free(local_addrs);

  _REFPUT(netdir,NULL);

  EXIT;
}
Ejemplo n.º 4
0
static x_object *
iostream_on_assign(x_object *chan, x_obj_attr_t *attrs)
{
    x_object *tmpo;
    x_string_t attr;

    ENTER;

    TRACE("\n");

    x_object_default_assign_cb(chan, attrs);

//    x_object_print_path(chan,1);

    if ((attr = getattr("mtype", attrs)))
    {
        if (EQ(attr,_XS("video")))
        {
            tmpo = _GNEW(_XS("video_player"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("dataplayer"));
            _INS(chan, tmpo);

            tmpo = _GNEW(_XS("camera"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("datasrc"));
            _INS(chan, tmpo);

            /**
             * Always try to add HID control:
             */
            tmpo = _GNEW(_XS("hiddemux"),_XS("gobee:media"));
            if (tmpo) _INS(chan, tmpo);

            tmpo = _GNEW(_XS("hidmux"),_XS("gobee:media"));
            if (tmpo) _INS(chan, tmpo);

        }
        else if (EQ(attr,_XS("audio")))
        {
            tmpo = _GNEW(_XS("audio_player"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("dataplayer"));
            _INS(chan, tmpo);

            tmpo = _GNEW(_XS("microphone"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("datasrc"));
            _INS(chan, tmpo);
        }
#if 0
        else if (EQ(attr,_XS("application")))
        {
            tmpo = _GNEW(_XS("hiddemux"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("dataplayer"));
            _INS(chan, tmpo);

            tmpo = _GNEW(_XS("hidmux"),_XS("gobee:media"));
            _SETNM(tmpo, _XS("datasrc"));
            _INS(chan, tmpo);
        }
#endif
//        else if (EQ(attr,_XS("message")))
//        {
//            TRACE("Setting 'message' session\n");
//            tmpo = _GNEW(_XS("textin"),_XS("gobee:media"));
//            _SETNM(tmpo, _XS("dataplayer"));
//            _INS(chan, tmpo);

//            tmpo = _GNEW(_XS("textout"),_XS("gobee:media"));
//            _SETNM(tmpo, _XS("datasrc"));
//            _INS(chan, tmpo);
//        }
    }

    if ((attr = getattr("$commit", attrs)))
    {
        // remove commit
        _ASET(chan, _XS("$commit"), NULL);
        __iostream_update_state(chan);
    }

    EXIT;
    return chan;
}
Ejemplo n.º 5
0
/* g_band3_align(A, B, M, N, up, low, tb, te, data) returns the cost
   of an optimum conversion between
   A[1..M] and B[1..N] and appends such a conversion to the current script.
   tb(te)= 1  no gap-open penalty if the conversion begins(ends) with a delete.
   tb(te)= 2  no gap-open penalty if the conversion begins(ends) with an insert.
*/
static Int4 g_band3_align(Uint1Ptr A, Uint1Ptr B,
			  Int4 M, Int4 N,
			  Int4 low, Int4 up, data_t *data)
{
  Int4 k, v;
  Int4 band, j;
  Int4 leftd, rightd;	/* for CC, DD, CP and DP */
  register Int4 curd;	/* current index for CC, DD CP and DP */
  register Int4 i;
  register Int4 c, d, e, x;
  register dp_ptr ap;
  Int4 t;
  Int4Ptr wa;
  Int1Ptr PNTR state, st, tmp;
  Int4 ib, best=MININT, X, Y;


  /* Boundary cases: M <= 0 , N <= 0, or up-low <= 0 */
  band = up - low + 1;
  state = (Int1Ptr PNTR) MemGet(sizeof(Int1Ptr)*(M+1), MGET_ERRPOST);
  state[0] = (Int1Ptr) MemGet((M+1)*(band+2), MGET_ERRPOST);
  for (i = 1; i <= M; i++) state[i] = state[i-1]+band+2;

  /* Initialization */
  leftd = 1-low;
  rightd = up-low+1;

  data->CD[leftd].CC = 0; state[0][leftd] = -1;

  t = -data->leggB;
  for(j = leftd + 1; j <= rightd; j++) {
    data->CD[j].CC = t = t - data->leghB;
    data->CD[j-1].DD = t - data->m;
    state[0][j] = 1;
  }
  data->CD[rightd+1].CC = MININT;
  data->CD[rightd].DD = MININT;
  data->CD[leftd-1].DD = -data->leggA;
  data->CD[leftd-1].CC = MININT;
  for (i = 1; i <= M; i++) {
    if (i > N-up) rightd--;
    if (leftd > 1) leftd--;
    wa = data->w[A[i]];
    d = data->CD[leftd].DD;
    k = 0;
    if ((ib = leftd+low-1+i) > 0) c = data->CD[leftd].CC+wa[B[ib]];
    if (d > c || ib <= 0) {
      c = d;
      k = 2;
    }
    e = c - data->m;
    if(ib <= 0) {
      data->CD[leftd - 1].DD = d - data->leghA;
      k += 20;
    }
    st = &state[i][leftd];
    *st++ = (Int1) k;
    data->CD[leftd].CC = c;
    for(curd = leftd + 1, ap = &data->CD[curd]; curd <= rightd; curd++) {
      c = ap->CC + wa[B[curd + low - 1 + i]];
      if((d = ap->DD) > c) {
	if(d > e) {
	  ap->CC = d;
	  *st++ =32;
	}
	else {
	  ap->CC = e;
	  *st++=31;
	}
	e -= data->zzh;
	(ap++ - 1)->DD = d - data->zzh;
      }
      else if (e > c) { 	       
	ap->CC = e;
	e -= data->zzh;
	(ap++ - 1)->DD = d - data->zzh;
	*st++ = 31;
      }
      else {
	ap->CC = c;
	if((c -= data->m) > (e -= data->zzh)) {
	  if(c > (d -= data->zzh)) {
	    (ap++ - 1)->DD = e = c;
	    *st++ = 0;
	  }
	  else {
	    e = c;
	    (ap++ - 1)->DD = d;
	    *st++ = 20;
	  } 
	}
	else {
	  if(c > (d -= data->zzh)) {
	    (ap++ - 1)->DD = c;
	    *st++ = 10;
	  }
	  else {
	    (ap++ - 1)->DD = d;
	    *st++ = 30;
	  }
	}
      }
    }
    if(i > N-up &&
       best < (j = (ap - 1)->CC - data->reggA - (N - i) * data->reghA)) {
      best = j; X = i; Y = rightd;
    }
  }
  for(ap = &data->CD[leftd]; ap <= &data->CD[rightd]; ap++) {
    if((j = ap->CC - data->reggB - data->reghB *
	(x = (&data->CD[rightd] - ap)))
       > best) {
      X = M;
      best = j;
      Y = rightd - x;
    }
  }
  if (data->CD[rightd].CC > best) {X=M; Y= N; best = data->CD[rightd].CC;}
  v= best;
  tmp = MemGet(M+N, MGET_ERRPOST);
  for (i = X, j = Y, e=0, c = 0; i>=0; i--, c++) {
    k  = (t=state[i][j]) %10;
    if (t == -1) break;
    if (e == 1 && (t/10)%2 == 1) k = 1;
    if (e == 2 && (t/20)== 1) k = 2;
    if (k == 1) { j--; i++;}
    else if (k == 2) j++;
    e = k;
    tmp[c] = (Int1) e;
  }
  for (i = c-1; i >= 0; i--) 
    switch(tmp[i]) {
    case 0: 
      _REP;
      break;
    case 1:
      _INS(1);
      break;
    case 2:
      _DEL(1);
      break;
    }
  if(X != M) _DEL(M - X)
	       else if(Y != rightd) _INS(rightd-Y)
  
				      MemFree(state[0]);
  MemFree(state);
  MemFree(tmp);
  return(v);
}