void props_to_sql(struct conn *conn, mbag_t mb, const char *mid) { // XXX for the now we use just the IP adress as ID char *wtp_id = sock_addr2str(&conn->addr); // cw_dbg(DBG_X, "WTPID: %s\n", wtp_id); MAVLITER_DEFINE(it, mb); mavliter_foreach(&it) { mbag_item_t *i = mavliter_get(&it); const struct cw_itemdef *cwi; if (!mid){ cwi = cw_itemdef_get(conn->actions->items, i->id, NULL); } else{ cwi = cw_itemdef_get(conn->actions->items, mid,i->id); } if (!cwi){ cw_dbg(DBG_WARN,"No definition for item %s found.",i->id); continue; } if (i->type==MBAG_MBAG){ if (mid){ cw_log(LOG_ERROR,"Depth for %s",i->id); continue; } props_to_sql(conn,i->data,i->id); continue; } DBGX("SQL ID %s,%s", i->id, cwi->id); DBGX("SQL Type %s,Typecwd %s", i->type->name, cwi->type->name); // printf("%s != %s ?\n",i->type->name,cwi->type->name); char str[256]; if (i->type->to_str) { i->type->to_str(i, str); db_put_wtp_prop(wtp_id, cwi->id, cwi->sub_id, str); } else { cw_log(LOG_ERR, "Can't converto to str for %s", cwi->id, cwi->sub_id); } } }
int cw_in_radio_generic(struct conn *conn, struct cw_action_in *a, uint8_t * data, int len, struct sockaddr *from) { const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->radioitems,a->item_id,CW_ITEM_NONE); if (!idef){ cw_log(LOG_ERR,"No definition found for %s",a->item_id); return 0; } int rid = cw_get_byte(data); mbag_t radio = mbag_i_get_mbag(conn->radios, rid, NULL); if (!radio) { if (a->vendor_id != 0 || ( (a->vendor_id == 0) && (a->msg_id != CW_MSG_DISCOVERY_REQUEST && a->msg_id != CW_MSG_JOIN_REQUEST) )) { cw_dbg(DBG_ELEM_ERR, "Radio not found %d", rid); return 0; } mbag_i_set_mbag(conn->radios,rid,mbag_create()); radio = mbag_i_get_mbag(conn->radios, rid, NULL); } int rc = mbag_set_from_buf(radio,idef->type,a->item_id,data+1,len-1); if (!rc){ cw_log(LOG_ERR, "Can't handle item type %s in definition for incomming msg %d (%s) - %d, cw_in_radio_generic.", idef->type->name, a->msg_id, cw_strmsg(a->msg_id), a->elem_id); } return rc; }
int cw_in_generic2(struct conn *conn, struct cw_action_in *a, uint8_t * data, int len, struct sockaddr *from) { const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->items,a->item_id,CW_ITEM_NONE); if (!idef) { cw_log(LOG_ERR,"No itemdef found for %s",a->item_id); return 0; } int rc = mbag_set_from_buf(conn->incomming,idef->type,a->item_id,data,len); if (!rc){ cw_log(LOG_ERR, "Can't handle item type %d in definition for incomming msg %d (%s) - %d, cw_in_generic.", idef->type, a->msg_id, cw_strmsg(a->msg_id), a->elem_id); } return rc; // return do_save(itemstore, conn, a, data, len, from); }
void config_to_sql(struct conn *conn) { // XXX for the moment we use just the IP adress as ID char *wtp_id = sock_addr2str(&conn->addr); // cw_dbg(DBG_X, "WTPID: %s\n", wtp_id); MAVLITER_DEFINE(it, conn->incomming); mavliter_foreach(&it) { mbag_item_t *i = mavliter_get(&it); const struct cw_itemdef *cwi = cw_itemdef_get(conn->actions->items, i->id, NULL); cw_dbg(DBG_X,"ID GOT: %s",i->id); if (cwi) { DBGX("SQL ID %s,%s", i->id, cwi->id); DBGX("SQL Type %s,Typecwd %s", i->type->name, cwi->type->name); // printf("%s != %s ?\n",i->type->name,cwi->type->name); char str[256]; if (i->type->to_str) { i->type->to_str(i, str); db_put_wtp_prop(wtp_id, cwi->id, cwi->sub_id, str); } else { cw_log(LOG_ERR, "Can't converto to str for %s", cwi->id, cwi->sub_id); } } else { // DBGX("ID %d",i->id); } } }
void radio_to_sql(struct conn *conn, char *wtp_id, int rid, mbag_t radio) { MAVLITER_DEFINE(it, radio); mavliter_foreach(&it) { mbag_item_t *i = mavliter_get(&it); const struct cw_itemdef *cwi = cw_itemdef_get(conn->actions->radioitems, i->id, NULL); if (cwi) { char str[4096]; if (i->type->to_str) { i->type->to_str(i, str); // printf("I would put RID: %d, %s=>%s\n",rid,cwi->id,str); char srid[6]; sprintf(srid,"%d",rid); db_put_radio_prop(wtp_id,srid,cwi->id,cwi->sub_id,str); // db_put_wtp_prop(wtp_id, cwi->id, cwi->sub_id, str); } else { cw_log(LOG_ERR, "Can't converto to str for %s", cwi->id, cwi->sub_id); } } else { // DBGX("ID %d",i->id); } } // int rid = ((struct mbag_item*)mavliter_get(&it))->iid; }
int static do_save(mbag_t itemstore, struct conn *conn, struct cw_action_in *a, uint8_t * data, int len, struct sockaddr *from) { const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->items,a->item_id,CW_ITEM_NONE); if (!idef) { cw_log(LOG_ERR,"No itemdef found for %s",a->item_id); return 0; } if (idef->type == MBAG_BYTE) { mbag_set_byte(itemstore, a->item_id, *data); return 1; } if (idef->type == MBAG_WORD) { mbag_set_word(itemstore, a->item_id, cw_get_word(data)); return 1; } if (idef->type == MBAG_DWORD) { mbag_set_dword(itemstore, a->item_id, cw_get_dword(data)); return 1; } if (idef->type == MBAG_STR) { mbag_set_strn(itemstore, a->item_id, (char *) data, len); return 1; } if (idef->type == MBAG_BSTR) { mbag_set_bstrn(itemstore, a->item_id, data, len); return 1; } if (idef->type == MBAG_BSTR16) { mbag_set_bstr16n(itemstore, a->item_id, data, len); return 1; } /* if (idef->type == MBAG_DATA) { mbag_set_data(itemstore, a->item_id, data, len); return 1; } */ if (idef->type == MBAG_VENDORSTR) { mbag_set_bstrv(itemstore, a->item_id, cw_get_dword(data), data + 4, len - 4); return 1; } // printf("Idef: %s\n",idef->type->name); cw_log(LOG_ERR, "Can't handle item type %d in definition for incomming msg %d (%s) - %d, cw_in_generic.", idef->type, a->msg_id, cw_strmsg(a->msg_id), a->elem_id); return 0; }
void set_cfg(mbag_t mbag, cw_itemdefheap_t defs, const char *id, const char *subid,const char *val) { //printf("Setting: %s/%s: %s\n",id,subid,val); const cw_itemdef_t *idef; int dyn=0; if (!subid) { idef = cw_itemdef_get(defs,id,subid); } else { idef = cw_itemdef_get(defs,id,subid); if (!idef){ idef = cw_itemdef_get(defs,id,CW_ITEM_ANY); if (idef) dyn=1; } } if (!idef) { fprintf(stderr,"No definition for item %s/%s not found\n",id,subid); return ; } mbag_item_t * item; if (idef->type->from_str){ item=idef->type->from_str(val); if (dyn){ item->id=strdup(subid); item->dynid=1; } else{ if (subid) item->id=idef->sub_id; else item->id=idef->id; } item->type=idef->type; } else{ fprintf(stderr,"Can't read item '%s' - no from_str method defined\n",id); exit(0); } mbag_t wmbag; if (!subid) { wmbag=mbag; } else{ wmbag=mbag_get_mbag_c(mbag,id,mbag_create); } //printf("Adding to Mbag %s:%s\n",item->id,val); mavl_replace(wmbag,item); }