Index: channels/chan_gtalk.c =================================================================== --- channels/chan_gtalk.c (revision 48810) +++ channels/chan_gtalk.c (working copy) @@ -827,7 +827,7 @@ struct aji_resource *resources = NULL; struct aji_buddy *buddy; char idroster[200]; - char *data, *exten = NULL; + char *data = NULL, *exten = NULL; if (option_debug) ast_log(LOG_DEBUG, "The client is %s for alloc\n", client->name); @@ -873,7 +873,7 @@ } if(strchr(tmp->us, '/')) { - data = ast_strdupa((char *) tmp->us); + data = ast_strdup((char *) tmp->us); exten = strsep(&data, "/"); } else exten = tmp->us; @@ -895,6 +895,7 @@ int fmt; int what; const char *n2; + char *data = NULL, *cid = NULL; if (title) n2 = title; @@ -954,9 +955,19 @@ ast_copy_string(tmp->exten, i->exten, sizeof(tmp->exten)); /* Don't use ast_set_callerid() here because it will * generate a needless NewCallerID event */ - tmp->cid.cid_num = ast_strdup(i->cid_num); - tmp->cid.cid_ani = ast_strdup(i->cid_num); - tmp->cid.cid_name = ast_strdup(i->cid_name); + if (!strcasecmp(client->name, "guest")) { + if (strchr(i->them, '/')) { + data = ast_strdup((char *)i->them); + cid = strsep(&data, "/"); + } else + cid = i->them; + } else { + cid = client->user; + } + cid = strsep(&cid, "@"); + tmp->cid.cid_num = ast_strdup(cid); + tmp->cid.cid_ani = ast_strdup(cid); + tmp->cid.cid_name = ast_strdup(i->them); if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s")) tmp->cid.cid_dnid = ast_strdup(i->exten); tmp->priority = 1; @@ -969,6 +980,8 @@ tmp = NULL; } + if (data) + free(data); return tmp; }