]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip: Use hash for contact object identity instead of Contact URI. 12/1212/1
authorJoshua Colp <jcolp@digium.com>
Tue, 8 Sep 2015 12:21:11 +0000 (09:21 -0300)
committerJoshua Colp <jcolp@digium.com>
Tue, 8 Sep 2015 12:23:28 +0000 (09:23 -0300)
In the wild it is possible for Contact URIs to be quite long as
parameters can exist on them. This can present a problem when storing
them in the AstDB as the URI is used as part of the object name and
there is a fixed length limit for the AstDB. This will cause
the contact to not get stored.

This change uses the MD5 hash of the Contact URI as part of the
object name instead. This has a fixed length which is guaranteed
to not exceed the AstDB length limit.

ASTERISK-25295 #close

Change-Id: Ie8252a75331ca00b41b9f308f42cc1fbdf701a02

res/res_pjsip/location.c

index d87410d3bd9640a024191486c5b0cfbe6ceb9f71..c3e665e0c2107f38792864ed4d9c7cdf10cf0254 100644 (file)
@@ -234,8 +234,10 @@ int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri,
 {
        char name[MAX_OBJECT_FIELD * 2 + 3];
        RAII_VAR(struct ast_sip_contact *, contact, NULL, ao2_cleanup);
+       char hash[33];
 
-       snprintf(name, sizeof(name), "%s;@%s", ast_sorcery_object_get_id(aor), uri);
+       ast_md5_hash(hash, uri);
+       snprintf(name, sizeof(name), "%s;@%s", ast_sorcery_object_get_id(aor), hash);
 
        if (!(contact = ast_sorcery_alloc(ast_sip_get_sorcery(), "contact", name))) {
                return -1;