[asterisk-commits] phsultan: branch 1.6.0 r118021 - in /branches/1.6.0: ./ channels/ res/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri May 23 06:02:23 CDT 2008
Author: phsultan
Date: Fri May 23 06:02:21 2008
New Revision: 118021
URL: http://svn.digium.com/view/asterisk?view=rev&rev=118021
Log:
Merged revisions 118020 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r118020 | phsultan | 2008-05-23 12:33:21 +0200 (Fri, 23 May 2008) | 15 lines
- remove whitespaces between tags in received XML packets before giving
them to the parser ;
- report Gtalk error messages from a buddy to the console.
This patch makes Asterisk "Google Jingle" (chan_gtalk) implementation
work with Empathy. Note that this is only true for audio streams, not
video.
Thank you to PH for his great help!
(closes issue #12647)
Reported by: PH
Patches:
trunk-12647-1.diff uploaded by phsultan (license 73)
Tested by: phsultan, PH
........
Modified:
branches/1.6.0/ (props changed)
branches/1.6.0/channels/chan_gtalk.c
branches/1.6.0/res/res_jabber.c
Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.0/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/channels/chan_gtalk.c?view=diff&rev=118021&r1=118020&r2=118021
==============================================================================
--- branches/1.6.0/channels/chan_gtalk.c (original)
+++ branches/1.6.0/channels/chan_gtalk.c Fri May 23 06:02:21 2008
@@ -1699,7 +1699,10 @@
{
struct gtalk *client = ASTOBJ_REF((struct gtalk *) data);
- if (iks_find_with_attrib(pak->x, "session", "type", "initiate")) {
+ if (iks_find_attrib(pak->x, "type") && !strcmp(iks_find_attrib (pak->x, "type"),"error")) {
+ ast_log(LOG_NOTICE, "Remote peer reported an error, trying to establish the call anyway\n");
+ }
+ else if (iks_find_with_attrib(pak->x, "session", "type", "initiate")) {
/* New call */
gtalk_newcall(client, pak);
} else if (iks_find_with_attrib(pak->x, "session", "type", "candidates") || iks_find_with_attrib(pak->x, "session", "type", "transport-info")) {
Modified: branches/1.6.0/res/res_jabber.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/res/res_jabber.c?view=diff&rev=118021&r1=118020&r2=118021
==============================================================================
--- branches/1.6.0/res/res_jabber.c (original)
+++ branches/1.6.0/res/res_jabber.c Fri May 23 06:02:21 2008
@@ -35,6 +35,7 @@
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+#include <ctype.h>
#include <iksemel.h>
#include "asterisk/channel.h"
@@ -638,23 +639,53 @@
{
int len, ret;
char buf[NET_IO_BUF_SIZE -1];
+ char newbuf[NET_IO_BUF_SIZE -1];
+ int pos = 0;
+ int newbufpos = 0;
+ unsigned char c;
memset(buf, 0, sizeof(buf));
+ memset(newbuf, 0, sizeof(newbuf));
while (1) {
len = aji_io_recv(client, buf, NET_IO_BUF_SIZE - 1, timeout);
if (len < 0) return IKS_NET_RWERR;
if (len == 0) return IKS_NET_EXPIRED;
buf[len] = '\0';
-
+
+ /* our iksemel parser won't work as expected if we feed
+ it with XML packets that contain multiple whitespace
+ characters between tags */
+ while (pos < len) {
+ c = buf[pos];
+ /* if we stumble on the ending tag character,
+ we skip any whitespace that follows it*/
+ if (c == '>') {
+ while (isspace(buf[pos+1])) {
+ pos++;
+ }
+ }
+ newbuf[newbufpos] = c;
+ newbufpos ++;
+ pos++;
+ }
+ pos = 0;
+ newbufpos = 0;
+
/* Log the message here, because iksemel's logHook is
unaccessible */
aji_log_hook(client, buf, len, 1);
-
- ret = iks_parse(client->p, buf, len, 0);
+
+ /* let iksemel deal with the string length,
+ and reset our buffer */
+ ret = iks_parse(client->p, newbuf, 0, 0);
+ memset(newbuf, 0, sizeof(newbuf));
+
if (ret != IKS_OK) {
+ ast_log(LOG_WARNING, "XML parsing failed\n");
return ret;
}
+ ast_debug(3, "XML parsing successful\n");
}
return IKS_OK;
}
More information about the asterisk-commits
mailing list