--- chan_gtalk.c_original 2008-11-30 08:26:00.000000000 -0500 +++ chan_gtalk.c 2008-12-11 14:57:41.000000000 -0500 @@ -43,6 +43,7 @@ #include #include #include +#include #include "asterisk/lock.h" #include "asterisk/channel.h" @@ -427,7 +428,28 @@ iks_insert_attrib(gtalk, "xmlns", "http://www.google.com/session"); iks_insert_attrib(gtalk, "type",initiator ? "initiate": "accept"); - iks_insert_attrib(gtalk, "initiator", initiator ? from : to); + //send initiator JID back in all lower case + char lowerinitiator[256]; + char *initval, *fromorto; + int initlen; + fromorto = initiator ? from : to; + if ((initlen=strlen(fromorto)) > 255) + initval = fromorto; // not enough room in our fixed length field + else { + initval = lowerinitiator; + char *d = lowerinitiator; + int i, j=0; + for (i=0; i<=initlen; i++) // also move null terminator + if (j) + *d++ = *fromorto++; + else { + char c = tolower(*fromorto++); + *d++ = c; + j = (c == '/'); // stop conversion at the Resource + } + } + iks_insert_attrib(gtalk, "initiator", initval); + // iks_insert_attrib(gtalk, "initiator", initiator ? from : to); iks_insert_attrib(gtalk, "id", sid); iks_insert_node(iq, gtalk); iks_insert_node(gtalk, dcodecs); @@ -464,7 +486,28 @@ ast_aji_increment_mid(p->parent->connection->mid); iks_insert_attrib(session, "type", "transport-accept"); iks_insert_attrib(session, "id", sid); - iks_insert_attrib(session, "initiator", initiator ? from : to); + //send initiator JID back in all lower case + char lowerinitiator[256]; + char *initval, *fromorto; + int initlen; + fromorto = initiator ? from : to; + if ((initlen=strlen(fromorto)) > 255) + initval = fromorto; // not enough room in our fixed length field + else { + initval = lowerinitiator; + char *d = lowerinitiator; + int i, j=0; + for (i=0; i<=initlen; i++) // also move null terminator + if (j) + *d++ = *fromorto++; + else { + char c = tolower(*fromorto++); + *d++ = c; + j = (c == '/'); // stop conversion at the Resource + } + } + iks_insert_attrib(session, "initiator", initval); + // iks_insert_attrib(session, "initiator", initiator ? from : to); iks_insert_attrib(session, "xmlns", "http://www.google.com/session"); iks_insert_attrib(transport, "xmlns", "http://www.google.com/transport/p2p"); iks_insert_node(iq,session); @@ -838,7 +881,28 @@ ast_aji_increment_mid(c->mid); iks_insert_attrib(gtalk, "type", "transport-info"); iks_insert_attrib(gtalk, "id", sid); - iks_insert_attrib(gtalk, "initiator", (p->initiator) ? to : from); + //send initiator JID back in all lower case + char lowerinitiator[256]; + char *initval, *fromorto; + int initlen; + fromorto = p->initiator ? to:from; + if ((initlen=strlen(fromorto)) > 255) + initval = fromorto; // not enough room in our fixed length field + else { + initval = lowerinitiator; + char *d = lowerinitiator; + int i, j=0; + for (i=0; i<=initlen; i++) // also move null terminator + if (j) + *d++ = *fromorto++; + else { + char c = tolower(*fromorto++); + *d++ = c; + j = (c == '/'); // stop conversion at the Resource + } + } + iks_insert_attrib(gtalk, "initiator", initval); + iks_insert_attrib(gtalk, "xmlns", GOOGLE_NS); iks_insert_attrib(candidate, "name", tmp->name); iks_insert_attrib(candidate, "address", tmp->ip); @@ -1058,7 +1122,28 @@ if (session) { iks_insert_attrib(session, "type", action); iks_insert_attrib(session, "id", p->sid); - iks_insert_attrib(session, "initiator", p->initiator ? p->us : p->them); + //send initiator JID back in all lower case + char lowerinitiator[256]; + char *initval, *fromorto; + int initlen; + fromorto = p->initiator ? p->us : p->them; + if ((initlen=strlen(fromorto)) > 255) + initval = fromorto; // not enough room in our fixed length field + else { + initval = lowerinitiator; + char *d = lowerinitiator; + int i, j=0; + for (i=0; i<=initlen; i++) // also move null terminator + if (j) + *d++ = *fromorto++; + else { + char c = tolower(*fromorto++); + *d++ = c; + j = (c == '/'); // stop conversion at the Resource + } + } + iks_insert_attrib(session, "initiator", initval); + iks_insert_attrib(session, "xmlns", "http://www.google.com/session"); iks_insert_node(request, session); ast_aji_send(client->connection, request); @@ -1492,7 +1577,29 @@ ast_aji_increment_mid(client->connection->mid); iks_insert_attrib(gtalk, "xmlns", "http://jabber.org/protocol/gtalk"); iks_insert_attrib(gtalk, "action", "session-info"); - iks_insert_attrib(gtalk, "initiator", p->initiator ? p->us: p->them); + //send initiator JID back in all lower case + char lowerinitiator[256]; + char *initval, *fromorto; + int initlen; + fromorto = p->initiator ? p->us : p->them; + if ((initlen=strlen(fromorto)) > 255) + initval = fromorto; // not enough room in our fixed length field + else { + initval = lowerinitiator; + char *d = lowerinitiator; + int i, j=0; + for (i=0; i<=initlen; i++) // also move null terminator + if (j) + *d++ = *fromorto++; + else { + char c = tolower(*fromorto++); + *d++ = c; + j = (c == '/'); // stop conversion at the Resource + } + } + iks_insert_attrib(gtalk, "initiator", initval); + + // iks_insert_attrib(gtalk, "initiator", p->initiator ? p->us: p->them); iks_insert_attrib(gtalk, "sid", p->sid); iks_insert_attrib(dtmf, "xmlns", "http://jabber.org/protocol/gtalk/info/dtmf"); iks_insert_attrib(dtmf, "code", buffer);