📄 pimserver.cpp
字号:
_rname = _set.GetFieldValue(1);
_length = tmlLibStrlen(_rname);
pSess->m_sRName=(String_t)tmlLibMalloc(_length);
tmlLibMemset(pSess->m_sRName,0,_length);
tmlLibStrcpy(pSess->m_sRName,_rname);
_path = _set.GetFieldValue(2);
_length = tmlLibStrlen(_path);
pSess->m_sPath=(String_t)tmlLibMalloc(_length);
tmlLibMemset(pSess->m_sPath,0,_length);
tmlLibStrcpy(pSess->m_sPath,_path);
XPTDEBUG(("SQL='%s' rtype='%s' ,rname='%s',path='%s'\n",_sql,pSess->m_sRType,pSess->m_sRName,pSess->m_sPath));
}
}
return 1 ;
}
int _load_pimupfile(CTmlSession*pSess,char*locuri)
{
char _sql[1024];
int _count=0;
CMySet _set;
char * _filepath=NULL;
char * _locuri=NULL;
int _length;
sprintf(_sql,"select count(*) from pim_upfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,locuri);
XPTDEBUG(("SQL='%s' \n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else{
if(workdb.FetchData()){
_count = atoi(_set.GetFieldValue(0));
XPTDEBUG(("SQL='%s' count=%d\n",_sql,_count));
}
}
if(_count==0){
return _count;
}
sprintf(_sql,"select filepath,nextitem,revok,revdata ,locuri from pim_upfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,locuri);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
else{
if(workdb.FetchData()){
_filepath = _set.GetFieldValue(0);
_length = tmlLibStrlen(_filepath);
pSess->m_sPath=(String_t)tmlLibMalloc(_length);
tmlLibMemset(pSess->m_sPath,0,_length);
tmlLibStrcpy(pSess->m_sPath,_filepath);
pSess->m_nNextItem = atoi(_set.GetFieldValue(1));
pSess->m_nRevOK = atoi(_set.GetFieldValue(2));
pSess->m_nRevData = atoi(_set.GetFieldValue(3));
_locuri = _set.GetFieldValue(4);
_length = tmlLibStrlen(_locuri);
pSess->m_sCurLocURI=(String_t)tmlLibMalloc(_length);
tmlLibMemset(pSess->m_sCurLocURI,0,_length);
tmlLibStrcpy(pSess->m_sCurLocURI,_locuri);
XPTDEBUG(("SQL='%s' locuri='%s' ,path='%s',nextitem=%d\n",_sql,pSess->m_sCurLocURI,_filepath,pSess->m_nNextItem));
}
}
return 1 ;
}
int _insert_pimupfile(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
CMySet _set;
sprintf(_sql,"select count(*) from pim_upfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,pSess->m_sCurLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("sql=%s error=%s\n",_sql,workdb.GetSqlError()));
}
else{
if(workdb.FetchData()){
_count = atoi(_set.GetFieldValue(0));
XPTDEBUG(("SQL='%s' count=%d\n",_sql,_count));
}
}
if(_count>=1){
return 1;
}
sprintf(_sql,"insert into pim_upfile(userid,pimsession,locuri,filepath,nextitem,revdata,revok) values ('%s','%s' ,'%s','%s',%d,%d,0)",pSess->m_sUser,pSess->m_sSessID,pSess->m_sCurLocURI,pSess->m_sPath,pSess->m_nNextItem,pSess->m_nRevData);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error=%s\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
int _insert_pimresource(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
CMySet _set;
sprintf(_sql,"select count(*) from pim_resource where pimsession='%s' and locuri='%s'",pSess->m_sSessID,pSess->m_sCurLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("sql=%s error=%s\n",_sql,workdb.GetSqlError()));
}
else{
if(workdb.FetchData()){
_count = atoi(_set.GetFieldValue(0));
XPTDEBUG(("SQL='%s' count=%d\n",_sql,_count));
}
}
if(_count>=1){
return 1;
}
sprintf(_sql,"insert into pim_resource(userid,pimsession,locuri,rtype,rname,rsize,path) \
values ('%s' ,'%s','%s','%s','%s',%d,'%s')",pSess->m_sUser,pSess->m_sSessID,pSess->m_sCurLocURI,pSess->m_sRType,pSess->m_sRName,pSess->m_nRevData,pSess->m_sPath);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error=%s\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
int _insert_pimmagicmms(CTmlSession*pSess)
{
char sql[1024];
sprintf(sql,"insert into pim_magicmms(userid,locuri,pimsession,paction,area,message,style,type,sno,rsize,filepath) \
values('%s','%s','%s','%s','%s','%s','%s','%s','%s',%d,'%s')",
pSess->m_sUser,pSess->m_sCurMagicLocURI,pSess->m_sSessID,pSess->m_sAction,pSess->m_sArea,pSess->m_sMessage,pSess->m_sStyle,pSess->m_sType,pSess->m_sSno,pSess->m_nFileLength,pSess->m_sPath);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _insert_pimcontact(CTmlSession*pSess,TmlCmdContact_s*pCont)
{
char cname[1000];
char ucname[1000];
memset(cname,0,1000);
memset(ucname,0,1000);
int i = base64decode(pCont->cname,strlen(pCont->cname),(char*)ucname);
WCharToMByte((wchar_t*)ucname,cname,100);
char sql[1024];
sprintf(sql,"insert into pim_contact(userid,locuri,pimsession,cmobile,cname,syncid,flag) \
values('%s','%s','%s','%s','%s','%s',0)",
pSess->m_sUser,pCont->locuri,pSess->m_sSessID,pCont->cmobile,cname,pSess->m_sSyncID);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _insert_pimmagicmmsdownfile(CTmlSession*pSess)
{
char sql[1024];
sprintf(sql,"insert into pim_magicmmsdownfile(userid,locuri,pimsession,filepath,senddata,sendok,item,itemall) \
values('%s','%s','%s','%s',%d,%d,%d,%d)",
pSess->m_sUser,pSess->m_sCurMagicLocURI,pSess->m_sSessID,pSess->m_sPath,pSess->m_nSendData,pSess->m_nSendOK,pSess->m_nItem,pSess->m_nAll);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _insert_pimdownfile(CTmlSession*pSess)
{
char sql[1024];
sprintf(sql,"insert into pim_downfile(userid,locuri,pimsession,filepath,senddata,sendok,item,itemall) \
values('%s','%s','%s','%s',%d,%d,%d,%d)",
pSess->m_sUser,pSess->m_sCurLocURI,pSess->m_sSessID,pSess->m_sPath,pSess->m_nSendData,pSess->m_nSendOK,pSess->m_nItem,pSess->m_nAll);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _update_pimmagicmmsdownfile(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
sprintf(_sql,"update pim_magicmmsdownfile set item =%d ,sendok=%d,senddata=%d ,endtime = getdate() where pimsession='%s' and locuri='%s'",pSess->m_nItem,pSess->m_nSendOK,pSess->m_nSendData,pSess->m_sSessID,pSess->m_sCurMagicLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
int _update_pimdownfile(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
sprintf(_sql,"update pim_downfile set item =%d ,sendok=%d,senddata=%d ,endtime = getdate() where pimsession='%s' and locuri='%s'",pSess->m_nItem,pSess->m_nSendOK,pSess->m_nSendData,pSess->m_sSessID,pSess->m_sCurLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
int _update_pimcontact(CTmlSession*pSess,TmlCmdContact_s*pCont)
{
char cname[1000];
char ucname[1000];
memset(cname,0,1000);
memset(ucname,0,1000);
int i = base64decode(pCont->cname,strlen(pCont->cname),(char*)ucname);
WCharToMByte((wchar_t*)ucname,cname,100);
char sql[1024];
sprintf(sql,"update pim_contact set cmobile = '%s',cname='%s',flag=0,syncid='%s' \
where userid ='%s' and locuri ='%s'",
pCont->cmobile,cname,pSess->m_sSyncID,pSess->m_sUser,pCont->locuri);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _update_finishpimcontact(CTmlSession*pSess)
{
char sql[1024];
sprintf(sql,"update pim_contact set syncid = '%s',flag = 0 where userid ='%s'" ,pSess->m_sSyncID,pSess->m_sUser);
XPTDEBUG(("sql=%s\n",sql));
if(!workdb.ExeSqlDirect(sql))
{
char log[1024];
sprintf(log,"Error : %s ",sql);
}
return 1;
}
int _update_pimupfile(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
sprintf(_sql,"update pim_upfile set nextitem =%d ,revok=%d,revdata=%d ,endtime = getdate() where pimsession='%s' and locuri='%s'",pSess->m_nNextItem,pSess->m_nRevOK,pSess->m_nRevData,pSess->m_sSessID,pSess->m_sCurLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
/*
int _insert_pimmagicmmsdownfile(CTmlSession*pSess)
{
char _sql[1024];
int _count=0;
CMySet _set;
sprintf(_sql,"select count(*) from pim_magicmmsdownfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,pSess->m_sCurLocURI);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.PrepareSql(_sql, _set)==FALSE){
XPTDEBUG(("sql=%s error=%s\n",_sql,workdb.GetSqlError()));
}
else{
if(workdb.FetchData()){
_count = atoi(_set.GetFieldValue(0));
XPTDEBUG(("SQL='%s' count=%d\n",_sql,_count));
}
}
if(_count>=1){
return 1;
}
sprintf(_sql,"insert into pim_magicmmsdownfile(pimsession,locuri,filepath,nextitem,revdata,revok) values ('%s' ,'%s','%s',%d,%d,0)",pSess->m_sSessID,pSess->m_sCurLocURI,pSess->m_sPath,pSess->m_nNextItem,pSess->m_nRevData);
XPTDEBUG(("SQL='%s'\n",_sql));
if(workdb.ExeSqlDirect(_sql)==FALSE){
XPTDEBUG(("SQL='%s' error=%s\n",_sql,workdb.GetSqlError()));
}
return 1 ;
}
*/
void smlReceiveData(InstanceID_t id, XptServiceID_t serviceID,XptCommunicationID_t conn,XptCommunicationInfo_t* pdocInfo)
{
MemPtr_t writeBuffer = NULL;
MemSize_t bytesWritten = 0;
size_t bytesReceived = 0;
size_t pkgbytesReceived = 0;
VoidPtr_t userData = NULL;
MemPtr_t readBuffer = NULL;
MemSize_t bytesRead = 0;
size_t bytesSent = 0;
WB_UTINY *wbxml = NULL,
WB_UTINY *xml = NULL;
WB_LONG count = 0;
WB_LONG wbxml_len = 0;
WB_LONG total = 0;
WB_ULONG xml_len = 0;
WBXMLError ret = WBXML_OK;
WBXMLGenXMLParams params;
/* Init Default Parameters */
params.lang = WBXML_LANG_UNKNOWN;
params.gen_type = WBXML_GEN_XML_INDENT;
params.indent = 1;
params.keep_ignorable_ws = FALSE;
smlLockWriteBuffer(id, &writeBuffer, &bytesWritten);
XPTDEBUG(("smlBuffer (%d,%d)\n",writeBuffer,bytesWritten));
while(true)
{
C(xptReceiveData(conn, writeBuffer+pkgbytesReceived, bytesWritten, &bytesReceived));
pkgbytesReceived = pkgbytesReceived + bytesReceived;
if(pkgbytesReceived>=pdocInfo->cbLength){
break;
}
if(bytesReceived<=0){
break;
}
}
wbxml = writeBuffer;
wbxml_len = pkgbytesReceived;
//转换成xml格式并打印
XPTDEBUG(("-----------pkgbytesReceived=%d,docInfo.cbLength=%d---------\n",pkgbytesReceived,pdocInfo->cbLength));
ret = wbxml_conv_wbxml2xml_withlen(wbxml, wbxml_len, &xml, &xml_len, ¶ms);
if (ret != WBXML_OK)
{
XPTDEBUG(("wbxml2xml failed: %s\n", wbxml_errors_string(ret)));
}
else
{
XPTDEBUG(("wbxml2xml succeded\n"));
XPTDEBUG(("Received Data = len =%d\n '%s'\n", strlen((char*)xml),xml));
wbxml_free(xml);
}
/* Turn the workspace buffer over to SyncML for document processing */
smlUnlockWriteBuffer(id, pkgbytesReceived);
C(smlProcessData(id, SML_ALL_COMMANDS));
CSyncSession*pSess = smgr.GetActiveSession();
pSess->m_nCmdID = 1;
char vert [10];
if(pSess->m_pHead!=NULL){
SessionCmdItem_t*ptmp = pSess->m_pHead ;
CmdSyncHdr_s* pSyncHdr = NULL;
while(ptmp!=NULL){
if(ptmp->ItemType==SML_PE_HEADER){
pSyncHdr = (CmdSyncHdr_s*) ptmp->CmdItem;
pSess->HandleStartMessage(id,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_ALERT){
CmdAlert_s* pAlert = (CmdAlert_s*) ptmp->CmdItem;
pSess->HandleAlert(id,pAlert,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_PUT){
CmdPut_s* pPut = (CmdPut_s*) ptmp->CmdItem;
pSess->HandlePut(id,pPut,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_GET){
CmdGet_s* pGet = (CmdGet_s*) ptmp->CmdItem;
pSess->HandleGet(id,pGet,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_SYNC_START){
XPTDEBUG(("SML_PE_SYNC_START SET Sync_ClientSyncStart\n"));
CmdSync_s* pSync = (CmdSync_s*) ptmp->CmdItem;
pSess->HandleSyncStart(id,pSync,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_ADD){
CmdAdd_s* pAdd = (CmdAdd_s*) ptmp->CmdItem;
pSess->HandleAdd(id,pAdd,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_REPLACE){
CmdReplace_s* pReplace = (CmdReplace_s*) ptmp->CmdItem;
pSess->HandleReplace(id,pReplace,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_MAP){
CmdMap_s* pMap = (CmdMap_s*) ptmp->CmdItem;
pSess->HandleMap(id,pMap,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_STATUS){
CmdStatus_s* pStatus = (CmdStatus_s*) ptmp->CmdItem;
pSess->HandleStatus(id,pStatus,pSyncHdr);
}
if(ptmp->ItemType==SML_PE_FINAL){
Boolean_t*pfinal =(Boolean_t*)ptmp;
pSess->HandleFinal(id,pfinal,pSyncHdr);
}
ptmp = ptmp->next;
}
if(pSess->m_nClientSend222){
if(pSess->m_eClientState==Sync_ClientSyncOK){
SmlSync_t sync;
SmlSource_t source;
SmlTarget_t target;
smlLibMemset(&sync,0,(MemSize_t)sizeof(SmlSync_t));
smlLibMemset(&source,0,(MemSize_t)sizeof(SmlSource_t));
smlLibMemset(&target,0,(MemSize_t)sizeof(SmlTarget_t));
sync.elementType = SML_PE_SYNC_START;
sprintf(vert , "%d",pSess->m_nCmdID++);
sync.cmdID = smlString2Pcdata(vert);
target.locURI = smlString2Pcdata(pSess->m_sSourceLocURI);
sync.target = ⌖
source.locURI = smlString2Pcdata(pSess->m_sTargetLocURI);
sync.source = &source;
if(pSess->m_eServerState==Sync_NoSync)
{
XPTDEBUG(("set Sync_ServerStart\n"));
pSess->m_eServerState=Sync_ServerStart;
pSess->m_nServerNoc=_database_get_numberofchange(pSess);
}
int noc = pSess->m_nServerNoc;
sprintf(vert , "%d",noc);
sync.noc = smlString2Pcdata(vert);
smlStartSync( id, &sync);
//查找服务端更新内容
int rem = myGetReplace( id,pSess);
XPTDEBUG(("myGetReplace=%d\n",rem));
if(!rem)
{
rem = myGetAdd( id,pSess);
XPTDEBUG(("myGetAdd=%d\n",rem));
}
smlEndSync(id);
}
}
}
if(pSess->m_eClientState==Sync_NoSync)//不是同步消息
smlEndMessage(id, SmlFinal_f);
else if(pSess->m_eClientState==Sync_ClientSyncOK&&pSess->m_eServerState==Sync_ServerSyncOK)//上传和下传同步结束
smlEndMessage(id, SmlFinal_f);
else
smlEndMessage(id, 0);
//////////////////////////////////////////////////
//读出数据并且转换xml
smlUnlockReadBuffer(id, pkgbytesReceived);
smlLockReadBuffer(id, &readBuffer, &bytesRead);
wbxml = readBuffer;
wbxml_len = bytesRead;
params.lang = WBXML_LANG_UNKNOWN;
params.gen_type = WBXML_GEN_XML_INDENT;
params.indent = 1;
params.keep_ignorable_ws = FALSE;
ret = wbxml_conv_wbxml2xml_withlen(wbxml, wbxml_len, &xml, &xml_len, ¶ms);
if (ret != WBXML_OK) {
XPTDEBUG(("wbxml2xml failed: %s\n", wbxml_errors_string(ret)));
}
else {
XPTDEBUG(("wbxml2xml succeded\n"));
XPTDEBUG(("Sended Data = '%s'\n", xml));
wbxml_free(xml);
}
smlUnlockReadBuffer(id, bytesRead);
//发送数据
XptCommunicationInfo_t docInfo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -