mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	Added fast start and h.245 tunneling options per user and peer.
Added options for faststart/h.245 tunneling per user/peer, properly handle these and global options, correction of handling fs/tunneling fields in signalling responses (issue #17972) Reported by: salecha Patches: fs-tunnel-per-point-3.patch uploaded by may213 (license 454) Tested by: may213, salecha git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@291005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -188,6 +188,7 @@ static struct ooh323_pvt { | ||||
| 	struct OOH323Regex *rtpmask;	/* rtp ip regexp */ | ||||
| 	char rtpmaskstr[120]; | ||||
| 	int rtdrcount, rtdrinterval;	/* roundtripdelayreq */ | ||||
| 	int faststart, h245tunneling;	/* faststart & h245 tunneling */ | ||||
| 	struct ooh323_pvt *next;	/* Next entity */ | ||||
| } *iflist = NULL; | ||||
|  | ||||
| @@ -214,6 +215,7 @@ struct ooh323_user{ | ||||
| 	struct OOH323Regex	    *rtpmask; | ||||
| 	char	    rtpmaskstr[120]; | ||||
| 	int	    rtdrcount, rtdrinterval; | ||||
| 	int	    faststart, h245tunneling; | ||||
| 	struct ooh323_user *next; | ||||
| }; | ||||
|  | ||||
| @@ -241,6 +243,7 @@ struct ooh323_peer{ | ||||
| 	struct OOH323Regex	    *rtpmask; | ||||
| 	char	    rtpmaskstr[120]; | ||||
| 	int	    rtdrcount,rtdrinterval; | ||||
| 	int	    faststart, h245tunneling; | ||||
| 	struct ooh323_peer *next; | ||||
| }; | ||||
|  | ||||
| @@ -636,6 +639,8 @@ static struct ast_channel *ooh323_request(const char *type, format_t format, | ||||
| 		p->dtmfcodec  = peer->dtmfcodec; | ||||
| 		p->t38support = peer->t38support; | ||||
| 		p->rtptimeout = peer->rtptimeout; | ||||
| 		p->faststart = peer->faststart; | ||||
| 		p->h245tunneling = peer->h245tunneling; | ||||
| 		if (peer->rtpmask && peer->rtpmaskstr[0]) { | ||||
| 			p->rtpmask = peer->rtpmask; | ||||
| 			ast_copy_string(p->rtpmaskstr, peer->rtpmaskstr, sizeof(p->rtpmaskstr)); | ||||
| @@ -665,6 +670,8 @@ static struct ast_channel *ooh323_request(const char *type, format_t format, | ||||
| 		p->capability = gCapability; | ||||
| 		p->rtdrinterval = gRTDRInterval; | ||||
| 		p->rtdrcount = gRTDRCount; | ||||
| 		p->faststart = gFastStart; | ||||
| 		p->h245tunneling = gTunneling; | ||||
|  | ||||
| 		memcpy(&p->prefs, &gPrefs, sizeof(struct ast_codec_pref)); | ||||
| 		p->username = strdup(dest); | ||||
| @@ -914,10 +921,9 @@ static int ooh323_call(struct ast_channel *ast, char *dest, int timeout) | ||||
| 		ast_verbose("---   ooh323_call- %s\n", dest); | ||||
|  | ||||
|  | ||||
|    if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED))  | ||||
|    { | ||||
|    	if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) { | ||||
| 		ast_log(LOG_WARNING, "ooh323_call called on %s, neither down nor " | ||||
| 									"reserved\n", ast->name); | ||||
| 								"reserved\n", ast->name); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	ast_mutex_lock(&p->lock); | ||||
| @@ -972,6 +978,8 @@ static int ooh323_call(struct ast_channel *ast, char *dest, int timeout) | ||||
| 	destination[sizeof(destination)-1]='\0'; | ||||
|  | ||||
| 	opts.transfercap = ast->transfercapability; | ||||
| 	opts.fastStart = p->faststart; | ||||
| 	opts.tunneling = p->h245tunneling; | ||||
|  | ||||
| 	for (i=0;i<480 && !isRunning(p->callToken);i++) usleep(12000); | ||||
|  | ||||
| @@ -1758,6 +1766,18 @@ int ooh323_onReceivedSetup(ooCallData *call, Q931Message *pmsg) | ||||
| 		p->dtmfcodec = user->dtmfcodec; | ||||
| 		p->t38support = user->t38support; | ||||
| 		p->rtptimeout = user->rtptimeout; | ||||
| 		p->h245tunneling = user->h245tunneling; | ||||
| 		p->faststart = user->faststart; | ||||
|  | ||||
| 		if (p->faststart) | ||||
|          		OO_SETFLAG(call->flags, OO_M_FASTSTART); | ||||
| 		else | ||||
| 			OO_CLRFLAG(call->flags, OO_M_FASTSTART); | ||||
| 		if (p->h245tunneling) | ||||
| 			OO_SETFLAG(call->flags, OO_M_TUNNELING); | ||||
| 		else | ||||
| 			OO_CLRFLAG(call->flags, OO_M_TUNNELING); | ||||
|  | ||||
| 		if (user->rtpmask && user->rtpmaskstr[0]) { | ||||
| 			p->rtpmask = user->rtpmask; | ||||
| 			ast_copy_string(p->rtpmaskstr, user->rtpmaskstr,  | ||||
| @@ -2165,6 +2185,8 @@ static struct ooh323_user *build_user(const char *name, struct ast_variable *v) | ||||
| 		user->dtmfmode = gDTMFMode; | ||||
| 		user->dtmfcodec = gDTMFCodec; | ||||
| 		user->t38support = gT38Support; | ||||
| 		user->faststart = gFastStart; | ||||
| 		user->h245tunneling = gTunneling; | ||||
| 		/* set default context */ | ||||
| 		ast_copy_string(user->context, gContext, sizeof(user->context)); | ||||
| 		ast_copy_string(user->accountcode, gAccountcode, sizeof(user->accountcode)); | ||||
| @@ -2182,6 +2204,10 @@ static struct ooh323_user *build_user(const char *name, struct ast_variable *v) | ||||
| 						sizeof(user->accountcode)-1); | ||||
| 			} else if (!strcasecmp(v->name, "roundtrip")) { | ||||
| 				sscanf(v->value, "%d,%d", &user->rtdrcount, &user->rtdrinterval); | ||||
| 			} else if (!strcasecmp(v->name, "faststart")) { | ||||
| 				user->faststart = ast_true(v->value); | ||||
| 			} else if (!strcasecmp(v->name, "h245tunneling")) { | ||||
| 				user->h245tunneling = ast_true(v->value); | ||||
| 			} else if (!strcasecmp(v->name, "rtptimeout")) { | ||||
| 				user->rtptimeout = atoi(v->value); | ||||
| 				if (user->rtptimeout < 0) | ||||
| @@ -2270,6 +2296,8 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v, | ||||
| 		peer->dtmfmode = gDTMFMode; | ||||
| 		peer->dtmfcodec = gDTMFCodec; | ||||
| 		peer->t38support = gT38Support; | ||||
| 		peer->faststart = gFastStart; | ||||
| 		peer->h245tunneling = gTunneling; | ||||
|       		peer->port = 1720; | ||||
| 		if (0 == friend_type) { | ||||
| 			peer->mFriend = 1; | ||||
| @@ -2316,6 +2344,10 @@ static struct ooh323_peer *build_peer(const char *name, struct ast_variable *v, | ||||
| 					peer->outgoinglimit = 0; | ||||
| 			} else if (!strcasecmp(v->name, "accountcode")) { | ||||
| 				ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode)); | ||||
| 			} else if (!strcasecmp(v->name, "faststart")) { | ||||
| 				peer->faststart = ast_true(v->value); | ||||
| 			} else if (!strcasecmp(v->name, "h245tunneling")) { | ||||
| 				peer->h245tunneling = ast_true(v->value); | ||||
| 			} else if (!strcasecmp(v->name, "rtptimeout")) { | ||||
|             			peer->rtptimeout = atoi(v->value); | ||||
|             			if(peer->rtptimeout < 0) | ||||
| @@ -2779,6 +2811,8 @@ static char *handle_cli_ooh323_show_peer(struct ast_cli_entry *e, int cmd, struc | ||||
| 	if (peer) { | ||||
|       sprintf(ip_port, "%s:%d", peer->ip, peer->port); | ||||
|       ast_cli(a->fd, "%-15.15s%s\n", "Name: ", peer->name); | ||||
|       ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", peer->faststart?"yes":"no", | ||||
| 					peer->h245tunneling?"yes":"no"); | ||||
|       ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "("); | ||||
|       print_codec_to_cli(a->fd, &peer->prefs); | ||||
|       ast_cli(a->fd, ")\n"); | ||||
| @@ -2922,6 +2956,8 @@ static char *handle_cli_ooh323_show_user(struct ast_cli_entry *e, int cmd, struc | ||||
|  | ||||
| 	if (user) { | ||||
|       ast_cli(a->fd, "%-15.15s%s\n", "Name: ", user->name); | ||||
|       ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", user->faststart?"yes":"no", | ||||
| 					user->h245tunneling?"yes":"no"); | ||||
|       ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "("); | ||||
|       print_codec_to_cli(a->fd, &user->prefs); | ||||
|       ast_cli(a->fd, ")\n"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user