コード例 #1
0
ファイル: wtpman.c プロジェクト: yskcg/actube
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);

		}

	}
}
コード例 #2
0
ファイル: cw_in_radio_generic.c プロジェクト: jhbsz/actube
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;


}
コード例 #3
0
ファイル: cw_in_generic2.c プロジェクト: jhbsz/actube
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);



}
コード例 #4
0
ファイル: wtpman.c プロジェクト: yskcg/actube
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);

		}

	}
}
コード例 #5
0
ファイル: wtpman.c プロジェクト: yskcg/actube
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;

}
コード例 #6
0
ファイル: cw_in_generic2.c プロジェクト: jhbsz/actube
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;


}
コード例 #7
0
ファイル: cfg.c プロジェクト: Benyjuice/actube
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);	

}