int DoLtpSipLoginInterface(LtpInterfaceType *ltpInterfaceP)
{
	ltpInterfaceP->firstTimeLoginB = false;
	if(ltpInterfaceP->ltpObjectP->sipOnB==false)
	{	
		restartSocket(&ltpInterfaceP->socketID);
		ltpLogin(ltpInterfaceP->ltpObjectP,CMD_ACTUAL_LOGIN);
	}
	else
	{	
		if(ltpInterfaceP->pjsipStartB==false)
		{	
			
			startThreadLogin(ltpInterfaceP);	
			
			/*if (!sip_spokn_pj_init(ltpInterfaceP->ltpObjectP,errorstr)){
			 
			 
			 return 1;
			 
			 }*/
			ltpInterfaceP->pjsipStartB=true;
		}	
		else {
			SendLoginPacket(ltpInterfaceP);
		}
		
		
	}
	return 0;
	

}
Exemple #2
0
int __cdecl initNet(){	
	WSADATA	wsadata;
	int sock;

	int err = WSAStartup(0x0101, &wsadata);
	if (err != 0)
		return -1;

	sock = restartSocket();
//	CreateThread(NULL, 0, monitorSocket, NULL, 0, NULL);
	return sock;
}
LtpInterfaceType *	  startLtp(Boolean sipOnB,AlertNotificationCallbackP  alertNotiCallbackP,unsigned long userData,int randomVariable)
{
	LtpCallBackType localLtpCallBackType;
	LtpInterfaceType *ltpInterfaceP;
	int er = 0;
	ltpInterfaceP = malloc(sizeof(LtpInterfaceType));
	memset(ltpInterfaceP,0,sizeof(LtpInterfaceType));
	ltpInterfaceP->firstTimeLoginB = true;
	ltpInterfaceP->socketID = -1;
	ltpInterfaceP->ltpObjectP = 0;
	ltpInterfaceP->ltpReceType.bufferLength = MAXDATA;
	ltpInterfaceP->userData = userData;
	ltpInterfaceP->alertNotifyP =  alertNotiCallbackP;
	ltpInterfaceP->checkPortAgainB = 1;
	if(sipOnB==false)
	{
		er = restartSocket(&ltpInterfaceP->socketID);
	}
	if(er ==0)
	{	
	#ifndef SUPPORT_SPEEX
		ltpInterfaceP->ltpObjectP = ltpInitNew(sipOnB,MAX_CALL_ALLOWED, LTP_CODEC_GSM, 4);
	#else		
		ltpInterfaceP->ltpObjectP = ltpInitNew(sipOnB,MAX_CALL_ALLOWED, LTP_CODEC_SPEEX, 4);
	#endif
		if(ltpInterfaceP->ltpObjectP==0)
		{
			free(ltpInterfaceP);
			return NULL;
		}
		
		ltpInterfaceP->ltpObjectP->nextCallSession = 0xffff & ticks();
		ltpInterfaceP->ltpObjectP->nextMsgID = 0xffff & ticks();
		ltpInterfaceP->ltpObjectP->forceProxy = 0;
		strcpy(ltpInterfaceP->ltpObjectP->userAgent, USERAGENT);
		ltpInterfaceP->ltpObjectP->ltpPresence = NOTIFY_ONLINE;
	
		#ifdef _CALLBACKLTP_
	
	
			localLtpCallBackType.lookDnsCallBackPtr = lookupDNSInterface;
		localLtpCallBackType.uData = ltpInterfaceP;
			localLtpCallBackType.alertCallBackPtr   = alertInterface;
			localLtpCallBackType.netWriteCallBackPtr = netWriteInterface;
			localLtpCallBackType.outputSoundCallBackPtr = outputSoundInterface;
			localLtpCallBackType.openSoundCallBackPtr = openSoundInterface;
			localLtpCallBackType.closeSoundCallBackPtr = closeSoundInterface;
			SetLtpCallBack(ltpInterfaceP->ltpObjectP,&localLtpCallBackType);
		
		#endif
	#ifdef _LTP_	
		if(sipOnB==false)
		{	
			pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
			pthread_mutex_init(&mutex, &attr);
			ltpInterfaceP->pthreadstopB = false;
			#ifdef _OWN_THREAD_
				pthread_create(&ltpInterfaceP->pthObj, 0,PollThread,ltpInterfaceP);
			#endif
		}	
	#endif	
		sip_set_randomVariable(ltpInterfaceP->ltpObjectP,randomVariable);
		SetAudioTypeLocal((void*)userData,3);
		
		//setVpnCallback();
		return ltpInterfaceP;
	}
	return NULL;
}
void *PollThread(void *PollThreadP)
{
	#ifndef _LTP_
	return NULL;
	#endif
	
	LtpInterfaceType *gP = (LtpInterfaceType*) PollThreadP;
	
	while(1)
	{
		
		if(gP->pthreadstopB==true) 
		{
			gP->pthreadstopB = false;
			break;
		}
		
		if(gP->connectionActiveByte==0 || gP->firstTimeLoginB==true)
		{
			sleep(2);
			continue;
		}
		else
		{
		
			
			if(gP->connectionActiveByte==1)
			{	
				restartSocket(&gP->socketID);
				
				ltpLogin(gP->ltpObjectP,CMD_ACTUAL_LOGIN);
				gP->connectionActiveByte = 2;
			}
			
			
			/*
			
			if(gP->currentTime==0)
			{
				gP->currentTime = time(NULL);
			}
			else
			{
				long diff;
				diff = time(NULL) - gP->currentTime;
				if(diff>MAXTIME_RESYNC)
				{
					gP->currentTime = time(NULL);
					
					if(gP->ltpObjectP->call[gP->ltpObjectP->activeLine].ltpState = CALL_IDLE)
					{	
						profileResync();
					}	
				}
				
			}*/
			if(DoPolling(gP)!=0)
			{	
				//sleep(1);
				gP->pthreadstopB = false;
				break;
				
			}
			
		
		
		
		}
		
				
	}
	return NULL;
	
}