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; }
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; }
/* * 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; } }