Beispiel #1
0
void cw_dbg_msg(int level,struct conn *conn, uint8_t * packet, int len,struct sockaddr *from)
{
	if (!cw_dbg_is_level(level))
		return;

	char buf[1024];
	char *s = buf;



	uint8_t * msgptr = cw_get_hdr_msg_ptr(packet);
//	int pplen = len - (msgptr-packet);

	int msg_id=cw_get_msg_id(msgptr);
	s+=sprintf(s,"%s Message (type=%d) ",cw_strmsg(msg_id),msg_id);
	if ( level == DBG_MSG_IN ) 
		s+=sprintf(s,"from %s ",sock_addr2str(from));
	else
		s+=sprintf(s,"to %s ",sock_addr2str(from));

	s+=sprintf(s,", Seqnum: %d ElemLen: %d",cw_get_msg_seqnum(msgptr),cw_get_msg_elems_len(msgptr));

//abort:
	cw_dbg(level,"%s",buf);
}
Beispiel #2
0
void cw_dbg_pkt_nc(int level,struct netconn *nc, uint8_t * packet, int len,struct sockaddr *from)
{
	if (!cw_dbg_is_level(level))
		return;

	char buf[1024];
	cw_format_pkt_hdr(buf,level,NULL,packet,len,from);

	int hlen = cw_get_hdr_msg_offset(packet);

	if (cw_dbg_is_level(DBG_PKT_DMP)){
		char  *dmp = cw_dbg_mkdmp_c(packet,len,hlen);
		cw_dbg(level,"%s%s",buf,dmp);
		free(dmp);
	}
	else
		cw_dbg(level,"%s",buf);
}
Beispiel #3
0
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);
	}
}
Beispiel #4
0
void cw_dbg_version_subelem(int level,const char*context,int subtype,bstrv_t vstr)
{
	if ( !cw_dbg_is_level(level))
		return;
	if (!vstr) 
		return;
	char v[256];
	cw_format_version(v,vstr,"");
	cw_dbg(level,"%s: SubType %d, %s",context,subtype,v);
		
}
Beispiel #5
0
void cw_dbg_dmp_(int level, const char *file, int line,
		     const uint8_t * data, int len, const char *format, ...)
{
	if (!cw_dbg_is_level(level))
		return;


	char  *dmp = cw_dbg_mkdmp(data,len);
	cw_dbg(level,"%s%s",format,dmp);
	free(dmp);


}
Beispiel #6
0
static void dtls_log_cb(int level, const char * str)
{
	char buf[2048];
	char *c;
	if (!cw_dbg_is_level(DBG_DTLS_DETAIL))
		return;

/*	switch (level){
		case 2:
		case 6:
		case 4:
			return;
	}
*/
	strcpy(buf,str);
	c = strchr(buf,'\n');
	*c=0;
	cw_dbg(DBG_DTLS_DETAIL,"%s",buf);
}
Beispiel #7
0
/**
 * Put a list of missing mandatory message elements to debug output
 */
void cw_dbg_missing_mand(int level, struct conn *conn, cw_action_in_t ** ml, int n,
			 cw_action_in_t * a)
{
//	if (!cw_dbg_is_level(DBG_MSG_ERR) || n == 0)
//		return;

	if ( !cw_dbg_is_level(level) || n==0)
		return;

	char buffer[2000];
	char *p = buffer;
	int i;
	char *delim = "";
	for (i = 0; i < n; i++) {
		p += sprintf(p, "%s", delim);
		delim = ", ";
		p += sprintf(p, "%s", cw_strelemp(conn->actions, ml[i]->elem_id));
	}
	cw_dbg(level, "Missing mandatory elements: [%s]", buffer);
}
Beispiel #8
0
void cw_dbg_colored(int level, const char *file, int line, const char *format, ...)
{

	if (!(cw_dbg_is_level(level)))
		return;

	char fbuf[1024];

	sprintf(fbuf, "DBG:%s%s %s%s%s",
		get_dbg_color_on(level),
		get_dbg_prefix(level),
		get_dbg_color_ontext(level),
		format,
		get_dbg_color_off(level)
		);
		

	va_list args;
	va_start(args, format);
	cw_log_vcb(level,fbuf,args);
	va_end(args);

}
static int cw_read_wtp_descriptor_versions(mbag_t mbag, uint8_t * data,
					   int len, int silent)
{
	int i = 0;
	while (i<len) {

		if (i + 8 > len) {
			if (!silent)
				cw_dbg(DBG_ELEM_ERR,
				       "WTP descriptor subelement to long, length=%d>%d",
				       i + 8, len);
			return 0;
		}

		uint32_t vendor_id = cw_get_dword(data + i);
		uint32_t val = cw_get_dword(data + i + 4);

		int subtype = (val >> 16) & 0xffff;
		int sublen = val & 0xffff;
		i += 8;

		if (sublen + i > len) {
			if (!silent)
				cw_dbg(DBG_ELEM_ERR,
				       "WTP Descriptor sub-element too long, length = %d",
				       sublen);
			return 0;
		}

		if (!silent) {
			char *dmp;
			char *dmpmem = NULL;
			if (cw_dbg_is_level(DBG_SUBELEM_DMP)) {
				dmpmem = cw_dbg_mkdmp(data + i, sublen);
				dmp = dmpmem;
			} else
				dmp = "";
			cw_dbg(DBG_SUBELEM, "WTP Descriptor subtype=%d,len=%d%s", subtype,
			       sublen, dmp);

			if (dmpmem)
				free(dmpmem);
		}

		switch (subtype) {
			case CW_SUBELEM_WTP_HARDWARE_VERSION:
/*
				mbag_set_dword(mbag,
						       CW_ITEM_WTP_HARDWARE_VENDOR,
						       vendor_id);
				mbag_set_bstrn(mbag,
						       CW_ITEM_WTP_HARDWARE_VERSION,
						       data + i, sublen);
*/

				mbag_set_vendorstr(mbag,
							   CW_ITEM_WTP_HARDWARE_VERSION,
							   vendor_id, data + i, sublen);

				break;
			case CW_SUBELEM_WTP_SOFTWARE_VERSION:

				mbag_set_vendorstr(mbag,
							   CW_ITEM_WTP_SOFTWARE_VERSION,
							   vendor_id, data + i, sublen);
/*
				mbag_set_dword(mbag,
						       CW_ITEM_WTP_SOFTWARE_VENDOR,
						       vendor_id);
				mbag_set_bstrn(mbag,
						       CW_ITEM_WTP_SOFTWARE_VERSION,
						       data + i, sublen);

*/
				break;
			case CW_SUBELEM_WTP_BOOTLOADER_VERSION:

				mbag_set_vendorstr(mbag,
							   CW_ITEM_WTP_BOOTLOADER_VERSION,
							   vendor_id, data + i, sublen);

/*
				mbag_set_dword(mbag,
						       CW_ITEM_WTP_BOOTLOADER_VENDOR,
						       vendor_id);
				mbag_set_bstrn(mbag,
						       CW_ITEM_WTP_BOOTLOADER_VERSION,
						       data + i, sublen);
*/
				break;
			default:
				if (!silent)
					cw_dbg(DBG_ELEM_ERR,
					       "Unknown WTP descriptor subelement, type = %d",
					       subtype);
				break;
		}
		i += sublen;

	} //while (i < len);

	return 1;

}