MT#55283 update signature of dict_get_str

Change-Id: Idf333d65436998777b1e9247304e450f3740672f
pull/2097/head
Richard Fuchs 2 weeks ago
parent b2554a0be3
commit f7b5a4de5b

@ -1198,18 +1198,18 @@ static void ng_list_calls(ng_command_ctx_t *ctx, parser_arg output, long long in
const char *call_query_ng(ng_command_ctx_t *ctx) {
str callid, fromtag, totag;
call_t *call;
parser_arg input = ctx->req;
const ng_parser_t *parser = ctx->parser_ctx.parser;
if (!parser->dict_get_str(input, "call-id", &callid))
str callid = parser->dict_get_str(input, "call-id");
if (!callid.len)
return "No call-id in message";
call = call_get(&callid);
if (!call)
return "Unknown call-id";
parser->dict_get_str(input, "from-tag", &fromtag);
parser->dict_get_str(input, "to-tag", &totag);
str fromtag = parser->dict_get_str(input, "from-tag");
str totag = parser->dict_get_str(input, "to-tag");
ng_call_stats(ctx, call, &fromtag, &totag, NULL);
rwlock_unlock_w(&call->master_lock);
@ -1301,12 +1301,10 @@ static void stop_recording_fn(ng_command_ctx_t *ctx, call_t *call) {
// support alternative usage for "pause" call: either `pause=yes` ...
parser_arg input = ctx->req;
const ng_parser_t *parser = ctx->parser_ctx.parser;
str pause;
if (parser->dict_get_str(input, "pause", &pause)) {
if (!str_cmp(&pause, "yes") || !str_cmp(&pause, "on") || !str_cmp(&pause, "true")) {
pause_recording_fn(ctx, call);
return;
}
str pause = parser->dict_get_str(input, "pause");
if (!str_cmp(&pause, "yes") || !str_cmp(&pause, "on") || !str_cmp(&pause, "true")) {
pause_recording_fn(ctx, call);
return;
}
// ... or `flags=[pause]`
parser_arg item = parser->dict_get_expect(input, "flags", BENCODE_LIST);

@ -2133,8 +2133,8 @@ static size_t ng_printf(struct cli_writer *cw, const char *fmt, ...) {
const char *cli_ng(ng_command_ctx_t *ctx) {
__auto_type parser = ctx->parser_ctx.parser;
str body;
if (!parser->dict_get_str(ctx->req, "body", &body))
str body = parser->dict_get_str(ctx->req, "body");
if (!body.len)
return "No 'body' in message";
g_autoptr(GString) response = g_string_new("");

@ -430,7 +430,7 @@ static void __transform_handler_destroy(struct transform_handler *tfh) {
str result;
__auto_type ret = ng_client_request(&tcc->transform, &STR_LEN(req->str, req->len), memory_arena);
if (!ret || !bencode_dictionary_get_str(ret, "result", &result) || str_cmp(&result, "ok"))
if (!ret || !(result = bencode_dictionary_get_str(ret, "result")).len || str_cmp(&result, "ok"))
ilog(LOG_WARN, "Failed to delete remote 'transform' session");
}
}
@ -708,19 +708,17 @@ static const char *__make_transform_handler(struct codec_handler *handler) {
return "'transform' request to remote peer failed";
// process response
str result;
if (!bencode_dictionary_get_str(ret, "result", &result))
return "'transform' response didn't contain 'result'";
str result = bencode_dictionary_get_str(ret, "result");
if (str_cmp(&result, "ok"))
return "'transform' response didn't indicate success";
str s;
if (!bencode_dictionary_get_str(ret, "call-id", &s))
str s = bencode_dictionary_get_str(ret, "call-id");
if (!s.len)
return "'transform' response didn't contain 'call-id'";
tfh->call_id = call_str_cpy(&s);
if (!bencode_dictionary_get_str(ret, "from-tag", &s))
s = bencode_dictionary_get_str(ret, "from-tag");
if (!s.len)
return "'transform' response didn't contain 'from-tag'";
tfh->tag = call_str_cpy(&s);
@ -734,13 +732,14 @@ static const char *__make_transform_handler(struct codec_handler *handler) {
if (rm->type != BENCODE_DICTIONARY)
return "incorrect type contained in 'media'";
str family, address;
int port = bencode_dictionary_get_integer(rm, "port", 0);
if (port <= 0 || port > 65535)
return "invalid port";
if (!bencode_dictionary_get_str(rm, "family", &family))
str family = bencode_dictionary_get_str(rm, "family");
if (!family.len)
return "'transform' response media didn't contain 'family'";
if (!bencode_dictionary_get_str(rm, "address", &address))
str address = bencode_dictionary_get_str(rm, "address");
if (!address.len)
return "'transform' response media didn't contain 'address'";
__auto_type fam = get_socket_family_rfc(&family);
if (!fam)

@ -220,7 +220,7 @@ static bool json_is_int(JsonNode *n) {
}
return false;
}
static char *json_dict_get_str(JsonNode *dict, const char *entry, str *out) {
static str json_dict_get_str(JsonNode *dict, const char *entry) {
JsonObject *o = json_node_get_object(dict);
if (!o)
goto out;
@ -230,11 +230,9 @@ static char *json_dict_get_str(JsonNode *dict, const char *entry, str *out) {
const char *s = json_node_get_string(n);
if (!s)
goto out;
*out = STR(s);
return out->s;
return STR(s);
out:
*out = STR_NULL;
return NULL;
return STR_NULL;
}
static void json_pretty_print(JsonNode *a, GString *out) {
JsonGenerator *g = json_generator_new();
@ -675,7 +673,7 @@ ng_buffer *ng_buffer_new(struct obj *ref) {
static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, const endpoint_t *sin, char *addr, struct obj *ref,
struct ng_buffer **ngbufp)
{
str cmd = STR_NULL, callid;
str cmd = STR_NULL;
const char *errstr, *resultstr;
GString *log_str;
int64_t cmd_start, cmd_stop, cmd_process_time = {0};
@ -723,12 +721,12 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
command_ctx.resp = parser->dict(&command_ctx.parser_ctx);
assert(command_ctx.resp.gen != NULL);
parser->dict_get_str(command_ctx.req, "command", &cmd);
cmd = parser->dict_get_str(command_ctx.req, "command");
errstr = "Dictionary contains no key \"command\"";
if (!cmd.s)
goto err_send;
parser->dict_get_str(command_ctx.req, "call-id", &callid);
str callid = parser->dict_get_str(command_ctx.req, "call-id");
log_info_str(&callid);
ilogs(control, LOG_INFO, "Received command '"STR_FORMAT"' from %s", STR_FMT(&cmd), addr);

@ -116,7 +116,7 @@ struct ng_parser {
long long (*get_int)(parser_arg);
bool (*is_dict)(parser_arg);
parser_arg (*dict)(ng_parser_ctx_t *);
char *(*dict_get_str)(parser_arg, const char *, str *);
str (*dict_get_str)(parser_arg, const char *);
long long (*dict_get_int_str)(parser_arg, const char *, long long def);
parser_arg (*dict_get_expect)(parser_arg, const char *, bencode_type_t);
bool (*dict_contains)(parser_arg, const char *);

@ -309,9 +309,9 @@ bencode_item_t *bencode_dictionary_get_len(bencode_item_t *dict, const char *key
* valid pointer. The returned string will be valid until dict's bencode_buffer_t object is destroyed. */
INLINE char *bencode_dictionary_get_string(bencode_item_t *dict, const char *key, size_t *len);
/* Identical to bencode_dictionary_get_string() but fills in a "str" struct. Returns str->s, which
* may be NULL. */
INLINE char *bencode_dictionary_get_str(bencode_item_t *dict, const char *key, str *str);
/* Identical to bencode_dictionary_get_string() but returns in a "str" struct.
* Returns NULL str on error. */
INLINE str bencode_dictionary_get_str(bencode_item_t *dict, const char *key);
/* Looks up the given key in the dictionary and compares the corresponding value to the given
* null-terminated string. Returns 2 if the key isn't found or if the value isn't a string, otherwise
@ -482,12 +482,12 @@ INLINE char *bencode_dictionary_get_string(bencode_item_t *dict, const char *key
return val->iov[1].iov_base;
}
INLINE char *bencode_dictionary_get_str(bencode_item_t *dict, const char *key, str *s) {
*s = STR_NULL;
s->s = bencode_dictionary_get_string(dict, key, &s->len);
if (!s->s)
s->len = 0;
return s->s;
INLINE str bencode_dictionary_get_str(bencode_item_t *dict, const char *key) {
str s = STR_NULL;
s.s = bencode_dictionary_get_string(dict, key, &s.len);
if (!s.s)
s.len = 0;
return s;
}
INLINE char *bencode_dictionary_get_string_dup(bencode_item_t *dict, const char *key, size_t *len) {

Loading…
Cancel
Save