📄 tmlsession.cpp
字号:
}
}
if(_nextitem>m_nAll)
{
//已经传完
_return_code = 500;
m_nItem=1;
m_nSendOK =1;
m_nSendData = 0;
m_sPath = NULL;
m_sCurLocURI=NULL;
}
char b64Buf[MAX_B64BUFFER];
if(_return_code==200)
{
unsigned int cbOffset = 0; // <<<<< ????
char abSave [4];
abSave [0] = abSave [1] = abSave [2] = abSave [3] = '\0';
if(_nextitem==0) //重传
_nextitem=1;
m_fpFile = fopen(m_sPath,"rb");
char readBuf[MAX_CLIENTBUFFER+1];
size_t _length_buffer = MAX_CLIENTBUFFER;
fseek (m_fpFile , (_nextitem-1)*MAX_CLIENTBUFFER , SEEK_SET );
int _cur_loc = ftell(m_fpFile);
XPTDEBUG(("HandleMStatus(当前位置item=%d,loc=%d)\n",_nextitem-1,_cur_loc));
if(_nextitem < m_nAll)
{
fread(readBuf,_length_buffer,1,m_fpFile);
fclose(m_fpFile);
size_t t = base64Encode((BYTE*)b64Buf,MAX_B64BUFFER,(BYTE*)readBuf,&_length_buffer,&cbOffset,1,(unsigned char *)abSave);
b64Buf[t]=0;
XPTDEBUG(("HandleRStatus(_length_buffer1=%d)\n",_length_buffer));
}
else
{
_length_buffer = m_nFileLength-(m_nAll-1)*MAX_CLIENTBUFFER;
fread(readBuf,_length_buffer,1,m_fpFile);
fclose(m_fpFile);
size_t t = base64Encode((BYTE*)b64Buf,MAX_B64BUFFER,(BYTE*)readBuf,&_length_buffer,&cbOffset,1,(unsigned char *)abSave);
b64Buf[t]=0;
XPTDEBUG(("HandleRStatus(_length_buffer2=%d)\n",_length_buffer));
}
}
TmlResources_t _resources;
tmlLibMemset(&_resources,0,(MemSize_t)sizeof(TmlResources_t));
_resources.elementType = TML_PE_RESOURCES_START;
_resources.count = tmlString2Pcdata("1");
tmlResources(id,&_resources);
TmlResource_t _resource;
tmlLibMemset(&_resource,0,(MemSize_t)sizeof(TmlResource_t));
if(_return_code==200)
{
_resource.elementType = TML_PE_RESOURCE;
_resource.cmdID = tmlString2Pcdata("1");
_resource.cmd = tmlString2Pcdata("send");
_resource.locuri = tmlString2Pcdata(m_sCurLocURI);
_resource.rtype = tmlString2Pcdata(m_sRType);
_resource.rname = tmlString2Pcdata(m_sRName);
_resource.data = tmlString2Pcdata("200");
_resource.locuri = tmlString2Pcdata(m_sCurLocURI);
char vert[10];
sprintf(vert , "%d",_nextitem);
_resource.item = tmlString2Pcdata(vert);
sprintf(vert , "%d",m_nAll);
_resource.all = tmlString2Pcdata(vert);
_resource.content = tmlString2Pcdata(b64Buf);
}
else
{
_resource.elementType = TML_PE_RESOURCE;
_resource.cmdID = tmlString2Pcdata("1");
_resource.cmd = tmlString2Pcdata("send");
_resource.locuri = tmlString2Pcdata("");
_resource.rtype = tmlString2Pcdata("");
_resource.rname = tmlString2Pcdata("");
_resource.data = tmlString2Pcdata("500");
_resource.locuri = tmlString2Pcdata("");
char vert[10];
sprintf(vert , "%d",_nextitem);
_resource.item = tmlString2Pcdata(vert);
sprintf(vert , "%d",m_nAll);
_resource.all = tmlString2Pcdata(vert);
_resource.content = tmlString2Pcdata("");
}
tmlResource(id,&_resource);
tmlEndResources(id);
if(_nextitem==m_nAll)
{
//已经传完
m_nSendOK =1;
m_nSendData = 0;
_update_pimdownfile(this);
m_sPath = NULL;
m_sCurLocURI=NULL;
}
*/
}
void CTmlSession::HandleResourcesDirectory(InstanceID_t id,TmlCmdResourcesDirectory_s*pRes)
{
XPTDEBUG(("HandleResourcesDirectory()\n"));
TmlLItems_t _litems;
int _icount=0;
CMySet _set;
char _sql[1024];
char _count [10];
tmlLibMemset(&_litems,0,(MemSize_t)sizeof(TmlLItems_t));
_litems.elementType = TML_PE_LITEMS_START;
if(true)
{
sprintf(_sql,"select count(*) from pim_resource where userid = '%s'",m_sUser);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE)
{
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else
{
if(workdb.FetchData())
{
_icount = atoi(_set.GetFieldValue(0));
XPTDEBUG(("SQL='%s' count=%d\n",_sql,_count));
}
else
{
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
}
sprintf(_count,"%d",_icount );
_litems.count = tmlString2Pcdata(_count);
tmlLItems(id,&_litems);
}
if(_count>0)
{
char _locuri[1000];
char _rtype[1000];
char _rname[1000];
char _rsize[1000];
char _createtime[1000];
sprintf(_sql,"select locuri,rtype,rname,rsize,createtime from pim_resource where userid = '%s' order by id desc",m_sUser);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE)
{
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else
{
while(workdb.FetchData())
{
tmlLibStrcpy(_locuri,_set.GetFieldValue(0));
XPTDEBUG(("locuri='%s'\n",_locuri));
tmlLibStrcpy(_rtype,_set.GetFieldValue(1));
XPTDEBUG(("rtype=%s\n",_rtype));
tmlLibStrcpy(_rname,_set.GetFieldValue(2));
XPTDEBUG(("rname=%s\n",_rname));
tmlLibStrcpy(_createtime,_set.GetFieldValue(4));
XPTDEBUG(("createtime=%s\n",_createtime));
tmlLibStrcpy(_rsize,_set.GetFieldValue(3));
XPTDEBUG(("rsize=%s\n",_rsize));
TmlLItem_t _litem;
tmlLibMemset(&_litem,0,(MemSize_t)sizeof(TmlLItem_t));
_litem.elementType = TML_PE_LITEM;
_litem.locuri = tmlString2Pcdata(_locuri);
_litem.rtype = tmlString2Pcdata(_rtype);
_litem.rname = tmlString2Pcdata(_rname);
_litem.rsize = tmlString2Pcdata(_rsize);
_litem.rtime = tmlString2Pcdata(_createtime);
tmlLItem(id,&_litem);
}
}
}
tmlEndLItems(id);
}
void CTmlSession::DebugInfo()
{
TmlSessionCmdItem_t * _pNode;
_pNode = m_pHead;
while(_pNode!=NULL)
{
switch(_pNode->ItemType)
{
case TML_PE_UNDEF:
XPTDEBUG(("未定义\n"));
break;
case TML_PE_ERROR:
XPTDEBUG(("Error\n"));
break;
case TML_PE_FINAL:
XPTDEBUG(("final\n"));
break;
case TML_PE_THDR:
XPTDEBUG(("hdr\n"));
break;
case TML_PE_SEND_START:
XPTDEBUG(("send\n"));
break;
case TML_PE_RECV_START:
XPTDEBUG(("recv\n"));
break;
case TML_PE_RESOURCES_START:
XPTDEBUG(("resources\n"));
break;
case TML_PE_RESOURCE:
XPTDEBUG(("resource\n"));
break;
case TML_PE_RESOURCESDIRECTORY:
XPTDEBUG(("resourcesdirectory\n"));
break;
case TML_PE_RSTATUS:
XPTDEBUG(("rstatus\n"));
break;
case TML_PE_LITEMS_START:
XPTDEBUG(("litems\n"));
break;
}
_pNode=_pNode->next;
}
}
void CTmlSession::InsertCmdItem(TmlProtoElement_t ItemType,void *CmdItem)
{
TmlSessionCmdItem_t * _pNode = m_pEnd;
if(m_pHead==NULL){
m_pHead = (TmlSessionCmdItem_t *)tmlLibMalloc(sizeof(TmlSessionCmdItem_t));
tmlLibMemset( m_pHead,0,sizeof(TmlSessionCmdItem_t));
m_pEnd = m_pHead;
_pNode = m_pEnd;
}
else{
m_pEnd = (TmlSessionCmdItem_t *)tmlLibMalloc(sizeof(TmlSessionCmdItem_t));
tmlLibMemset( m_pEnd,0,sizeof(TmlSessionCmdItem_t));
}
_pNode->next = m_pEnd;
m_pEnd->CmdItem=CmdItem;
m_pEnd->ItemType =ItemType;
m_pEnd->next = NULL;
DebugInfo();
return ;
}
void CTmlSession::HandleContacts(InstanceID_t id,TmlCmdContacts_s*pRes)
{
XPTDEBUG(("HandleContacts()\n"));
int ncount = atoi(pRes->count);
m_nCount = ncount;
if(ncount!=0)
{
TmlCStatuss_t _cstatuss;
tmlLibMemset(&_cstatuss,0,(MemSize_t)sizeof(TmlCStatuss_t));
_cstatuss.elementType = TML_PE_CSTATUSS_START;
_cstatuss.count = tmlString2Pcdata("1");
tmlCStatuss(id,&_cstatuss);
}
else
{
CMySet _set;
if(m_nTxlFlag==1)
{
//下载所有
TmlContacts_t _contacts;
int nod = _database_get_txlnumberofdownload(this);
//if(nod==0)
// return ;
char vert[10];
sprintf(vert , "%d",nod);
_contacts.count = tmlString2Pcdata(vert);
_contacts.elementType = TML_PE_CONTACTS_START;
tmlContacts(id,&_contacts);
if(nod==0)
return;
int i = 0,int j = 0;
TmlContact_t _contact;
char _sql [1024];
sprintf(_sql,"select locuri,cmobile,cname,flag from pim_contact where userid='%s' order by id desc ",m_sUser);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else
{
while(workdb.FetchData())
{
char readBuf[MAX_CLIENTBUFFER+1];
char b64Buf[MAX_B64BUFFER];
unsigned int cbOffset = 0; // <<<<< ????
char abSave [4];
abSave [0] = abSave [1] = abSave [2] = abSave [3] = '\0';
i++;
_contact.cmd = tmlString2Pcdata("send");
sprintf(vert , "%d",i);
_contact.cmdid = tmlString2Pcdata(vert);
_contact.cmobile = tmlString2Pcdata(_set.GetFieldValue(1));
strcpy(readBuf,_set.GetFieldValue(2));
char cname[1000];
char ucname[1000];
memset(cname,0,1000);
memset(ucname,0,1000);
strcpy(cname,readBuf);
unsigned int len = 0;
MByteToWChar(cname,(wchar_t*)ucname,1000);
len = wcslen((wchar_t*)ucname);
len = len *2;
XPTDEBUG(("CNAME(%s)\n",cname));
size_t t = base64Encode((BYTE*)b64Buf,MAX_B64BUFFER,(BYTE*)ucname,&len,&cbOffset,1,(unsigned char *)abSave);
b64Buf[t]=0;
//MByteToWChar(b64Buf,ucname,1000);
XPTDEBUG(("CNAME(%s)\n",b64Buf));
_contact.cname = tmlString2Pcdata((char*)b64Buf);
_contact.locuri = tmlString2Pcdata(_set.GetFieldValue(0));
int op = atoi(_set.GetFieldValue(3));
if(op == 0||op==1||op==2)
{
_contact.op = tmlString2Pcdata("add");
}
else
{
_contact.op = tmlString2Pcdata("delete");
}
tmlContact(id,&_contact);
}
}
}
else
{
//下载部分
TmlContacts_t _contacts;
int nod = _database_get_txlnumberofdownload(this);
char vert[10];
sprintf(vert , "%d",nod);
_contacts.count = tmlString2Pcdata(vert);
_contacts.elementType = TML_PE_CONTACTS_START;
tmlContacts(id,&_contacts);
if(nod==0)
return;
int i = 0,int j = 0;
TmlContact_t _contact;
char _sql[1024];
sprintf(_sql,"select locuri,cmobile,cname,flag from pim_contact where userid='%s' and syncid !='%s' order by id desc ",m_sUser,m_sSyncID);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else
{
while(workdb.FetchData())
{
char readBuf[MAX_CLIENTBUFFER+1];
char b64Buf[MAX_B64BUFFER];
unsigned int cbOffset = 0; // <<<<< ????
char abSave [4];
abSave [0] = abSave [1] = abSave [2] = abSave [3] = '\0';
i++;
_contact.cmd = tmlString2Pcdata("send");
sprintf(vert , "%d",i);
_contact.cmdid = tmlString2Pcdata(vert);
_contact.cmobile = tmlString2Pcdata(_set.GetFieldValue(1));
strcpy(readBuf,_set.GetFieldValue(2));
char cname[1000];
char ucname[1000];
memset(cname,0,1000);
memset(ucname,0,1000);
strcpy(cname,readBuf);
unsigned int len = 0;
MByteToWChar(cname,(wchar_t*)ucname,1000);
len = wcslen((wchar_t*)ucname);
len = len *2;
XPTDEBUG(("CNAME(%s)\n",cname));
size_t t = base64Encode((BYTE*)b64Buf,MAX_B64BUFFER,(BYTE*)ucname,&len,&cbOffset,1,(unsigned char *)abSave);
b64Buf[t]=0;
XPTDEBUG(("CNAME(%s)\n",b64Buf));
_contact.cname = tmlString2Pcdata(b64Buf);
_contact.locuri = tmlString2Pcdata(_set.GetFieldValue(0));
int op = atoi(_set.GetFieldValue(3));
if(op == 0||op==1||op==2)
{
_contact.op = tmlString2Pcdata("add");
}
else
{
_contact.op = tmlString2Pcdata("delete");
}
tmlContact(id,&_contact);
}
}
}
_update_finishpimcontact(this);
}
}
void CTmlSession::HandleEndContacts(InstanceID_t id)
{
XPTDEBUG(("HandleEndContacts()\n"));
if(m_nCount!=0)
{
tmlEndCStatuss(id);
}
else
{
if(m_nTxlFlag==0)
{
tmlEndContacts(id);
}
else
{
tmlEndContacts(id);
ClearSyncID();
}
}
// tmlFinal(id, tmlString2Pcdata("1"));
}
void CTmlSession::HandleContact(InstanceID_t id,TmlCmdContact_s*pCont)
{
XPTDEBUG(("HandleContact()\n"));
int _item_flag = -1;// 此item的flag;0同步,1服务器添加2服务器删除
int _return_code = 200;//默认成功
TmlCStatus_t _cstatus;
if(pCont->locuri==NULL||tmlLibStrlen(pCont->locuri)==0)
{
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("500");
_cstatus.locuri = tmlString2Pcdata("");
_cstatus.opref = tmlString2Pcdata(pCont->op);
//_cstatus. = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
_item_flag = _database_get_contactflag(this,pCont);
if(_item_flag==-1)
{
//服务器不存在这个item
_insert_pimcontact(this,pCont);
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("200");
_cstatus.locuri = tmlString2Pcdata(pCont->locuri);
_cstatus.opref = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
if(_item_flag == 0)
{
//0 未更新过,主动更新
_update_pimcontact(this,pCont);
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("200");
_cstatus.locuri = tmlString2Pcdata(pCont->locuri);
_cstatus.opref = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
if(_item_flag==1)
{
//服务器端更新过添加
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("500");
_cstatus.locuri = tmlString2Pcdata(pCont->locuri);
_cstatus.opref = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
if(_item_flag==2)
{
//服务器端更新
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("500");
_cstatus.locuri = tmlString2Pcdata(pCont->locuri);
_cstatus.opref = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
if(_item_flag==3)
{
//服务器端删除
tmlLibMemset(&_cstatus,0,(MemSize_t)sizeof(TmlCStatus_t));
_cstatus.elementType = TML_PE_CSTATUS;
_cstatus.cmdRef = tmlString2Pcdata(pCont->cmd);
_cstatus.cmdidRef = tmlString2Pcdata(pCont->cmdid);
_cstatus.data = tmlString2Pcdata("500");
_cstatus.locuri = tmlString2Pcdata(pCont->locuri);
_cstatus.opref = tmlString2Pcdata(pCont->op);
tmlCStatus(id,&_cstatus);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -