Пример #1
0
int build_appearanceURI(str *display, str *uri, str *call_info_apperance_uri)
{
	unsigned int size;
	int escaped_display_size;
	char *p;
	char escaped_display[256];

	size = display->len + 5 + uri->len + 2;
	if (size > CALL_INFO_APPEARANCE_URI_LEN) {
		LM_WARN("buffer overflow on appearance URI param: size [%d]\n", size);
		p = (char *)pkg_malloc(size);
		if (p == NULL) {
			LM_ERR("OOM\n");
			return -1;
		}
		call_info_apperance_uri->s = p;
	} else {
		p = call_info_apperance_uri->s = call_info_apperance_uri_buf;
	}
	if (display->len<80) {
		escaped_display_size = escape_common(escaped_display, display->s, display->len);
		if (escaped_display_size) {
			memcpy(p, escaped_display, escaped_display_size);
			p += escaped_display_size;
			*p = ' '; p++;
		}
	}
	*p = '<'; p++;
	memcpy(p, uri->s, uri->len);
	p += uri->len;
	*p = '>'; p++;
	call_info_apperance_uri->len = p - call_info_apperance_uri->s;
	/*
	LM_DBG("call_info_apperance_uri [%d:%d][%.*s]\n",
			size, call_info_apperance_uri->len,
			call_info_apperance_uri->len, call_info_apperance_uri->s);
	*/
	return 0;
}
Пример #2
0
static int _tr_eval_sql_val(pv_value_t *val)
{
	int i;
	static char _tr_buffer[TR_BUFFER_SIZE];

	if(val->flags&PV_TYPE_INT || !(val->flags&PV_VAL_STR)) {
		val->rs.s = sint2str(val->ri, &val->rs.len);
		val->flags = PV_VAL_STR;
		return 0;
	}
	if(val->rs.len>TR_BUFFER_SIZE/2-1) {
		LM_ERR("escape buffer to short");
		return -1;
	}
	_tr_buffer[0] = '\'';
	i = escape_common(_tr_buffer+1, val->rs.s, val->rs.len);
	_tr_buffer[++i] = '\'';
	_tr_buffer[++i] = '\0';
	memset(val, 0, sizeof(pv_value_t));
	val->flags = PV_VAL_STR;
	val->rs.s = _tr_buffer;
	val->rs.len = i;
	return 0;
}
Пример #3
0
/*
 * Used when converting a result from the query
 */
int db_unixodbc_val2str(const db1_con_t* _c, const db_val_t* _v, char* _s, int* _len)
{
	int l, tmp;
	char* old_s;

	/* db_unixodbc uses a custom escape function */
	tmp = db_val2str(_c, _v, _s, _len);
	if (tmp < 1)
		return tmp;

	switch(VAL_TYPE(_v))
	{
		case DB1_STRING:
			l = strlen(VAL_STRING(_v));
			if (*_len < (l * 2 + 3))
			{
				LM_ERR("destination buffer too short\n");
				return -6;
			}
			else
			{
				old_s = _s;
				*_s++ = '\'';
				if(use_escape_common)
				{
					_s += escape_common(_s, (char*)VAL_STRING(_v), l);
				} else {
					memcpy(_s, VAL_STRING(_v), l);
					_s += l;
				}
				*_s++ = '\'';
				*_s = '\0'; /* FIXME */
				*_len = _s - old_s;
				return 0;
			}
			break;

		case DB1_STR:
			l = VAL_STR(_v).len;
			if (*_len < (l * 2 + 3))
			{
				LM_ERR("destination buffer too short\n");
				return -7;
			}
			else
			{
				old_s = _s;
				*_s++ = '\'';
				if(use_escape_common)
				{
					_s += escape_common(_s, VAL_STR(_v).s, l);
				} else {
					memcpy(_s, VAL_STR(_v).s, l);
					_s += l;
				}
				*_s++ = '\'';
				*_s = '\0'; /* FIXME */
				*_len = _s - old_s;
				return 0;
			}
			break;

		case DB1_BLOB:
			l = VAL_BLOB(_v).len;
			if (*_len < (l * 2 + 3))
			{
				LM_ERR("destination buffer too short\n");
				return -9;
			}
			else
			{
				old_s = _s;
				*_s++ = '\'';
				if(use_escape_common)
				{
					_s += escape_common(_s, VAL_BLOB(_v).s, l);
				} else {
					memcpy(_s, VAL_BLOB(_v).s, l);
					_s += l;
				}
				*_s++ = '\'';
				*_s = '\0'; /* FIXME */
				*_len = _s - old_s;
				return 0;
			}
			break;

		default:
			LM_DBG("unknown data type\n");
			return -10;
	}
}