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__; }
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; }
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; }
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; }
/* 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); }