Ejemplo n.º 1
0
int cw_out_generic(struct conn *conn, struct cw_action_out *a, uint8_t * dst)	// ,struct mbag_item * item) 
{


	/* Get the item to put */
	struct mbag_item *item = NULL;
	if (a->get) {
		item = a->get(conn, a);
	}


	/* Size for msg elem header depends on 
	   vendor specific payload */
	int start = a->vendor_id ? 10 : 4;


	int len;
	if (!item) {
		const char *vendor="";
		if ( a->vendor_id ) {
			vendor=cw_strvendor(a->vendor_id);
		}
		if (a->mand) {
			cw_log(LOG_ERR,
			       "Can't put mandatory element %s%d - (%s) into %s. No value found.",
				vendor,
			       a->elem_id, cw_strelemp(conn->actions, a->elem_id)
			       , cw_strmsg(a->msg_id)
			    );
		}
		else{
			cw_dbg(DBG_WARN,"No output for element %s%d -(%s) in %s. Item %s not found.",
				vendor,
			       a->elem_id, cw_strelemp(conn->actions, a->elem_id)
			       , cw_strmsg(a->msg_id),a->item_id);

		}
		return 0;
	} else {
		len = cw_put_item(dst + start, item);
	}


	if (a->vendor_id)
		return len + cw_put_elem_vendor_hdr(dst, a->vendor_id, a->elem_id, len);

	return len + cw_put_elem_hdr(dst, a->elem_id, len);
}
Ejemplo n.º 2
0
Archivo: dbg.c Proyecto: yskcg/actube
static int cw_format_version(char *s, bstrv_t ver, char * def)
{
	if (!ver)
		return sprintf(s,"%s",def);


	uint8_t * version = bstrv_data(ver);
	int len = bstrv_len(ver);
	


	int rs=0;	
	int i;


	if ( format_is_utf8(version,len)  ){
		if (len != 0 )
			rs+=sprintf(s+rs,"%.*s",len,version);
		else
			rs+=sprintf(s+rs,"''");
	}
	else{
		for (i=0; i<len && i<20; i++){
			rs+=sprintf(s+rs,"%02X",version[i]);
		}

		int dot=0;

		rs+=sprintf(s+rs," (");
		for (i=0; i<len && i<20; i++){
			if (dot) 
				rs+=sprintf(s+rs,".");
			dot=1;
			rs+=sprintf(s+rs,"%d",version[i]);
		}
		rs+=sprintf(s+rs,")");
	}

	uint32_t vendor = bstrv_get_vendor_id(ver);
	rs+=sprintf(s+rs,", Vendor Id: %d, %s",vendor, cw_strvendor(vendor));
	return rs;	
}
Ejemplo n.º 3
0
Archivo: dbg.c Proyecto: yskcg/actube
void cw_dbg_elem_colored(int level, struct conn *conn, int msg, int msgelem,
			 const uint8_t * msgbuf, int len)
{
	if (!cw_dbg_is_level(level))
		return;

	const char *elemname;
	char vendorname[256];
	char vendor_details[265];
	*vendor_details = 0;

	if (msgelem == CW_ELEM_VENDOR_SPECIFIC_PAYLOAD) {
		uint32_t vendor_id = ntohl(*((uint32_t *) msgbuf));
		int type = ntohs(*((uint16_t *) (msgbuf + 4)));
		cw_format_vendor(vendor_details, vendor_id, type, msgbuf);
		sprintf(vendorname, "%s/%s/%s",
			cw_strelemp(conn->actions, msgelem),
			(char *) cw_strvendor(vendor_id), vendor_details);
		elemname = vendorname;

	} else {
		elemname = cw_strelemp(conn->actions, msgelem);
	}


	if (!cw_dbg_is_level(DBG_ELEM_DMP)){
		cw_dbg(DBG_ELEM, "%d (%s), len=%d",
		       msgelem, elemname, len);
	}
	else{
		char *dmp = cw_dbg_mkdmp(msgbuf,len);

		cw_dbg(DBG_ELEM, "%d (%s), len=%d%s%s",
			msgelem, 
			elemname, 
			len, 
			get_dbg_color_ontext(DBG_ELEM_DMP),
			dmp);

		free(dmp);
	}
}