int DoLtpSipLoginInterface(LtpInterfaceType *ltpInterfaceP) { ltpInterfaceP->firstTimeLoginB = false; if(ltpInterfaceP->ltpObjectP->sipOnB==false) { restartSocket(<pInterfaceP->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; }
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(<pInterfaceP->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(<pInterfaceP->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; }