mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	Introduce t.38 parameters control functionality not full but enough for
Send/RcvFax support Introduce t.38 controls between asterisk core and channel/proto layers. Not all parameters are transferred from proto layers but *Fax apps tested and work ok. (issue #18693) Reported by: benngard2 Patches: issue-18693.patch uploaded by may213 (license 454) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@310734 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -514,6 +514,7 @@ static struct ooh323_pvt *ooh323_alloc(int callref, char *callToken) | ||||
| 	} | ||||
|  | ||||
| 	ast_udptl_set_error_correction_scheme(pvt->udptl, UDPTL_ERROR_CORRECTION_NONE); | ||||
| 	ast_udptl_set_far_max_datagram(pvt->udptl, 144); | ||||
| 	pvt->faxmode = 0; | ||||
| 	pvt->t38support = gT38Support; | ||||
| 	pvt->rtptimeout = gRTPTimeout; | ||||
| @@ -4131,11 +4132,14 @@ void setup_udptl_connection(ooCallData *call, const char *remoteIp, | ||||
| 	them.sin_port = htons(remotePort); | ||||
| 	ast_sockaddr_from_sin(&them_addr, &them); | ||||
| 	ast_udptl_set_peer(p->udptl, &them_addr); | ||||
| 	ast_udptl_set_tag(p->udptl, p->owner->name); | ||||
| 	p->t38_tx_enable = 1; | ||||
| 	p->lastTxT38 = time(NULL); | ||||
| 	if (p->t38support == T38_ENABLED) { | ||||
| 		struct ast_control_t38_parameters parameters = { .request_response = 0 }; | ||||
| 		parameters.request_response = AST_T38_NEGOTIATED; | ||||
| 		parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl); | ||||
| 		parameters.rate = AST_T38_RATE_14400; | ||||
| 		ast_queue_control_data(p->owner, AST_CONTROL_T38_PARAMETERS, ¶meters, sizeof(parameters)); | ||||
| 	} | ||||
| 	if (gH323Debug) | ||||
| @@ -4325,6 +4329,16 @@ void onModeChanged(ooCallData *call, int t38mode) { | ||||
|  | ||||
| 			struct ast_control_t38_parameters parameters = { .request_response = 0 }; | ||||
| 			parameters.request_response = AST_T38_REQUEST_NEGOTIATE; | ||||
| 			if (call->T38FarMaxDatagram) { | ||||
| 				ast_udptl_set_far_max_datagram(p->udptl, call->T38FarMaxDatagram); | ||||
| 			} else { | ||||
| 				ast_udptl_set_far_max_datagram(p->udptl, 144); | ||||
| 			} | ||||
| 			if (call->T38Version) { | ||||
| 				parameters.version = call->T38Version; | ||||
| 			} | ||||
| 			parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl); | ||||
| 			parameters.rate = AST_T38_RATE_14400; | ||||
| 			ast_queue_control_data(p->owner, AST_CONTROL_T38_PARAMETERS,  | ||||
| 							¶meters, sizeof(parameters)); | ||||
| 			p->faxmode = 1; | ||||
| @@ -4334,6 +4348,8 @@ void onModeChanged(ooCallData *call, int t38mode) { | ||||
| 		if (p->t38support == T38_ENABLED) { | ||||
| 			struct ast_control_t38_parameters parameters = { .request_response = 0 }; | ||||
| 			parameters.request_response = AST_T38_REQUEST_TERMINATE; | ||||
| 			parameters.max_ifp = ast_udptl_get_far_max_ifp(p->udptl); | ||||
| 			parameters.rate = AST_T38_RATE_14400; | ||||
| 			ast_queue_control_data(p->owner, AST_CONTROL_T38_PARAMETERS,  | ||||
| 							¶meters, sizeof(parameters)); | ||||
| 		} | ||||
|   | ||||
| @@ -214,6 +214,8 @@ typedef struct OOH323CallData { | ||||
|    ASN1UINT8		requestSequence; | ||||
|    ASN1UINT		reqFlags; | ||||
|    ASN1UINT		t38sides; | ||||
|    int			T38FarMaxDatagram; | ||||
|    int			T38Version; | ||||
|    H235TimeStamp	alertingTime, connectTime, endTime; /* time data for gatekeeper */ | ||||
|    FastStartResponse    *pFastStartRes; /* fast start response */ | ||||
|    struct OOH323Regex*		rtpMask; | ||||
|   | ||||
| @@ -2710,6 +2710,12 @@ int ooAddRemoteDataApplicationCapability(OOH323CallData *call, | ||||
|    switch(dataCap->application.t) | ||||
|    { | ||||
|    case T_H245DataApplicationCapability_application_t38fax: | ||||
|       if (dataCap->application.u.t38fax->t38FaxProfile.m.t38FaxUdpOptionsPresent) { | ||||
|       	call->T38FarMaxDatagram = dataCap->application.u.t38fax->t38FaxProfile.t38FaxUdpOptions.t38FaxMaxDatagram; | ||||
|       } | ||||
|       if (dataCap->application.u.t38fax->t38FaxProfile.m.versionPresent) { | ||||
|       	call->T38Version = dataCap->application.u.t38fax->t38FaxProfile.version; | ||||
|       } | ||||
|       return ooCapabilityAddT38Capability(call, OO_T38, | ||||
|                             		     dir, NULL, NULL, NULL, NULL,TRUE); | ||||
|    default: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user