⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pimserver.cpp

📁 pimserver是syncml_vc开发包的服务器实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				
				_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, &params);

	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 = &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, &params);
	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 + -