📄 sipengine.cpp
字号:
/*
============================================================================
Name : CSIPEngine from SIPEngine.h
Author :
Version :
Copyright : Your copyright notice
Description : CSIPEngine LIB source
============================================================================
*/
// Include Files
#include "SIPEngine.h"
#include <sys/time.h>#include <e32math.h>#include <ESIMAppUi.h>#include <es_sock.h>
#include <CommDbConnPref.h>
#include <stdio.h>
#include <utf.h>
#include <string.h>
const TUint32 KIAPID = 3;
extern char* my_itoa2(int num, char* str);
extern char* my_itoa(int aInt, int aLength, char* str);
CSIPEngine* CSIPEngine::NewLC(CESIMAppUi* aCESIMAppUi)
{
CSIPEngine* self = new (ELeave) CSIPEngine;
CleanupStack::PushL(self);
self->ConstructL(aCESIMAppUi);
return self;
}
CSIPEngine* CSIPEngine::NewL(CESIMAppUi* aCESIMAppUi)
{
CSIPEngine* self = CSIPEngine::NewLC(aCESIMAppUi);
CleanupStack::Pop(self);
return self;
}
CSIPEngine::CSIPEngine()
{
// note, CBase initialises all member variables to zero
}
// second phase constructor, anything that may leave must be constructed here
void CSIPEngine::ConstructL(CESIMAppUi* aCESIMAppUi)
{
iBuffer = HBufC8::NewL(4000 * sizeof (char) + 1);
iListenBuffer = CListenBuffer::NewL();
iCESIMAppUi = aCESIMAppUi;
}
CSIPEngine::~CSIPEngine()
{
if (iBuffer != NULL)
{
delete iBuffer;
iBuffer = NULL;
}
if(iSocketEngine)
{
iSocketEngine->Cancel();
delete iSocketEngine;
iSocketEngine = NULL;
}
if (iListenBuffer)
{
iListenBuffer->Cancel();
delete iListenBuffer;
iListenBuffer = NULL;
}
}
void CSIPEngine::SocketData(TDesC8& aData)
{
iBuffer->Des().Zero();
iBuffer->Des().Append(aData);
TBuf<100> msg16;
CnvUtfConverter::ConvertToUnicodeFromUtf8(msg16, aData);
iCESIMAppUi->my_MessageDialog(msg16, _L("Neusoft"));
}
void CSIPEngine::SocketState(TInt aNewState)
{
}
void CSIPEngine::ShowMessage(TInt aType)
{
}
int CSIPEngine::StartL(int aProtocol, int aLocalPort, char *aRemoteAddress, int aRemotePort)
{
TBuf8<50> remoteAddr8;
TBuf<50> remoteAddr16;
remoteAddr8.Copy((unsigned char*)aRemoteAddress);
CnvUtfConverter::ConvertToUnicodeFromUtf8(remoteAddr16, remoteAddr8);
iRemoteInetAddr.Input(remoteAddr16);
iRemoteInetAddr.SetPort(aRemotePort);
iSocketEngine = CSocketEngine::NewL(*this, EUDP, aLocalPort, remoteAddr16, aRemotePort);
ResolveLocalIPAddressL();
iListenBuffer->StartL(1000000, aProtocol, aLocalPort, aRemoteAddress, aRemotePort, iBuffer);
}
/*
把 TDesC8 转化成 char
注意:函数不为 abuf 分配内存
*/
int CSIPEngine::TDesC8_to_char (char* abuf, TDesC8& aTDes)
{
char* ptr;
if (!abuf)
return -1;
if (aTDes.Length() == 0)
return 0;
strncpy(abuf, (const char*)aTDes.Ptr(), aTDes.Length());
ptr = abuf + aTDes.Length();
*ptr = 0;
return 0;
}
void CSIPEngine::sip_message(char* aMessage, char* aTo, char* aFrom, int msgtype, char* aTimed)
{
SendMessage(aMessage, strlen(aMessage));
}
void CSIPEngine::sip_group_message(char* aMessage, char* aTo, char* aFrom, char* aUserListBuf)
{
}
//获得本机IP地址
void CSIPEngine::ResolveLocalIPAddressL()
{
TInetAddr localAddr;
localAddr = iSocketEngine->LocalIPAddress();
TBuf<50> localIP;
localAddr.Output(localIP);
TBuf8<25> buf;
buf.Copy(localIP);
buf.ZeroTerminate();
//iCESIMAppUi->ShowInfoL(buf);
//memcpy((char*)eXosip.locip, (char*)buf.Ptr(), buf.Length());
}
int my_rand()
{
TInt KAknExNoteInitializeTime = 0;
TInt KAknExNoteRandomNumberRange = 20;
TTime theTime( KAknExNoteInitializeTime );
theTime.UniversalTime();
TInt64 randSeed( theTime.Int64() );
TInt number( Math::Rand( randSeed ) );
return number;
}
void CSIPEngine::SendMessage(char* strMessage, int len)
{
TPtr8 pBuf((unsigned char*)strMessage, len);
pBuf.SetLength(len);
iSocketEngine->Write(pBuf);
}
char* my_itoa(int num, int aLength, char* str)
{
TBuf8<32> buf;
_LIT8(KItoaForamt, "%d");
buf.Format(KItoaForamt, num);
//osip_strncpy(str, (char*)buf.PtrZ(), buf.Length());
strcpy(str, (char*)buf.PtrZ());
return str;
}
char* my_itoa2(int num, char* str)
{
TBuf8<32> buf;
_LIT8(KItoaForamt, "%d");
buf.Format(KItoaForamt, num);
//osip_strncpy(str, (char*)buf.PtrZ(), buf.Length());
strcpy(str, (char*)buf.PtrZ());
return str;
}
char* my_rand2(char* aStr, int aLength)
{
char CCH[] = "0123456789abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < aLength; ++i)
{
int x = Math::Random() % (sizeof(CCH) - 1);
aStr[i] = CCH[x];
}
return aStr;
}
int GetCurrentUserIndex()
{
CESIMAppUi* pUi = (CESIMAppUi*)CCoeEnv::Static()->AppUi();
return pUi->GetCurrentUserIndex();
}
int GetCurrentGroupIndex()
{
CESIMAppUi* pUi = (CESIMAppUi*)CCoeEnv::Static()->AppUi();
return pUi->GetCurrentGroupIndex();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -