Пример #1
0
int main(int argc, char *argv[])
{
	double start,finish,result,precise;
	setDefaults(getSel(argc,argv));
	printf(" -> Starting sequence with %ld ...\n",maxval);
	start = getCurrTime();
	primecount(maxval);
	finish = getCurrTime();
	result = (finish - start)/lts2;
	//printf("\nResult is: %6.3lf.\n",result);
	precise = abs(lts1 - result);
	printf("\nResult is: %6.3lf.\n",precise);
	return (int)(result/1);
}
Пример #2
0
void clsTimers::start()
{
        
        timeStartMilis = getCurrTime();
	
	stopped = false;
}
Пример #3
0
LargeMemoryBlock *LargeObjectCache::get(size_t size)
{
    MALLOC_ASSERT( size%largeBlockCacheStep==0, ASSERT_TEXT );
    MALLOC_ASSERT( size>=minLargeSize, ASSERT_TEXT );

    if ( size < maxHugeSize) {
        uintptr_t currTime = getCurrTime();
        cleanupCacheIfNeeded(currTime);
        return size < maxLargeSize?
            largeCache.get(currTime, size) : hugeCache.get(currTime, size);
    }
    return NULL;
}
Пример #4
0
void setup_routing_table(){
	if(!table_changed){
		cleanup_and_start_app();
		return;
	}
	//printf("Setting up the routing table\n");
	table_changed = false;
	DATAGRAM dg;
	dg.source = dg.dest = nodeinfo.address;
	dg.fragOffset_nnSrc = dg.flagOffset_nnVia = nodeinfo.nodenumber;
	getCurrTime(&dg.timestamp);
	push_dg_for_routing(dg, n);
	n -= 2;
	CNET_start_timer(EV_TIMER9, 2000000, 0);
}
Пример #5
0
unsigned long long clsTimers::getElapsedTime()
{
	unsigned long long elapsedTimeMilis;
	
	
	elapsedTimeMilis = getCurrTime()-timeStartMilis;
        
	if(stopped)
	{
		elapsedTimeMilis = 0;
	}
	
	return elapsedTimeMilis+timeElapsedMilis;

}
Пример #6
0
PROCESS_THREAD(ntpdemo_process, ev, data)
{
  static struct etimer et;

  PROCESS_BEGIN();

  etimer_set(&et, CLOCK_SECOND);
  while(1) {
    PROCESS_YIELD();
    if(etimer_expired(&et)) {
      printf("%lu\n", getCurrTime());
      etimer_restart(&et);
    }
  }

  PROCESS_END();
}
Пример #7
0
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(ntpd_process, ev, data)
{
  static struct etimer et;
  static uip_ipaddr_t ipaddr;

  PROCESS_BEGIN();
  PRINTF("ntpd process started\n");

  set_connection_address(&ipaddr);

  /* find the IP of router */
  //etimer_set(&et, CLOCK_SECOND);
  //while(1){
  //  if(uip_ds6_defrt_choose()){
  //    uip_ipaddr_copy(&ipaddr, uip_ds6_defrt_choose());
  //    break;
  //  }
  //  etimer_set(&et, CLOCK_SECOND);
  //  PROCESS_YIELD_UNTIL(etimer_expired(&et));
  //}

  /* new connection with remote host */
  ntp_conn = udp_new(&ipaddr, UIP_HTONS(NTPD_PORT), NULL);

  etimer_set(&et, SEND_INTERVAL * CLOCK_SECOND);
  while(1) {
    PROCESS_YIELD();
    if(etimer_expired(&et)) {
      timeout_handler();
      
      if((clock_seconds() > 4294967290U) || (clock_seconds() < 20)){
	SEND_INTERVAL = 2 * CLOCK_SECOND;
	etimer_set(&et, SEND_INTERVAL);
      } else {
	if(SEND_INTERVAL <= 512 && (getCurrTime() != 0)) {
	  SEND_INTERVAL = 2 * SEND_INTERVAL;
	}
	etimer_set(&et, SEND_INTERVAL * CLOCK_SECOND);
      }
    } else if(ev == tcpip_event) {
      tcpip_handler();
    }
  }

  PROCESS_END();
}
Пример #8
0
void update_table(int link, DATAGRAM dg){
	if(dg.source == nodeinfo.address){
		//table[f.payload.B].link = link;
		return;
	}
	bool to_send = false;	
	unsigned long long curr_time;
	getCurrTime(&curr_time);
	long curr_cost = (long)(curr_time - dg.timestamp)/1000;
	if(table[dg.fragOffset_nnSrc].dest != dg.source){
		//printf("filling RT\n");
		table[dg.fragOffset_nnSrc].dest = dg.source;
		table[dg.fragOffset_nnSrc].via = dg.dest;
		table[dg.fragOffset_nnSrc].cost = curr_cost;
		table[dg.fragOffset_nnSrc].link = link;
		//table[f.payload.fragOffset_nnSrc].min_mtu = min(table[f.payload.A].min_mtu, f.payload.flag_offset);
		to_send = true; 	
		table_changed = true;
	}
	else {
		if(table[dg.fragOffset_nnSrc].cost > curr_cost){
			table_changed = true;
			table[dg.fragOffset_nnSrc].cost = curr_cost;
			table[dg.fragOffset_nnSrc].dest = dg.source;
			table[dg.fragOffset_nnSrc].via = dg.dest;
			table[dg.fragOffset_nnSrc].link = link;
			//table[f.payload.A].min_mtu = min(table[f.payload.A].min_mtu, f.payload.flag_offset);
			to_send = true;
		}
	}
	if(to_send){
		dg.flagOffset_nnVia = nodeinfo.nodenumber;
		dg.dest = nodeinfo.address;
		for(int i=0;i<2;i++)
			push_dg_for_routing(dg);
	}
}
Пример #9
0
int  PSTNToVOIPCallout(char* pCallerNum, char* pCalledNum,  DeviceID_t* pVoipDev, INTERFACE_STRUCT* pOneInterface)
{
	RetCode_t ret = -1;
	VOIP_STRUCT *pOneVOIP = NULL;
	DeviceID_t   FreeVocDeviceID;
	MixerControlParam_t     VocCmdP = {0};
	CmdParamData_Voice_t    VocMixParam = {0};
	VoIPCallPrivate_t       voipCallParam = {0};
	int iPreCnt = 0;	
	int iRoutCnt = 0;

	_ASSERT(pCallerNum != NULL);
	_ASSERT(pCalledNum != NULL);
	_ASSERT(pVoipDev != NULL);
	_ASSERT(pOneInterface != NULL);

	
	voipCallParam.m_PrivateData.m_u32DataSize = sizeof(VoIPCallPrivate_t);
	voipCallParam.m_s32Protocol =  XMS_VOIP_PROTOCOL_SIP;
	strncpy(voipCallParam.m_s8CallerUserID, pCallerNum, sizeof(voipCallParam.m_s8CallerUserID));

	char cfg_MapIP[255] = {0};
	if (outRout == NULL)
	{		
		sprintf(cfg_MapIP,"%s",pubOutVoipAddress);
		strncpy(voipCallParam.m_s8CalleeAddress, cfg_MapIP, sizeof(voipCallParam.m_s8CallerAddress));
		
		voipCallParam.m_s32CalleePort = pubOutVoipPort;
	}
	else
	{
		int bRout = 0;
		for (iRoutCnt = 1; iRoutCnt <= cfg_routCnt; iRoutCnt++)
		{
			if (bRout == 1)
				break;

			for (iPreCnt = 0; iPreCnt < 10; iPreCnt++)
			{
				if (strlen(outRout[iRoutCnt].phonePreNum[iPreCnt]) > 0)
				{			
					if (strncmp(outRout[iRoutCnt].phonePreNum[iPreCnt], pCalledNum, strlen(outRout[iRoutCnt].phonePreNum[iPreCnt])) == 0)
					{
						strncpy(voipCallParam.m_s8CalleeAddress, outRout[iRoutCnt].outBAddr.proxyAddr, sizeof(voipCallParam.m_s8CallerAddress));
						
						voipCallParam.m_s32CalleePort = outRout[iRoutCnt].outBAddr.proxyPort;
						
						bRout = 1;
						break;
					}
				}
			}
		}

		if (bRout == 0)
		{
			sprintf(cfg_MapIP,"%s",pubOutVoipAddress);
			strncpy(voipCallParam.m_s8CalleeAddress, cfg_MapIP, sizeof(voipCallParam.m_s8CallerAddress));
			
			voipCallParam.m_s32CalleePort = pubOutVoipPort;			
		}
	}

	if (g_logfp != NULL)
	{
		char	mTemp[512]={0};
		char	mCurrTime[50]={0};
		getCurrTime(mCurrTime);
		
		sprintf(mTemp,"%s IPCALLOUT In PSTNToVOIPCallOut: DSP:%d Ch:%d AcsHandle:%d, FlowType:%d FlowChannelID:%d CalleAddress:%s Port:%d Caller:%s Called:%s \n\r",
			mCurrTime,
			pVoipDev->m_s8ModuleID,
			pVoipDev->m_s16ChannelID,
			g_acsHandle,
			pVoipDev->m_CallID.m_s32FlowType,
			pVoipDev->m_CallID.m_s32FlowChannel,
			voipCallParam.m_s8CalleeAddress,
			voipCallParam.m_s32CalleePort,
			pCallerNum,
			pCalledNum);
		fwrite(mTemp,strlen(mTemp),1,g_logfp);
		fflush(g_logfp);
	}


	pOneVOIP = &M_OneVOIP(*pVoipDev);
		
	ret = XMS_ctsMakeCallOut(g_acsHandle, pVoipDev, pCallerNum, pCalledNum, (PrivateData_t *)&voipCallParam);
	if(ret > 0)
	{		
		
		FreeVocDeviceID=pOneVOIP->pVoiceDeviceID;			
		
		VocCmdP.m_u8SRC1_Ctrl = XMS_MIXER_FROM_INPUT;							
		VocCmdP.m_u16SRC_ChID1 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		//如果不屏蔽这两行,会造成DTMF播放死循环
	//	VocCmdP.m_u8SRC2_Ctrl = XMS_MIXER_FROM_PLAY;
	//	VocCmdP.m_u16SRC_ChID2 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		ret = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->deviceID,
			VOIP_PARAM_RTPMIXER, sizeof(VocCmdP), &VocCmdP);
		
	/*	VocMixParam.m_u8InputCtrlValid=1;             //使能输入控制参数
		VocMixParam.m_VocInputControl.m_u8AgcEnable=0;// inputContol使能自动增益
		VocMixParam.m_VocInputControl.m_u8AgcMode = 0 ;//设为ALS模式
		VocMixParam.m_VocInputControl.m_u16FixGain=1024;
		VocMixParam.m_VocInputControl.m_u8EcEnable=0;//禁止回声抑制
		VocMixParam.m_VocInputControl.m_u8TadEnable=1;   //启动语音TONE音抑制使能
		VocMixParam.m_VocInputControl.m_u8EcRefType=0;	*/
	
		VocMixParam.m_u8GtdCtrlValid = 1;
		VocMixParam.m_VocGtdControl.m_u8DTMFEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8FSKEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8ChannelEnable = 1;
		VocMixParam.m_VocGtdControl.m_u8GTDEnable = 1;
		unsigned char gtdID[] = {"GHIJKLM"};
		memcpy(VocMixParam.m_VocGtdControl.m_u8GTDID, gtdID, sizeof(VocMixParam.m_VocGtdControl.m_u8GTDID));

	//	EnableGtg(&pOneVOIP->pVoiceDeviceID);
		
		
		VocMixParam.m_u8OutputCtrlValid = 1;
		VocMixParam.m_VocOutputControl.m_u8OutputType = XMS_VOC_OUTPUT_FROM_MIXER;				
		VocMixParam.m_VocOutputControl.m_u16FixGain = 1024;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC1_Ctrl = XMS_MIXER_FROM_PLAY;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID1 = pOneVOIP->pVoiceDeviceID.m_s16ChannelID;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u8SRC2_Ctrl = XMS_MIXER_FROM_IP;
		VocMixParam.m_VocOutputControl.m_MixerControl.m_u16SRC_ChID2 = pOneVOIP->deviceID.m_s16ChannelID;
		ret = XMS_ctsSetParam(g_acsHandle, &pOneVOIP->pVoiceDeviceID,VOC_PARAM_UNIPARAM, sizeof(VocMixParam), &VocMixParam);			
	
		My_DualLink(&pOneInterface->deviceID, &pOneInterface->pVoiceDeviceID);		
		
		XMS_ctsAlertCall(g_acsHandle,&pOneInterface->deviceID,NULL);			
		
		DrawVOIP_VocInfo(pOneVOIP);	
		
	}
/*	else
	{
		char	mTemp[255]={0};
		char	mCurrTime[50]={0};

		if (g_logfp != NULL)
		{
			getCurrTime(mCurrTime);
			
			sprintf(mTemp,"%s,PSTNToVOIP Faile!!,m_s16DeviceMain=%d,m_s16DeviceSub=%d,m_s8ModuleID=%d,m_s8MachineID=%d,m_s16ChannelID=%d,m_s32FlowType=%d,m_s32FlowChannel=%d\r",
				mCurrTime,
				pVoipDev->m_s16DeviceMain,pVoipDev->m_s16DeviceSub,pVoipDev->m_s8ModuleID,
				pVoipDev->m_s8MachineID,pVoipDev->m_s16ChannelID,
				pVoipDev->m_CallID.m_s32FlowType,pVoipDev->m_CallID.m_s32FlowChannel);
			fwrite(mTemp,strlen(mTemp),1,g_logfp);
		}

	//	return ret;
	
	}*/
	return ret;
}
Пример #10
0
void DTrunkWork(INTERFACE_STRUCT* pOneTrunk, Acs_Evt_t* pAcsEvt)
{
	DJ_S8                  pCallerNum[64] = {0};
	DJ_S8                  pCalledNum[64] = {0};
	DJ_S8                  pTempcalledNum[64] = {0};
	char                   TmpDtmf[1] = {0};
	Acs_CallControl_Data   *pCallControl = NULL;
	VOIP_STRUCT            *pOneVOIP = NULL;
	int                    i = -1;
	RetCode_t			   ret;
	
try
{	
	if (pAcsEvt->m_s32EventType == XMS_EVT_CLEARCALL)
	{	
		TRACE("Recv ss7 clearCall evt\n");
		
		long mDspID=pOneTrunk->pVoipDeviceID.m_s8ModuleID;
		long mChannelID=pOneTrunk->pVoipDeviceID.m_s16ChannelID;
		
		pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
		
		if(pOneTrunk->mExchangeType == SS7_VOIP)
		{
			pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
			if (pOneVOIP->iLineState != DCS_FREE)			
			{
				pubIpSendClearCallCount++;				
				
				XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, 0, NULL);
				
				if(pOneVOIP->pVoiceDeviceID.m_s8ModuleID>0 )
					My_DualUnlink(&pOneTrunk->deviceID, &pOneVOIP->pVoiceDeviceID);		
				DrawVOIP_LinkDev (pOneVOIP);

				if (g_logfp != NULL)
				{
					char	mLog[512]={0};
					char	mCurrTime[50]={0};
					getCurrTime(mCurrTime);
					sprintf(mLog,"%s Direct SS7 call in: ss7 receive clearCall so clear voip.Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
						mCurrTime,
						pOneVOIP->deviceID.m_s8ModuleID,
						pOneVOIP->deviceID.m_s16ChannelID,
						pOneVOIP->iGlobeID,
						pOneVOIP->CallerNum,
						pOneVOIP->CalleeNum);

					fwrite(mLog,strlen(mLog),1,g_logfp);
					fflush(g_logfp);
				}
			}
		}
		
		if(AllDeviceRes[mDspID].pVOIP[mChannelID].mExchangeType == VOIP_SS7 && 
			AllDeviceRes[mDspID].pVOIP[mChannelID].iLineState !=DCS_FREE &&
			AllDeviceRes[mDspID].pVOIP[mChannelID].iLineState !=DCS_CALLIN )
		{
			pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);		
			
			ret = XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, 0, NULL);	
			if (g_logfp != NULL)
			{
				char	mLog[512]={0};
				char	mCurrTime[50]={0};
				getCurrTime(mCurrTime);
				
				sprintf(mLog,"%s Direct VOIP call in: ss7 receive clearCall so clear voip.Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
					mCurrTime,
					pOneVOIP->deviceID.m_s8ModuleID,
					pOneVOIP->deviceID.m_s16ChannelID,
					pOneVOIP->iGlobeID,
					pOneVOIP->CallerNum,
					pOneVOIP->CalleeNum);

				fwrite(mLog,strlen(mLog),1,g_logfp);
				fflush(g_logfp);
			}
		}

		ResetTrunk(pOneTrunk,pAcsEvt);
		return;
	}

	//状态处理
	switch(pOneTrunk->DTrkState)
	{
		case TRK_FREE:	
			/*call in from Digit  Signal */
			if (pAcsEvt->m_s32EventType == XMS_EVT_CALLIN)
			{	
				
				pCallControl = (Acs_CallControl_Data *)((DJ_S8 *)pAcsEvt + sizeof(Acs_Evt_t));
				strncpy(pCallerNum, pCallControl->m_s8CallingNum, sizeof(pCallerNum));
				strncpy(pTempcalledNum, pCallControl->m_s8CalledNum, sizeof(pTempcalledNum));
		
				//hao ma gui ze
				memset(pCalledNum, 0, sizeof(pCalledNum));
				if (Rule(pTempcalledNum, pDailRuleHead, pCalledNum) == 0)		
					strcpy(pCalledNum, pTempcalledNum); 
				
				pOneTrunk->mExchangeType = SS7_VOIP;
				
				pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);

				if (g_logfp != NULL)
				{
					char	mLog[512]={0};
					char	mCurrTime[50]={0};
					getCurrTime(mCurrTime);
					
					sprintf(mLog,"%s SS7 RECEVICE CallIn:Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
						mCurrTime,
						pOneVOIP->deviceID.m_s8ModuleID,
						pOneVOIP->deviceID.m_s16ChannelID,
						pOneVOIP->iGlobeID,
						pCallerNum,
						pCalledNum);
					fwrite(mLog,strlen(mLog),1,g_logfp);
					fflush(g_logfp);
				}
				
				if(pOneVOIP->iLineState==DCS_FREE && pOneVOIP->State == VOIP_FREE)
				{
					pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
					
					if(PSTNToVOIPCallout(pCallerNum, pCalledNum, &pOneVOIP->deviceID, pOneTrunk) < 0)
					{	
						XMS_ctsClearCall(g_acsHandle, &pOneTrunk->deviceID, 0, NULL);
						TRACE("3 ClearCall SS7\n");
						Change_DTrunkState(pOneTrunk, TRK_HANGUP);

						if (g_logfp != NULL)
						{
							char	mLog[512]={0};
							char	mCurrTime[50]={0};
							getCurrTime(mCurrTime);
							
							sprintf(mLog,"%s First Direct SS7 callin: voip function error,  so  clear ss7 :Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
								mCurrTime,
								pOneVOIP->deviceID.m_s8ModuleID,
								pOneVOIP->deviceID.m_s16ChannelID,
								pOneVOIP->iGlobeID,
								pOneVOIP->CallerNum,
								pOneVOIP->CalleeNum);
							
							fwrite(mLog,strlen(mLog),1,g_logfp);
							fflush(g_logfp);
						}
						break;
					}	
					DrawVOIP_LinkDev(pOneVOIP);	
					DrawVOIP_CallInfo(pOneVOIP);
					Change_VOIPState(pOneVOIP, VOIP_CALLOUT);

					strncpy(pOneVOIP->CalleeNum,pCalledNum,20);
					strncpy(pOneVOIP->CallerNum,pCallerNum,20);

					strncpy(pOneTrunk->CalleeCode, pCalledNum, 20);
					strncpy(pOneTrunk->CallerCode, pCallerNum, 20);
					DrawDTrunk_CallInfo(pOneTrunk);
					DrawDTrunk_LinkDev(pOneTrunk);			
					Change_DTrunkState(pOneTrunk, TRK_WAIT_ANSERCALL);	
				}
				else
				{
					XMS_ctsSetDevTimer(g_acsHandle,&pOneTrunk->deviceID,400);
					pOneTrunk->TimeOut = 0;
					DrawDTrunk_DTMF(pOneTrunk);
					Change_DTrunkState(pOneTrunk,TRK_WAIT_CALL_VOIP);
				}				
			}
		break;	

		case TRK_WAIT_CALL_VOIP:
		{
			if(pOneTrunk->iLineState == DCS_FREE )
			{
				if (pOneTrunk->mExchangeType == SS7_VOIP)
				{
					pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
					if (pOneVOIP->iLineState != DCS_FREE)			
					{
						XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, 0, NULL);
						
						if(pOneVOIP->pVoiceDeviceID.m_s8ModuleID>0 )
							My_DualUnlink(&pOneTrunk->deviceID, &pOneVOIP->pVoiceDeviceID);		
						DrawVOIP_LinkDev (pOneVOIP);
						
						if (g_logfp != NULL)
						{
							char	mLog[512]={0};
							char	mCurrTime[50]={0};
							getCurrTime(mCurrTime);
							
							sprintf(mLog,"%s Direct SS7 call in: wait call IP,then SS7 Linestate is free so clear voip:Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
								mCurrTime,
								pOneVOIP->deviceID.m_s8ModuleID,
								pOneVOIP->deviceID.m_s16ChannelID,
								pOneVOIP->iGlobeID,
								pOneVOIP->CallerNum,
								pOneVOIP->CalleeNum);
							fwrite(mLog,strlen(mLog),1,g_logfp);
							fflush(g_logfp);
						}
					}
				}	
				ResetTrunk(pOneTrunk,pAcsEvt);
			}
			
			if(pAcsEvt->m_s32EventType == XMS_EVT_DEV_TIMER && pOneTrunk->iLineState != DCS_FREE)
			{
				pOneTrunk->TimeOut++;
				DrawDTrunk_DTMF(pOneTrunk);
				
				if(pOneTrunk->TimeOut >4 )
				{
					pOneTrunk->TimeOut = 0;
					pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
					XMS_ctsClearCall(g_acsHandle, &pOneTrunk->deviceID, 0, NULL);
					TRACE("4 ClearCall SS7\n");

					if (g_logfp != NULL)
					{
						char	mLog[512]={0};
						char	mCurrTime[50]={0};
						getCurrTime(mCurrTime);
						
						sprintf(mLog,"%s Direct SS7 call in: voip wait time is timeover,so clear ss7 :Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%d\n\r",
							mCurrTime,
							pOneVOIP->deviceID.m_s8ModuleID,
							pOneVOIP->deviceID.m_s16ChannelID,
							pOneVOIP->iGlobeID,
							pOneVOIP->CallerNum,
							pOneVOIP->CalleeNum);

						fwrite(mLog,strlen(mLog),1,g_logfp);
						fflush(g_logfp);
					}
					
					break;
				}
				
				pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
				
				if(pOneVOIP->iLineState==DCS_FREE && pOneVOIP->State == VOIP_FREE)
				{
					if(PSTNToVOIPCallout(pCallerNum, pCalledNum, &pOneVOIP->deviceID, pOneTrunk) < 0)
					{	
						XMS_ctsClearCall(g_acsHandle, &pOneTrunk->deviceID, 0, NULL);
						TRACE("5 ClearCall SS7\n");;
						Change_DTrunkState(pOneTrunk, TRK_HANGUP);

						if (g_logfp != NULL)
						{
							char	mLog[512]={0};
							char	mCurrTime[50]={0};
							getCurrTime(mCurrTime);
							
							sprintf(mLog,"%s Second Direct SS7 call in: Voip call function error, so  clear ss7:Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
								mCurrTime,
								pOneVOIP->deviceID.m_s8ModuleID,
								pOneVOIP->deviceID.m_s16ChannelID,
								pOneVOIP->iGlobeID,
								pOneVOIP->CallerNum,
								pOneVOIP->CalleeNum);
							
							fwrite(mLog,strlen(mLog),1,g_logfp);
							fflush(g_logfp);
						}
					
						break;
					}				
					
					DrawVOIP_LinkDev(pOneVOIP);	
					DrawVOIP_CallInfo(pOneVOIP);
					Change_VOIPState(pOneVOIP, VOIP_CALLOUT);
					
					strncpy(pOneTrunk->CalleeCode, pCalledNum, 20);
					strncpy(pOneTrunk->CallerCode, pCallerNum, 20);
					DrawDTrunk_CallInfo(pOneTrunk);
					DrawDTrunk_LinkDev(pOneTrunk);			
					Change_DTrunkState(pOneTrunk, TRK_WAIT_ANSERCALL);	
				}
				else
				{
					XMS_ctsSetDevTimer(g_acsHandle,&pOneTrunk->deviceID,400);
					Change_DTrunkState(pOneTrunk,TRK_WAIT_CALL_VOIP);
				}
			}
		}
		break;
	
		case TRK_WAIT_ANSERCALL:		
			if(pOneTrunk->iLineState == DCS_FREE)
			{
				if (pOneTrunk->mExchangeType == SS7_VOIP)
				{
					pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
					if (pOneVOIP->iLineState != DCS_FREE)			
					{
						XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, 0, NULL);
						
						if(pOneVOIP->pVoiceDeviceID.m_s8ModuleID>0 )
							My_DualUnlink(&pOneTrunk->deviceID, &pOneVOIP->pVoiceDeviceID);		
						DrawVOIP_LinkDev (pOneVOIP);
						
						if (g_logfp != NULL)
						{
							char	mLog[512]={0};
							char	mCurrTime[50]={0};
							getCurrTime(mCurrTime);
							
							sprintf(mLog,"%s SS7 wait  ansercall but SS7 Linestate is free so clear VOIP: Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
								mCurrTime,
								pOneVOIP->deviceID.m_s8ModuleID,
								pOneVOIP->deviceID.m_s16ChannelID,
								pOneVOIP->iGlobeID,
								pOneVOIP->CallerNum,
								pOneVOIP->CalleeNum);

							fwrite(mLog,strlen(mLog),1,g_logfp);
							fflush(g_logfp);
						}					
					}
				}
				ResetTrunk(pOneTrunk,pAcsEvt);
			}
			if(pAcsEvt->m_s32EventType == XMS_EVT_ANSWERCALL)
			{		

				Change_DTrunkState(pOneTrunk, TRK_CONNECT);
			}
			break;
	
		case TRK_CALLOUT:
			if ( pAcsEvt->m_s32EventType == XMS_EVT_CALLOUT )	
			{	
				INTERFACE_STRUCT *pOneInterface = NULL;			
				
				pOneVOIP = &M_OneVOIP(pOneTrunk->pVoipDeviceID);
				pCallControl = (Acs_CallControl_Data *)((DJ_S8 *)pAcsEvt + sizeof(Acs_Evt_t));
				if ( pCallControl->m_s32AcsEvtState == 1 )	// 呼出成功,对方摘机
				{	
				//	pOneTrunk->bcallFailFalg = false;

					if (g_logfp != NULL)
					{
						char	mLog[512]={0};
						char	mCurrTime[50]={0};
						getCurrTime(mCurrTime);
						
						sprintf(mLog,"%s SS7 CallOut Success:Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
							mCurrTime,
							pOneVOIP->deviceID.m_s8ModuleID,
							pOneVOIP->deviceID.m_s16ChannelID,
							pOneVOIP->iGlobeID,
							pOneVOIP->CallerNum,
							pOneVOIP->CalleeNum);
						
						fwrite(mLog,strlen(mLog),1,g_logfp);
						fflush(g_logfp);
					}				

					pubIpSS7ConnectCount++;					
					
					Change_DTrunkState(pOneTrunk, TRK_CONNECT);
					Change_VOIPState(pOneVOIP, VOIP_WAIT_ANSWERCALL);					
					XMS_ctsAnswerCallIn(g_acsHandle, &pOneVOIP->deviceID, NULL);		
				}
				else		// 呼出失败
				{				
					pOneTrunk->bcallFailFalg = true;
					DrawDTrunk_Reason(pOneTrunk, pCallControl->m_s32AcsEvtErrCode, pCallControl->m_s32CallClearCause);
					Change_DTrunkState(pOneTrunk, TRK_FREE);	
					pubIpSS7ErrorCount++;
					pubErrorClearCallCount++;				

					//带原因值的拆线--ADD by WWK
					int		mCallErrorCode = 0;
					if(pCallControl->m_s32AcsEvtErrCode == 17 ) mCallErrorCode = 486;		//被叫忙
					if(pCallControl->m_s32AcsEvtErrCode == 28 ) mCallErrorCode = 404;		//号码不存在
					if(pCallControl->m_s32AcsEvtErrCode == 19 ) mCallErrorCode = 408;		//被叫关机或者无应答

					XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, mCallErrorCode, NULL);
					Change_VOIPState(pOneVOIP, VOIP_HANGUP);

					if (g_logfp != NULL)
					{
						char	mTemp[512]={0};
						char	mCurrTime[50]={0};
						getCurrTime(mCurrTime);
						
						sprintf(mTemp,"%s SS7 call out failed, so clear voip!! DSP:%d Ch:%d ErrorCode:%d Reason:%d, bcallFailFalg:%d\n\r",
							mCurrTime,
							pOneTrunk->deviceID.m_s8ModuleID,
							pOneTrunk->deviceID.m_s16ChannelID,
							pCallControl->m_s32AcsEvtErrCode,
							pCallControl->m_s32CallClearCause,
							pOneTrunk->bcallFailFalg);

						fwrite(mTemp,strlen(mTemp),1,g_logfp);
						fflush(g_logfp);
					}									
				}
			}
			break;

		case TRK_CONNECT:
			if(pOneTrunk->iLineState == DCS_FREE )
			{
				if (pOneTrunk->mExchangeType == SS7_VOIP)
				{
					pOneVOIP=&M_OneVOIP(pOneTrunk->pVoipDeviceID);
					if (pOneVOIP->iLineState != DCS_FREE)			
					{
						XMS_ctsClearCall(g_acsHandle, &pOneVOIP->deviceID, 0, NULL);
						
						if(pOneVOIP->pVoiceDeviceID.m_s8ModuleID>0 )
							My_DualUnlink(&pOneTrunk->deviceID, &pOneVOIP->pVoiceDeviceID);		
						DrawVOIP_LinkDev (pOneVOIP);

						if (g_logfp != NULL)
						{
							char	mLog[512]={0};
							char	mCurrTime[50]={0};
							getCurrTime(mCurrTime);
							
							sprintf(mLog,"%s SS7 Connected and Line State Is Free So Clear VOIP CALL :Dsp:%d Ch:%d GlobalID:%d CallerNum:%s CalledNum:%s\n\r",
								mCurrTime,
								pOneVOIP->deviceID.m_s8ModuleID,
								pOneVOIP->deviceID.m_s16ChannelID,
								pOneVOIP->iGlobeID,
								pOneVOIP->CallerNum,
								pOneVOIP->CalleeNum);

							fwrite(mLog,strlen(mLog),1,g_logfp);
							fflush(g_logfp);
						}	
					}
				}	
				
				ResetTrunk(pOneTrunk, pAcsEvt);
				return;
			}
		
			TmpDtmf[0] = My_GetIntfDtmfCode(pAcsEvt);
			if ( TmpDtmf[0] != -1 )								//DTMF按键
			{				
				My_AddIntfDtmfBuf(pOneTrunk, TmpDtmf[0]);
				DrawDTrunk_DTMF(pOneTrunk);					
				
				if(pOneTrunk->DtmfCount > 0 )
				{					
					DeviceID_t	*pOneVOIP = &AllDeviceRes[pOneTrunk->deviceID.m_s8ModuleID].pInterf[pOneTrunk->deviceID.m_s16ChannelID].pVoipDeviceID;
					switch(pubSendRTPDTMFType)
					{
					case 1:
						{
							Acs_VoIP_H245UII h245Uii = {0};
							h245Uii.m_s8Signal = pOneTrunk->DtmfBuf[0]; // dtmf char in "0123456789#*ABCD!"
							h245Uii.m_u32Duration = 200; // milliseconds
							XMS_ctsSendIOData(g_acsHandle,pOneVOIP,XMS_IO_TYPE_VOIP_H245UII,sizeof(h245Uii),&h245Uii);
						}
						break;
					case 2:
						{
							Acs_VoIP_SIPINFO sipInfo = {0};
							strcpy(sipInfo.m_s8ContentType, "application/dtmf");
							sprintf(sipInfo.m_s8Body, "dtmf=%c\nduration=%d", pOneTrunk->DtmfBuf[0], 200);
							XMS_ctsSendIOData(g_acsHandle,pOneVOIP,XMS_IO_TYPE_VOIP_SIPINFO,sizeof(sipInfo),&sipInfo);
						}
						break;
					case 3:
						{
							Acs_VoIP_RTPDTMF rtpDtmf = {0};
							rtpDtmf.m_s8EventChar	= pOneTrunk->DtmfBuf[0];	// rtp dtmf event char
							rtpDtmf.m_s8Volume		= -32;				// volume (in dbm0 from -63 to 0)
							rtpDtmf.m_u16Duration	= 200;				// duration (in timestamp units
							XMS_ctsSendIOData(g_acsHandle,pOneVOIP,XMS_IO_TYPE_VOIP_RTPDTMF,sizeof(rtpDtmf),&rtpDtmf);
						}
						break;
					default:
						{
							Acs_VoIP_H245UII h245Uii = {0};
							h245Uii.m_s8Signal = pOneTrunk->DtmfBuf[0]; // dtmf char in "0123456789#*ABCD!"
							h245Uii.m_u32Duration = 200; // milliseconds
							XMS_ctsSendIOData(g_acsHandle,pOneVOIP,XMS_IO_TYPE_VOIP_H245UII,sizeof(h245Uii),&h245Uii);
						}
						break;
					}
					My_InitIntfDtmfBuf(pOneTrunk);					
				}
			}
		break;
		}
}catch(...)
{
	if (g_logfp != NULL)
	{
		char	mTemp[255]={0};
		char	mCurrTime[50]={0};
		getCurrTime(mCurrTime);
		
		sprintf(mTemp,"%s DT Trunk Run Error\n\r",mCurrTime);
		fwrite(mTemp,strlen(mTemp),1,g_logfp);
		fflush(g_logfp);
	}
}
	return;
}
Пример #11
0
void Logger::logMessage(const std::string& tag, const std::string& msg)
{
    (*m_pLogStream) << '[' << getCurrTime() << ']' << tag << ' ' << msg << std::endl;
}
Пример #12
0
int main(){
	printf("INICIO\n");
	
	checkBusFileStructure();


	char txt[] = "2013-03-01 00:00:00";
	int ret;
	if((ret = createTime_strtok(txt,&mindate))){
		printf("Create time mindate Error  %d\n",ret);
		exit(1);
	}
	maxdate	= getCurrTime();

	
	FILE *fp= fopen("./avl15_21.txt","rb");
	
	if(!fp){
		printf("ARQUIVO NULO\n");
		exit(0);	
	}
	


	fseeko(fp, 0L, SEEK_END);
	long long int EndScale = ftello(fp);
	fseeko(fp, 0L, SEEK_SET);
	printf("SIZE %lld \n",EndScale);

	char *line_read = malloc(MAX_SIZE_LINE*sizeof(char));
	
	fgets(line_read,MAX_SIZE_LINE,fp);//HEADER

	int count=0;
	int counterr=0;

	double minlat,maxlat,minlon,maxlon;
	minlat = 99999.99;
	minlon = 99999.99;
	maxlat = -99999.99;
	maxlon = -99999.99;

	int minbid=999999999; 
	int maxbid=-999999999;


	int LINE_SMASK = 0x00008000;
	int minLS1=999999999;
	int minLS2=999999999;
	int maxLS1=0;
	int maxLS2=0;


	time_t	initime=getCurrTime();
	printf("INI:%s\n",ctime(&initime));
	
	while(fgets(line_read,MAX_SIZE_LINE,fp) ){

		
		barraProgresso(ftello (fp),EndScale);

	
		char *lineid_str 	= strtok(line_read, ",");
		char *data_str 		= strtok(NULL, ",");
		char *busid_str 	= strtok(NULL, ",");
		char *lat_str 		= strtok(NULL, ",");
		char *lon_str 		= strtok(NULL, ",");
		char *dataavl_str 	= strtok(NULL, ",");
	
		trim(dataavl_str);
		trim(data_str);


		time_t	regdate;	
		if(ret = createTime_strtok(data_str,&regdate)){
			printf("ERRO createTime_strtok em %s  ret=%d\n",data_str,ret);
			exit(1);
		}

		if( difftime(maxdate,regdate) < 0.0){
			printf("ERRO data registro (max)  %s \n",data_str);
			printf("regdata %s \n",ctime(&regdate));
			printf("maxdata %s \n",ctime(&maxdate));
			exit(1);
		}

		if( difftime(regdate,mindate) < 0.0){
			printf("ERRO data registro (min)  %s \n",data_str);
			printf("regdata %s \n",ctime(&regdate));
			printf("mindate %s \n",ctime(&mindate));
			exit(1);
		}

	
		
		int busid;
		if(getIstr(busid_str,&busid)!=0){
			printf("Erro conv busid_str %s  \n",busid_str);
			exit(1);
		}

		int lineid;
		if(getIstr(lineid_str,&lineid)!=0){
			printf("Erro conv lineid_str %s  \n",lineid_str);
			exit(1);
		}


		double lat;
		if(getDstr(lat_str,&lat)!=0){
			printf("Erro conv lat_str %s  \n",lat_str);
			exit(1);
		}

		double lon;
		if(getDstr(lon_str,&lon)!=0){
			printf("Erro conv lat_str %s  \n",lon_str);
			exit(1);
		}



		if(lat == 0.0 || lon ==0.0)
			continue;
		

		if(lat > maxlat)
			maxlat=lat;	
		if(lon > maxlon)
			maxlon=lon;
		if(lat < minlat)
			minlat=lat;	
		if(lon < minlon)
			minlon=lon;


		/*
		Utilizando os limites da cidade de são paulo
		*/
		if(lat > -23.320819 || lat < -24.022634 || lon > -46.344452 || lon < -46.867676)
			continue; // COORDENADAS FORA DA CIDADE DE SÃO PAULO



		if(lineid & LINE_SMASK){//SENTIDO 2
				if(lineid >maxLS2)
					maxLS2=lineid;
				if(lineid <minLS2)
					minLS2=lineid;					
		}else{//SENTIDO 1
				if(lineid >maxLS1)
					maxLS1=lineid;
				if(lineid <minLS1)
					minLS1=lineid;	
		}


		if( busid < minbid)
			minbid=busid;
		if( busid > maxbid); 
			maxbid=busid;

		//utilizar esta função juntamente com a verificação inicial de checkBusFileStructure()
		appendToBusfile(busid,lineid,regdate,lat,lon);	
		



		count++;
	}

	time_t	fintime=getCurrTime();
	printf("FIN:%s\n",ctime(&fintime));
	printf("DIFF:%f\n", difftime(fintime,initime));
	printf("lat %f %f\n",minlat,maxlat);
	printf("lon %f %f\n",minlon,maxlon);

	printf("minbid maxbid %d %d\n",minbid,maxbid);
	
	printf("minLS1 maxLS1 %d %d\n",minLS1,maxLS1);
	printf("minLS2 maxLS2 %d %d\n",minLS2,maxLS2);

	printf("%d %d\n",count,counterr);
	
	fclose(fp);
	printf("FIM\n");
	return 0;
}
Пример #13
0
int main(int argc, char* argv[])
{
	if(argc != 3) { // Checks for argument
		fprintf(stderr, "Invalid Argument: Exactly 2 argument needed\n");
		printf("Usage: lyrebird.server <config file> <log file>\n");
		exit(1);

	} else {

  /* ---------------------------- Preparation and environment set-up ----------------------------- */
  /* ------ Open the config file, choose scheduling mode and start creating child processes ------ */
  /* ------ Read pipe and start decryption in child processes ------------------------------------ */

		FILE *configFile = fopen(argv[1], "r");
		FILE *logFile = fopen(argv[2], "w");

		if( configFile == NULL ) {
			fprintf(stderr, "Error: config file does not exist.\n");
			exit(1);

		}
		else if( logFile == NULL ) {
			fprintf(stderr, "Error: log file opening failed.\n");
			exit(1);

		} else {

			// Creating socket
			int sockfd = socket(AF_INET, SOCK_STREAM, 0);
			if(sockfd < 0) {
				fprintf(stderr, "Error: opening socket failed.\n");
				exit(1);
			}

			// Gets the IP address structure of the current computer
			struct sockaddr *s_addr;
			struct ifaddrs *IPConfig, *IPConfig_temp;

			getifaddrs( &IPConfig );
			bool done = false;
			// Loop through IPConfig to find the correct structure then assign to pointer *s_addr
			for( IPConfig_temp = IPConfig; IPConfig_temp && !done; IPConfig_temp = IPConfig_temp->ifa_next ) {

				s_addr = IPConfig_temp->ifa_addr;

				// Find the IP address that belongs to AP_INET and also ignore "127.0.0.1"
				if( strcmp( inet_ntoa( ((struct sockaddr_in *)s_addr)->sin_addr ), "127.0.0.1") != 0 &&
					s_addr->sa_family == AF_INET )

						done = true;

			}
			freeifaddrs( IPConfig );

			// Bind the socket to address of current computer
			if( bind(sockfd, s_addr, sizeof(struct sockaddr)) == -1 )
				printf("Bind error!\n");

			// Start listening from the port
			if( listen(sockfd, LISTEN_BACKLOG) == -1 )
				printf("listen error!\n");

			// Updates the sockaddr structure to find out which port the computer is listening to
			struct sockaddr_in  s_in_addr;
			socklen_t len = sizeof(s_in_addr);
			getsockname( sockfd, (struct sockaddr *)&s_in_addr, &len );

			// Prints out info like address and port of the current lyrebird.server
			printf( "[%s] lyrebird.server: PID %d on host %s, port %d\n",
				getCurrTime(), getpid(), inet_ntoa(s_in_addr.sin_addr), ntohs(s_in_addr.sin_port) );


  /* ------------------------------- Reading config file process ------------------------------- */

			fd_set sockfd_set;
			// Setting select timeout for 10 ms.
			struct timeval timeout;
			timeout.tv_sec = 0;
			timeout.tv_usec = 200;

			int clientfd[100];
			char *client_addr[100];
			int clientIndex = 0;

			char line[MAX_CONFIGLINE_SIZE];

			// Read config file line by line. Exits when reaches EOF.
			while( fgets(line, MAX_CONFIGLINE_SIZE, configFile) != NULL )
			{
				// Arrays that store the input and output file location
				char input[MAX_CONFIGLINE_SIZE];
				char output[MAX_CONFIGLINE_SIZE];

				// Processing input and output file to prepare for writing to client.
				// If there is error in the config file, we skip the current iteration.
				if( getInOutPath(line, input, output) == -1 ) {
					fprintf(stderr, "Invalid Argument: Exactly 2 argument expected for each line in config file.\n");
					continue;
				}

				do {
					FD_ZERO(&sockfd_set);
					FD_SET(sockfd, &sockfd_set);
					select(sockfd + 1, &sockfd_set, NULL, NULL, &timeout);
					if( FD_ISSET(sockfd, &sockfd_set) ) {
						// Accepting connections from the Internet
						clientfd[clientIndex] = accept(sockfd, (struct sockaddr *)&s_in_addr, &len);

						if(clientfd[clientIndex] >= 0) {
							client_addr[clientIndex] = inet_ntoa(s_in_addr.sin_addr);
							// Print out client information
							fprintf(logFile, "[%s] Successfully connected to lyrebird client %s\n",
								getCurrTime(), client_addr[clientIndex] );
							clientIndex++;
						}
					}
				} while(clientIndex == 0);


				fd_set clientfd_set;
				FD_ZERO(&clientfd_set);
				for(int i = 0; i < clientIndex; i++)
					FD_SET(clientfd[i], &clientfd_set);


				select(clientfd[clientIndex - 1] + 1, &clientfd_set, NULL, NULL, &timeout);

				// check if there is a socket that is readable
				char client_message[1100];
				for(int i = 0; i < clientIndex; i++) {
					memset(client_message, 0, 1100);
					if( FD_ISSET(clientfd[i], &clientfd_set) ) {
						read(clientfd[i], client_message, 1100);
						if( strcmp(client_message, "Ready") != 0)
							fprintf(logFile, "[%s] The lyrebird client %s %s",
								getCurrTime(), client_addr[i], client_message);
					}
				}

				// check if there is a socket that is writable
				bool assigned = false;
				while(!assigned) {
					FD_ZERO(&clientfd_set);
					for(int i = 0; i < clientIndex; i++)
						FD_SET(clientfd[i], &clientfd_set);

					select(clientfd[clientIndex - 1] + 1, NULL, &clientfd_set, NULL, &timeout);

					for(int i = 0; i < clientIndex && !assigned ; i++)
						if( FD_ISSET(clientfd[i], &clientfd_set) ) {

							write(clientfd[i], input, 1024);
							write(clientfd[i], output, 1024);
							fprintf(logFile, "[%s] The lyrebird client %s has been given the task of decrypting %s.\n",
								getCurrTime(), client_addr[i], input);

							assigned = true;
						}
				}
			}
			printf("End of while loop.\n");
   /* ----------------------------  End of scheduling Algorithms --------------------------- */

			// Writes "Exit" command to child and once receiving "Exited" status that means a child has exited
			for(int i = 0; i < clientIndex ; i++)
				write(clientfd[i], "Exit", 4);

			// Read messages from client until EOF. When EOF, this indicates the client has closed
			// the socket and exited successfully.
			char client_message[1100];
			int remainClient = clientIndex;
			while(remainClient > 0)
				for(int i = 0; i < clientIndex; i++) {
					memset(client_message, 0, 1100);
					int readSize = read(clientfd[i], client_message, 1100);
					if( readSize == 0 )
						remainClient--;
					else if( strcmp(client_message, "Ready") != 0)
						fprintf(logFile, "[%s] The lyrebird client %s %s",
							getCurrTime(), client_addr[i], client_message);
				}

			for(int i = 0; i < clientIndex; i++)
				close(clientfd[i]);

			printf("[%s] lyrebird.server: PID %d completed its tasks and is exiting successfully.\n",
				getCurrTime(), getpid() );
		}
	}
	return 0;
}
Пример #14
0
void Timer::end()
{
	mEndTime = getCurrTime();
}
Пример #15
0
void Timer::start()
{
	mStartTime = getCurrTime();
}