mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Make outbound Google Voice calls.
This patch allows for outbound Google Voice calls to be dialed from Asterisk using chan_gtalk. Below is an example dialstring. exten -> blah,1,Dial(Gtalk/asterisk/+15552225555@voice.google.com,,) In this example, 'asterisk' is the jabber.conf profile configured to connect to your gmail account. In order to receive Google Voice calls make sure to enable 'allowguest=yes' in gtalk.conf. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@290973 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -99,6 +99,8 @@ enum gtalk_client_type { | ||||
| 	AJI_CLIENT_UNKNOWN, | ||||
| 	AJI_CLIENT_GTALK,		/*!< Remote client type is GoogleTalk */ | ||||
| 	AJI_CLIENT_GMAIL,		/*!< Remote client type is Gmail */ | ||||
| 	AJI_CLIENT_GOOGLE_VOICE,/*!< Remote client type is Google Voice*/ | ||||
|  | ||||
| }; | ||||
|  | ||||
| struct gtalk_pvt { | ||||
| @@ -442,7 +444,9 @@ static int gtalk_invite(struct gtalk_pvt *p, char *to, char *from, char *sid, in | ||||
| 	iks_insert_attrib(gtalk, "id", sid); | ||||
| 	iks_insert_node(iq, gtalk); | ||||
| 	iks_insert_node(gtalk, dcodecs); | ||||
| 	iks_insert_node(gtalk, transport); | ||||
| 	if (p->ctype != AJI_CLIENT_GOOGLE_VOICE) { | ||||
| 		iks_insert_node(gtalk, transport); | ||||
| 	} | ||||
| 	iks_insert_node(dcodecs, payload_telephone); | ||||
|  | ||||
| 	ast_aji_send(client->connection, iq); | ||||
| @@ -950,6 +954,7 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const | ||||
| 	char idroster[200]; | ||||
| 	char *data, *exten = NULL; | ||||
| 	struct ast_sockaddr bindaddr_tmp; | ||||
| 	enum gtalk_client_type ctype = AJI_CLIENT_UNKNOWN; | ||||
|  | ||||
| 	ast_debug(1, "The client is %s for alloc\n", client->name); | ||||
| 	if (!sid && !strchr(them, '/')) {	/* I started call! */ | ||||
| @@ -970,6 +975,12 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const | ||||
| 		} | ||||
| 		if (resources) { | ||||
| 			snprintf(idroster, sizeof(idroster), "%s/%s", them, resources->resource); | ||||
| 			if (strstr(resources->resource, "gmail")) { | ||||
| 				ctype = AJI_CLIENT_GMAIL; | ||||
| 			} | ||||
| 		} else if ((*them == '+') || (strstr(them, "@voice.google.com"))) { | ||||
| 			snprintf(idroster, sizeof(idroster), "%s/srvres", them); | ||||
| 			ctype = AJI_CLIENT_GOOGLE_VOICE; | ||||
| 		} else { | ||||
| 			ast_log(LOG_ERROR, "no gtalk capable clients to talk to.\n"); | ||||
| 			return NULL; | ||||
| @@ -979,7 +990,7 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	/* set client type to unknown until we have more info */ | ||||
| 	tmp->ctype = AJI_CLIENT_UNKNOWN; | ||||
| 	tmp->ctype = ctype; | ||||
|  | ||||
| 	memcpy(&tmp->prefs, &client->prefs, sizeof(struct ast_codec_pref)); | ||||
|  | ||||
| @@ -1216,8 +1227,9 @@ static int gtalk_newcall(struct gtalk *client, ikspak *pak) | ||||
|  | ||||
| 	/* Make sure our new call doesn't exist yet */ | ||||
| 	from = iks_find_attrib(pak->x,"to"); | ||||
| 	if(!from) | ||||
| 	if(!from) { | ||||
| 		from = client->connection->jid->full; | ||||
| 	} | ||||
|  | ||||
| 	while (tmp) { | ||||
| 		if (iks_find_with_attrib(pak->x, "session", "id", tmp->sid) || !strcmp(iks_find_attrib(pak->query, "id"), tmp->sid)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user