⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.c

📁 基于h323协议的软phone
💻 C
📖 第 1 页 / 共 4 页
字号:
#include "cm.h"
#include "ci.h"
#include "cmintr.h"
#include "seli.h"
#include "rvwpconfig.h"
#include "configuration.h"
/*#include "msg.h"*/
#include "rvwpct.h"
#include "bepcommon.h"

#include "psyntree.h"
#include "psyntreeDef.h"
#include "rvh323timer.h"

#ifdef INCLUDE_PPPOE_APP
#include "ipphonePPPoE.h"
#include "DoPhoneMenuf.h"
#endif

HAPP    hApp;
HPVT    hVal = NULL;
extern int gatekeeperStatus;

extern unsigned char gkEnabled;
extern char localE164Num[];	/* Terminal's E.164 number */
extern char localH323Id[];		/* Terminal's H.323 Id */

extern char net_config_msg[41];					/* 网络配置后的消息 */
extern int gk_error_msg_index;

#ifdef INCLUDE_PPPOE_APP
extern enum SubStateOfMenuItem CurState;
extern SEM_ID g_sem_pppoe_startedflag;
#endif

char password[16];

#if 0
extern void cmpBuf();
#endif

int reverseIPAddr(int srcIPAddr)
{
	char ipAddr[32];	
	ipAddr[3] = srcIPAddr >> 24;
	ipAddr[2] = (srcIPAddr >> 16) & 0xFF;
	ipAddr[1] = (srcIPAddr >> 8) & 0xFF;
	ipAddr[0] = srcIPAddr & 0xFF;
	return ipAddr[3] + ipAddr[2]*0x100 + ipAddr[1]*0x10000 + ipAddr[0]*0x1000000;
}

extern void startAgentClient();
extern void RebootDSP();
int configRv()
{
	Config cfg;

	/*sys para*/
	SystemConfiguration	system;
	int maxCalls = MAX_CONCURRENT_CALL_NUM;
	int maxChannels = MAX_CONCURRENT_CHAN_NUM;
	int maxRasTransaction = maxCalls * 2 + 10;
	Allocations allocations;
		int maxPoolSizeInKB = 8;
	int localIpAddress;
	CallProperty	callProperty;
		int		copySingleMessage = 1;

	/*RAS para*/
	RasConfigration		RAS;
	int responseTimeOut = 2;
	int manualRAS = 1;
	int allowCallsWhenNonReg = 1;
	int maxFail = 1;
	int manualRegistration = 1;
	ManualDiscovery manualDiscovery;
	TransportAddress GKAddr;
		RegistrationInfo	registrationInfo;
		EndpointType		terminalType;
		Vendor	vendor;
			H221NonStandard		vendorn;
					int		t35CountryCode = COUNTRY_CODE;/*china*/
					int		t35Extension = 0;
					int		manufacturerCode = MANUFACTURER_CODE;
			char*		productId;
			char*		versionId;
		TerminalInfo	terminal;
			NonStandardParameter		nonStandardData;
				NonStandardIdentifier	nonStandardIdentifier;
					
		int		mc = 0;
		int		undefinedNode = 0;

		AliasAddress		terminalAlias[10];
		int				aliasSize = 10;
/*		char*			gatekeeperIdentifier;
		VendorIdentifier*		endpointVendor;*/
		int			timeToLive = 60;
		VendorIdentifier		endpointVendor;
	int rasPort =1739;
	int maxRetries = 6;
	PreGrantedArqUse	preGrantedArqUse;
		int routed = 1;
	int supportAltGK = 1;
	int compare15bitRasCrv = 1;
	int overlappedSending = 1;
	int preTimeToLiveRegistration = 10;

	/*Q931 param*/
	Q931Configuration		Q931;
/*	int responseTimeOut = 15;*/
	int connectTimeOut = 0;
	int callSignalingPort = 1720;
	int responseQ931 = ALERTING_SEC+5;
	int manualAcc = 1;
	int h245Tunneling = 1;

	H245Configuration		h245;
		CapabilitiesConf	capabilities;
			TermianlCapabilitySet	terminalCapabilitySet;
					int		sequenceNumber = 0;
					int		protocolIdentifier = 0;
					MultiplexCapability	multiplexCapability;
						MultipointCapability multipointCapatility;
							MediaDistributionCapability	mediaDistributionCapability;
					CapabilityTableEntry	capabilityTable[10];
					int					tableSize = 0;
					CapabilityDescriptor	capabilityDescriptor[10];
						AlternativeCapabilitySet		simultaneousCapabilities[10];
							int val[10];
					int					descSize = 0;
		ChannelEntry	channels[10];
		
	int temp = 20;
	int g729 = 2;
	int i, index;
	GG7231 g7231;

	localIpAddress = reverseIPAddr(phoneconfig.conf_network.ipaddr);
	
	memset(&cfg, 0, sizeof(Config));

	memset(&system, 0, sizeof(SystemConfiguration));
		memset(&callProperty, 0, sizeof(CallProperty));
		memset(&allocations, 0, sizeof(Allocations));
	memset(&RAS, 0, sizeof(RasConfigration));
	memset(&manualDiscovery, 0, sizeof(ManualDiscovery));
		memset(&registrationInfo, 0, sizeof(RegistrationInfo));
		memset(&terminalType, 0, sizeof(EndpointType));
			memset(&terminal, 0, sizeof(TerminalInfo));
		memset(&vendor, 0, sizeof(Vendor));
	memset(&Q931, 0, sizeof(Q931Configuration));
	memset(&preGrantedArqUse, 0, sizeof(PreGrantedArqUse));
	memset(&h245, 0, sizeof(H245Configuration));
		memset(&capabilities, 0, sizeof(CapabilitiesConf));
			memset(&terminalCapabilitySet, 0, sizeof(TermianlCapabilitySet));
				memset(&multiplexCapability, 0, sizeof(MultiplexCapability));
					memset(&multipointCapatility, 0, sizeof(MultipointCapability));
						memset(&mediaDistributionCapability, 0, sizeof(MediaDistributionCapability));
				memset(&capabilityTable, 0, 10 * sizeof(CapabilityTableEntry));
				memset(&capabilityDescriptor, 0, 10 * sizeof(CapabilityDescriptor));
		memset(&channels, 0, 10 * sizeof(ChannelEntry));

	/*system config*/
	cfg.system = &system;
	/*system.manualStart = &h245Tunneling;*/
	system.maxCalls = &maxCalls;
	system.maxChannels = &maxChannels;
	system.maxRasOutTransaction = &maxRasTransaction;
	system.maxRasInTransaction = &maxRasTransaction;
	system.localIpAddress = &localIpAddress;
	system.callProperty = &callProperty;
		callProperty.copySingleMessage = &copySingleMessage;
	system.allocations = &allocations;
		allocations.maxPoolSizeInKB = &maxPoolSizeInKB;
		
	/*RAS config*/
	cfg.RAS = &RAS;
	RAS.responseTimeOut = &responseTimeOut;
	RAS.manualRAS = &manualRAS;
	RAS.allowCallsWhenNonReg = &allowCallsWhenNonReg;
	RAS.maxFail = &maxFail;
	RAS.compare15bitRasCrv = &compare15bitRasCrv;
	if (gkEnabled)
	{
		RAS.manualRAS = NULL;
		RAS.manualRegistration = &manualRegistration;/*NULL;*/
		RAS.manualDiscovery = &manualDiscovery;
			manualDiscovery.defaultGatekeeper = &GKAddr;
			if (!phoneconfig.conf_h323.iffirewall)
			{
				manualDiscovery.defaultGatekeeper->ipAddress.ip
					= reverseIPAddr(phoneconfig.conf_service.serverip);				
			}
			else
			{
				manualDiscovery.defaultGatekeeper->ipAddress.ip
					= reverseIPAddr(phoneconfig.conf_network.ipaddr);				
				if ((SpawnTask( "tStartAgentClient", (FUNCPTR) startAgentClient, FALSE, 60, 10240)) == ERROR)
				{
					printf("Unable to spawn agent client task\n");
				}
				taskDelay(200);
			}
			manualDiscovery.defaultGatekeeper->ipAddress.port = 1719;
/*				= phoneconfig.conf_service.serviceport;*/

		RAS.registrationInfo = &registrationInfo;
		registrationInfo.terminalType = &terminalType;
		terminalType.terminal = &terminal;
/*			terminal.nonStandardData = &nonStandardData;*/
				nonStandardData.nonStandardIdentifier = &nonStandardIdentifier;
				nonStandardData.data = "nonStandardData";
					nonStandardIdentifier.h221NonStandard = &vendorn;
					nonStandardIdentifier.object = "nonStandardIdentifier";
		terminalType.mc = &mc;
		terminalType.undefinedNode = &undefinedNode;
		terminalType.vendor = &vendor;
		vendor.productId = PRODUCT_IDENTIFIER;
		vendor.versionId = PRODUCT_VERSION;
		vendor.vendor = &vendorn;
		vendorn.t35CountryCode = &t35CountryCode;
		vendorn.t35Extension = &t35Extension;
		vendorn.manufacturerCode = &manufacturerCode;
		aliasSize = 1;
		registrationInfo.aliasSize = &aliasSize;
		registrationInfo.terminalAlias = terminalAlias;
	       if(localH323Id[0]!='\0')
		{
			terminalAlias[aliasSize-1].aliasType = "h323-ID";
			terminalAlias[aliasSize-1].aliasVal = localH323Id;
	       
			aliasSize++;
	       }
		terminalAlias[aliasSize-1].aliasType = "e164";
		terminalAlias[aliasSize-1].aliasVal = localE164Num;

		strncpy(password, phoneconfig.conf_h323.registerpin, 15);
		password[15]='\0';
		registrationInfo.timeToLive = &timeToLive;

		registrationInfo.endpointVendor = &endpointVendor;
		endpointVendor.productId = PRODUCT_IDENTIFIER;
		endpointVendor.versionId = PRODUCT_VERSION;
		endpointVendor.vendor = &vendorn;
	}
	RAS.rasPort = &rasPort;
	RAS.maxRetries = &maxRetries;
	RAS.preGrantedArqUse = &preGrantedArqUse;
	preGrantedArqUse.routed = &routed;

	RAS.supportAltGK = &supportAltGK;
	RAS.overlappedSending = &overlappedSending;
	RAS.preTimeToLiveRegistration = &preTimeToLiveRegistration;

	/*Q931 config*/
	cfg.Q931 = &Q931;
	Q931.responseTimeOut = &responseQ931;
	Q931.connectTimeOut = &connectTimeOut;
	Q931.maxCalls = &maxCalls;
	Q931.callSignalingPort = &callSignalingPort;
	Q931.manualAccept = &manualAcc;
	/*Q931.manualCallProceeding = &manualAcc;*/
	Q931.keepCallOnQ931Close = &manualAcc;
	/*Q931.notEstablishControl = &manualAcc;*/
	Q931.t304 = &responseQ931;
	if (phoneconfig.conf_h323.isH245Tunneling)
		Q931.h245Tunneling = &h245Tunneling;


	/*h245 config*/
	cfg.h245 = &h245;
	h245.capabilities = &capabilities;
	capabilities.terminalCapabilitySet = &terminalCapabilitySet;
	terminalCapabilitySet.multiplexCapability = &multiplexCapability;
	multiplexCapability.h2250Capability.maximumAudioDelayJitter = 60;
	multiplexCapability.h2250Capability.receiveMultipointCapability = &multipointCapatility;
	multiplexCapability.h2250Capability.transmitMultipointCapability = &multipointCapatility;
	multiplexCapability.h2250Capability.receiveAndTransmitMultipointCapability = &multipointCapatility;
		multipointCapatility.mediaDistributionCapability = &mediaDistributionCapability;
		multipointCapatility.size = 1;

	terminalCapabilitySet.capabilityTable = capabilityTable;

	/* 2004.05.20 Move G.723 to the first, to adapt our bp8805v1 codec list */
	terminalCapabilitySet.tableSize = 0;
	h245.channels = channels;
	h245.channelsSize = 0;
	
	for (i = 0, index = 0; i < AUDIO_CODEC_NUM; i++)
	{
		if (!phoneconfig.conf_audio.codecPrefOrder[i].isUsed)
			continue;
		if (strcmp(phoneconfig.conf_audio.codecPrefOrder[i].codecName, "g7231") == 0)
		{
			index++;
			terminalCapabilitySet.tableSize++;
			capabilityTable[terminalCapabilitySet.tableSize-1].capabilityTableEntryNumber = index;
			capabilityTable[terminalCapabilitySet.tableSize-1].capability.receiveAudioCapability.g7231 = &g7231;
				g7231.maxAl_sduAudioFrames = 1;
				g7231.silenceSuppression = 1;

			h245.channelsSize++;
			channels[h245.channelsSize-1].name = "g7231";
			channels[h245.channelsSize-1].dataType.audioData = 
				&capabilityTable[h245.channelsSize-1].capability.receiveAudioCapability;			
		}
		else if (strcmp(phoneconfig.conf_audio.codecPrefOrder[i].codecName, "g729AnnexA") == 0)
		{
			index++;
			terminalCapabilitySet.tableSize++;
			capabilityTable[terminalCapabilitySet.tableSize-1].capabilityTableEntryNumber = index;
			capabilityTable[terminalCapabilitySet.tableSize-1].capability.receiveAudioCapability.g729AnnexA = &g729;	

			h245.channelsSize++;
			channels[h245.channelsSize-1].name = "g729AnnexA";
			channels[h245.channelsSize-1].dataType.audioData = 
				&capabilityTable[h245.channelsSize-1].capability.receiveAudioCapability;			
		}
		else if (strcmp(phoneconfig.conf_audio.codecPrefOrder[i].codecName, "g711Ulaw64k") == 0)
		{
			index++;
			terminalCapabilitySet.tableSize++;
			capabilityTable[terminalCapabilitySet.tableSize-1].capabilityTableEntryNumber = index;
			capabilityTable[terminalCapabilitySet.tableSize-1].capability.receiveAudioCapability.g711Ulaw64k = &temp;

			h245.channelsSize++;
			channels[h245.channelsSize-1].name = "g711Ulaw64k";
			channels[h245.channelsSize-1].dataType.audioData = 
				&capabilityTable[h245.channelsSize-1].capability.receiveAudioCapability;			
		}
		else if (strcmp(phoneconfig.conf_audio.codecPrefOrder[i].codecName, "g711Alaw64k") == 0)
		{
			index++;
			terminalCapabilitySet.tableSize++;
			capabilityTable[terminalCapabilitySet.tableSize-1].capabilityTableEntryNumber = index;
			capabilityTable[terminalCapabilitySet.tableSize-1].capability.receiveAudioCapability.g711Alaw64k = &temp;

			h245.channelsSize++;
			channels[h245.channelsSize-1].name = "g711Alaw64k";
			channels[h245.channelsSize-1].dataType.audioData = 
				&capabilityTable[h245.channelsSize-1].capability.receiveAudioCapability;			
		}
		else
		{
			printf("unknown codecIndex %d 's name\n", i);
			continue;
		}				
	}

	terminalCapabilitySet.capabilityDescriptor = capabilityDescriptor;
	terminalCapabilitySet.descSize = 1;
		capabilityDescriptor[terminalCapabilitySet.descSize-1].simultaneousCapabilities = simultaneousCapabilities;
		capabilityDescriptor[terminalCapabilitySet.descSize-1].size = 1;
		simultaneousCapabilities[0].size = index;
		simultaneousCapabilities[0].val = val;
		/* 2004.05.20 Move G.723 to the first, to adapt our bp8805v1 codec list */
		/*val[0] = 7110;
		val[1] = 7111;
		val[2] = 7291;
		val[3] = 7292;
		val[4] = 7293;
		val[5] = 7294;
		val[6] = 7231;
		val[0] = 7291;*/
		for (i = 0; i < index; i++)
			val[i] = i + 1;
		
	if (buildConfigRVStack(&cfg) < 0)
		return -1;

return 0;
}

RvH323TimerPoolHandle       rv_timer;
RvTimerQueue* rv_timersQueue;

void localTimeInit()
{
    rv_timer = RvH323TimerConstruct(5, &rv_timersQueue);
}

void localTimeEnd()
{
	RvH323TimerDestruct(rv_timer);
}

/*extern RvBool ChangeGKCfg(IN void * context);
GKConnChange __localgkch;*/

extern int rvwpReceive(WrapperMsg *msg);

RvBool dumbHandle(IN void* context)
{
	WrapperMsg wpMsg;
	while (rvwpReceive(&wpMsg) != ERROR)
	{
		printf("receive msg from msgQ , handle!--------\n");
		wpHandleMsg(&wpMsg);
	}
	return RV_TRUE;
}
#if 0
void ChangeGK(GKConnChange* ch)
{
/*	cmElem *app = (cmElem*)hApp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -