Index: rtp.c =================================================================== RCS file: /usr/cvsroot/asterisk/rtp.c,v retrieving revision 1.120 retrieving revision 1.122 diff -u -r1.120 -r1.122 --- rtp.c 4 Apr 2005 02:13:40 -0000 1.120 +++ rtp.c 6 Apr 2005 03:43:59 -0000 1.122 @@ -805,7 +805,7 @@ } /* Looks up an RTP code out of our *static* outbound list */ -int ast_rtp_lookup_code(struct ast_rtp* rtp, int isAstFormat, int code) { +int ast_rtp_lookup_code(struct ast_rtp* rtp, const int isAstFormat, const int code) { int pt; @@ -838,7 +838,7 @@ return -1; } -char* ast_rtp_lookup_mime_subtype(int isAstFormat, int code) { +char* ast_rtp_lookup_mime_subtype(const int isAstFormat, const int code) { int i; @@ -848,6 +848,41 @@ } } return ""; +} + +char *ast_rtp_lookup_mime_multiple(char *buf, int size, const int capability, const int isAstFormat) +{ + int format; + unsigned len; + char *end = buf; + char *start = buf; + + if (!buf || !size) + return NULL; + + snprintf(end, size, "0x%x (", capability); + + len = strlen(end); + end += len; + size -= len; + start = end; + + for (format = 1; format < AST_RTP_MAX; format <<= 1) { + if (capability & format) { + const char *name = ast_rtp_lookup_mime_subtype(isAstFormat, format); + snprintf(end, size, "%s|", name); + len = strlen(end); + end += len; + size -= len; + } + } + + if (start == end) + snprintf(start, size, "nothing)"); + else if (size > 1) + *(end -1) = ')'; + + return buf; } static int rtp_socket(void) Index: include/asterisk/rtp.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/rtp.h,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- include/asterisk/rtp.h 4 Mar 2005 06:47:24 -0000 1.20 +++ include/asterisk/rtp.h 5 Apr 2005 23:34:56 -0000 1.21 @@ -104,6 +104,9 @@ /* Mapping an Asterisk code into a MIME subtype (string): */ char* ast_rtp_lookup_mime_subtype(int isAstFormat, int code); +/* Build a string of MIME subtype names from a capability list */ +char *ast_rtp_lookup_mime_multiple(char *buf, int size, const int capability, const int isAstFormat); + void ast_rtp_setnat(struct ast_rtp *rtp, int nat); int ast_rtp_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc); Index: channels/chan_sip.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v retrieving revision 1.700 retrieving revision 1.701 diff -u -r1.700 -r1.701 --- channels/chan_sip.c 30 Mar 2005 16:28:28 -0000 1.700 +++ channels/chan_sip.c 5 Apr 2005 23:34:56 -0000 1.701 @@ -3012,9 +3012,9 @@ ast_getformatname_multiple(s4, slen, p->jointcapability)); ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n", - ast_getformatname_multiple(s1, slen, noncodeccapability), - ast_getformatname_multiple(s2, slen, peernoncodeccapability), - ast_getformatname_multiple(s3, slen, p->noncodeccapability)); + ast_rtp_lookup_mime_multiple(s1, slen, noncodeccapability, 0), + ast_rtp_lookup_mime_multiple(s2, slen, peernoncodeccapability, 0), + ast_rtp_lookup_mime_multiple(s3, slen, p->noncodeccapability, 0)); } if (!p->jointcapability) { ast_log(LOG_NOTICE, "No compatible codecs!\n");