mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Fix G.729 name annoucement to Open H.323 and inform Asterisk's RTP stack specifically which codec we are expecting.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4508 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -1166,15 +1166,25 @@ struct rtp_info *external_rtp_create(unsigned call_reference, const char * token | ||||
|  | ||||
| int progress(unsigned call_reference, const char *token, int inband); | ||||
|  | ||||
| /** | ||||
|  * Definition taken from rtp.c for rtpPayloadType because we need it here. | ||||
|  */ | ||||
| struct rtpPayloadType { | ||||
| 	int isAstFormat;        /* whether the following code is an AST_FORMAT */ | ||||
| 	int code; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|   * Call-back function passing remote ip/port information from H.323 to asterisk  | ||||
|   * | ||||
|   * Returns nothing  | ||||
|   */ | ||||
| void setup_rtp_connection(unsigned call_reference, const char *remoteIp, int remotePort, const char *token) | ||||
| void setup_rtp_connection(unsigned call_reference, const char *remoteIp, int remotePort, const char *token, int pt) | ||||
| { | ||||
| 	struct oh323_pvt *pvt = NULL; | ||||
| 	struct sockaddr_in them; | ||||
| 	struct rtpPayloadType rtptype; | ||||
| 	int fmt; | ||||
|  | ||||
| 	/* Find the call or allocate a private structure if call not found */ | ||||
| 	pvt = find_call(call_reference, token);  | ||||
| @@ -1182,6 +1192,19 @@ void setup_rtp_connection(unsigned call_reference, const char *remoteIp, int rem | ||||
| 		ast_log(LOG_ERROR, "Something is wrong: rtp\n"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	rtptype = ast_rtp_lookup_pt(pvt->rtp, pt); | ||||
|  | ||||
| 	fmt = ast_best_codec(pvt->owner->nativeformats); | ||||
|  | ||||
| 	ast_mutex_lock(&pvt->lock); | ||||
| 	pvt->owner->nativeformats = rtptype.code; | ||||
| 	pvt->owner->readformat = fmt; | ||||
| 	pvt->owner->writeformat = fmt; | ||||
| 	ast_set_read_format(pvt->owner, pvt->owner->readformat); | ||||
| 	ast_set_write_format(pvt->owner, pvt->owner->writeformat); | ||||
| 	ast_mutex_unlock(&pvt->lock); | ||||
|  | ||||
| 	them.sin_family = AF_INET; | ||||
| 	/* only works for IPv4 */ | ||||
| 	them.sin_addr.s_addr = inet_addr(remoteIp);  | ||||
| @@ -1191,6 +1214,7 @@ void setup_rtp_connection(unsigned call_reference, const char *remoteIp, int rem | ||||
| 	if (pvt->options.progress_audio) { | ||||
| 		progress(call_reference, token, 1); | ||||
| 	} | ||||
|  | ||||
| 	return; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -83,13 +83,9 @@ void MyProcess::Main() | ||||
| 	PTrace::Initialise(0, NULL, PTrace::Timestamp | PTrace::Thread | PTrace::FileAndLine); | ||||
| } | ||||
|  | ||||
| #define H323_G7231 OPAL_G7231_6k3 "{sw}" | ||||
| #define H323_G729 OPAL_G729 "{sw}" | ||||
| #define H323_G729A OPAL_G729A "{sw}" | ||||
|  | ||||
| H323_REGISTER_CAPABILITY(H323_G7231Capability, H323_G7231); | ||||
| H323_REGISTER_CAPABILITY(AST_G729Capability,  H323_G729); | ||||
| H323_REGISTER_CAPABILITY(AST_G729ACapability, H323_G729A); | ||||
| H323_REGISTER_CAPABILITY(H323_G7231Capability, OPAL_G7231); | ||||
| H323_REGISTER_CAPABILITY(AST_G729Capability,  OPAL_G729); | ||||
| H323_REGISTER_CAPABILITY(AST_G729ACapability, OPAL_G729A); | ||||
|  | ||||
| H323_G7231Capability::H323_G7231Capability(BOOL annexA_) | ||||
|   : H323AudioCapability(7, 4) | ||||
| @@ -120,7 +116,7 @@ PObject * H323_G7231Capability::Clone() const | ||||
|  | ||||
| PString H323_G7231Capability::GetFormatName() const | ||||
| { | ||||
|   	return H323_G7231; | ||||
|   	return OPAL_G7231; | ||||
| } | ||||
|  | ||||
| unsigned H323_G7231Capability::GetSubType() const | ||||
| @@ -172,7 +168,7 @@ unsigned AST_G729Capability::GetSubType() const | ||||
|  | ||||
| PString AST_G729Capability::GetFormatName() const | ||||
| { | ||||
|   	return H323_G729; | ||||
|   	return OPAL_G729; | ||||
| } | ||||
|  | ||||
| H323Codec * AST_G729Capability::CreateCodec(H323Codec::Direction direction) const | ||||
| @@ -197,7 +193,7 @@ unsigned AST_G729ACapability::GetSubType() const | ||||
|  | ||||
| PString AST_G729ACapability::GetFormatName() const | ||||
| { | ||||
|   	return H323_G729A; | ||||
|   	return OPAL_G729A; | ||||
| } | ||||
|  | ||||
| H323Codec * AST_G729ACapability::CreateCodec(H323Codec::Direction direction) const | ||||
| @@ -945,7 +941,7 @@ BOOL MyH323_ExternalRTPChannel::Start(void) | ||||
|  | ||||
| 	/* Notify Asterisk of remote RTP information */ | ||||
| 	on_start_rtp_channel(connection.GetCallReference(), (const char *)remoteIpAddr.AsString(), remotePort,  | ||||
| 		(const char *)connection.GetCallToken()); | ||||
| 		(const char *)connection.GetCallToken(), (int)payloadCode); | ||||
| 	return TRUE; | ||||
| } | ||||
|  | ||||
| @@ -965,7 +961,7 @@ BOOL MyH323_ExternalRTPChannel::OnReceivedAckPDU(const H245_H2250LogicalChannelA | ||||
| 			cout << "		-- remotePort: " << remotePort << endl; | ||||
| 		} | ||||
| 		on_start_rtp_channel(connection.GetCallReference(), (const char *)remoteIpAddress.AsString(), | ||||
| 				remotePort, (const char *)connection.GetCallToken()); | ||||
| 				remotePort, (const char *)connection.GetCallToken(), (int)payloadCode); | ||||
| 		return TRUE; | ||||
| 	} | ||||
| 	return FALSE; | ||||
|   | ||||
| @@ -99,6 +99,8 @@ typedef struct call_details { | ||||
| 	char *call_source_name; | ||||
| 	char *call_source_e164; | ||||
| 	char *call_dest_e164; | ||||
| 	int presentation; | ||||
| 	int screening; | ||||
| 	char *sourceIp; | ||||
| } call_details_t; | ||||
|  | ||||
| @@ -119,7 +121,7 @@ extern on_rtp_cb on_external_rtp_create; | ||||
|  | ||||
| /* This is a callback prototype function, called to send | ||||
|    the remote IP and RTP port from H.323 to Asterisk */  | ||||
| typedef void (*start_rtp_cb)(unsigned int, const char *, int, const char *); | ||||
| typedef void (*start_rtp_cb)(unsigned int, const char *, int, const char *, int); | ||||
| extern start_rtp_cb on_start_rtp_channel;  | ||||
|  | ||||
| /* This is a callback that happens when call progress is | ||||
|   | ||||
		Reference in New Issue
	
	Block a user