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

📄 syncsession.cpp

📁 pimserver是syncml_vc开发包的服务器实例
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// SyncSession.cpp: implementation of the CSyncSession class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "pimserver.h"
#include "SyncSession.h"
#include "..\\inc\\define.h"
#include "..\\inc\\syncml_tk_prefix_file.h"
#include "..\\inc\\xpttransport.h"
#include "..\\inc\\sml.h"
#include "..\\inc\\smldef.h"
#include "..\\inc\\smldtd.h"
#include "..\\inc\\wbxml.h"
#include "..\\inc\\xpt.h"
#include "..\\inc\\smlmetinfdtd.h"
#include "..\\inc\\smldevinfdtd.h"
#include "mydb.h"
#include "vcard.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
char *_database_get_serveranchor(char *_userid);
char *_database_get_clientanchor(char *_userid);
SmlProtoElement_t _get_status_datatype(CmdStatus_s*pStatus);
int _get_new_anchor(char*_buf);
extern CMydb workdb;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSyncSession::CSyncSession()
{
	m_pHead = NULL;
	m_pEnd = NULL;
	m_eCredState = Cred_NoOffer;//未验证
	m_eClientState = Sync_NoSync;
	m_eServerState = Sync_NoSync;
	//m_nSyncFinish = 0;
	m_sTargetLocURI = NULL;
	m_sSourceLocURI = NULL;
	m_nSyncType = 0;
	m_nAddID = 0;
	m_nServerNoc = 0;
	m_nMaxMsgSize = 2000;
	m_nClientSend222 = 0;
}

CSyncSession::~CSyncSession()
{

}
void CSyncSession::HandleGet(InstanceID_t id,	CmdGet_s* pGet,CmdSyncHdr_s* pSyncHdr)
{
		char vert[10];
		SmlStatus_t status;
		smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
		status.elementType = SML_PE_STATUS;
		sprintf(vert , "%d",m_nCmdID++);
		status.cmdID			= smlString2Pcdata(vert);
		status.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		status.cmdRef			= smlString2Pcdata(pGet->cmdID);
		status.cmd				= smlString2Pcdata("Get");	
		
		if(pGet->itemList!=NULL&&pGet->itemList->item!=NULL&&pGet->itemList->item->target_locURI!=NULL)
		{
			SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
			smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
			status.targetRefList = pTarget;
			pTarget->targetRef =  smlString2Pcdata(pGet->itemList->item->target_locURI);
		}
		if(pGet->itemList!=NULL&&pGet->itemList->item!=NULL&&pGet->itemList->item->source_locURI!=NULL)
		{
			SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
			smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
			status.sourceRefList = pSource;
			pSource->sourceRef =  smlString2Pcdata(pGet->itemList->item->source_locURI);
		}

		status.data = smlString2Pcdata("200");
		smlStatusCmd( id,  &status);


		SmlResults_t result;
		smlLibMemset(&result,0,(MemSize_t)sizeof(SmlResults_t));

		result.elementType = SML_PE_RESULTS;
		sprintf(vert , "%d",m_nCmdID++);
	
		result.cmdID			= smlString2Pcdata(vert);
		result.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		result.cmdRef			= smlString2Pcdata(pGet->cmdID);
		
		result.meta				= (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t));
		smlLibMemset(result.meta, 0, sizeof(SmlPcdata_t));
		result.meta->contentType=SML_PCDATA_EXTENSION;
		result.meta->extension=SML_EXT_METINF;

		result.meta->content =   (SmlMetInfMetInfPtr_t)smlLibMalloc(sizeof(SmlMetInfMetInf_t));
		smlLibMemset(result.meta->content, 0, sizeof(SmlMetInfMetInf_t));
		SmlMetInfMetInfPtr_t pMeta = (SmlMetInfMetInfPtr_t)(result.meta->content);
		pMeta->type  = smlString2Pcdata("application/vnd.syncml-devinf+wbxml");
		SmlItemListPtr_t pItemList = (SmlItemListPtr_t)smlLibMalloc(sizeof(SmlItemList_t));
		smlLibMemset(pItemList, 0, sizeof(SmlItemList_t));

		result.itemList = pItemList;
		SmlItemPtr_t pItem = (SmlItemPtr_t)smlLibMalloc(sizeof(SmlItem_t));
		smlLibMemset(pItem, 0, sizeof(SmlItem_t));
		pItemList->item = pItem;


		pItem->source = (SmlSourcePtr_t)smlLibMalloc(sizeof(SmlSource_t));
		pItem->source->locURI = smlString2Pcdata("./devinf11");
		pItem->source->locName=NULL;

	
		
		pItem->data				= (SmlPcdataPtr_t)smlLibMalloc(sizeof(SmlPcdata_t));
		smlLibMemset(pItem->data, 0, sizeof(SmlPcdata_t));
		pItem->data->contentType=SML_PCDATA_EXTENSION;
		pItem->data->extension=SML_EXT_DEVINF;

		pItem->data->content =   (SmlDevInfDevInfPtr_t)smlLibMalloc(sizeof(SmlDevInfDevInf_t));
		//smlLibMemset(pItem->data, 0, sizeof(SmlPcdata_t));
		smlLibMemset(pItem->data->content, 0, sizeof(SmlDevInfDevInf_t));
		SmlDevInfDevInfPtr_t pDev = (SmlDevInfDevInfPtr_t)(pItem->data->content);

		pDev->verdtd = smlString2Pcdata("1.1");
		pDev->man = smlString2Pcdata("Trasin");
		pDev->mod = smlString2Pcdata("PIM SERVER");
		pDev->swv = smlString2Pcdata("1.0");
		pDev->devid = smlString2Pcdata("TRASIN PIM SERVER");
		pDev->devtyp= smlString2Pcdata("SERVER");
		pDev->oem = smlString2Pcdata("-");
		pDev->fwv = smlString2Pcdata("-");
		pDev->hwv = smlString2Pcdata("-");
	//	pDev->utc = smlString2Pcdata("");
		pDev->datastore = (SmlDevInfDatastoreListPtr_t)smlLibMalloc(sizeof(SmlDevInfDatastoreList_t));
		smlLibMemset(pDev->datastore, 0, sizeof(SmlDevInfDatastoreList_t));

		pDev->datastore->data = (SmlDevInfDatastorePtr_t)smlLibMalloc(sizeof(SmlDevInfDatastore_t));
		smlLibMemset(pDev->datastore->data, 0, sizeof(SmlDevInfDatastore_t));
		pDev->datastore->data->sourceref = smlString2Pcdata("content");
		pDev->datastore->data->displayname = smlString2Pcdata("content");
		pDev->datastore->data->maxguidsize = smlString2Pcdata("32");
	
		pDev->datastore->data->rxpref =   (SmlDevInfXmitPtr_t)smlLibMalloc(sizeof(SmlDevInfXmit_t));
		pDev->datastore->data->txpref =   (SmlDevInfXmitPtr_t)smlLibMalloc(sizeof(SmlDevInfXmit_t));
		pDev->datastore->data->rxpref->cttype = smlString2Pcdata("text/x-vcard");
		pDev->datastore->data->txpref->cttype = smlString2Pcdata("text/x-vcard");
		pDev->datastore->data->rxpref->verct = smlString2Pcdata("2.1");
		pDev->datastore->data->txpref->verct = smlString2Pcdata("2.1");

		pDev->datastore->data->synccap = (SmlDevInfSyncCapPtr_t)smlLibMalloc(sizeof(SmlDevInfSyncCap_t));
		pDev->datastore->data->synccap->synctype = (SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->data=smlString2Pcdata("1");
		pDev->datastore->data->synccap->synctype->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->data=smlString2Pcdata("2");
		pDev->datastore->data->synccap->synctype->next->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->next->data=smlString2Pcdata("3");
		pDev->datastore->data->synccap->synctype->next->next->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->next->next->data=smlString2Pcdata("4");
		pDev->datastore->data->synccap->synctype->next->next->next->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->next->next->next->data=smlString2Pcdata("5");
		pDev->datastore->data->synccap->synctype->next->next->next->next->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->next->next->next->next->data=smlString2Pcdata("6");
		pDev->datastore->data->synccap->synctype->next->next->next->next->next->next=(SmlPcdataListPtr_t)smlLibMalloc(sizeof(SmlPcdataList_t));
		pDev->datastore->data->synccap->synctype->next->next->next->next->next->next->data=smlString2Pcdata("7");
		pDev->datastore->data->synccap->synctype->next->next->next->next->next->next->next=NULL;

		//SmlDevInfDatastorePtr_t
		smlResultsCmd( id,  &result);
}
void CSyncSession::HandlePut(InstanceID_t id,	CmdPut_s* pPut,CmdSyncHdr_s* pSyncHdr)
{
		SmlStatus_t status;
		char vert[10];
		smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
		status.elementType = SML_PE_STATUS;
		sprintf(vert , "%d",m_nCmdID++);
		status.cmdID			= smlString2Pcdata(vert);
		status.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		status.cmdRef			= smlString2Pcdata(pPut->cmdID);
		status.cmd				= smlString2Pcdata("Put");	   
		if(pPut->itemList!=NULL&&pPut->itemList->item!=NULL&&pPut->itemList->item->target_locURI!=NULL)
		{
			SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
			smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
			status.targetRefList = pTarget;
			pTarget->targetRef =  smlString2Pcdata(pPut->itemList->item->target_locURI);
		}
		if(pPut->itemList!=NULL&&pPut->itemList->item!=NULL&&pPut->itemList->item->source_locURI!=NULL)
		{
			SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
			smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
			status.sourceRefList = pSource;
			pSource->sourceRef =  smlString2Pcdata(pPut->itemList->item->source_locURI);
		}
		status.data = smlString2Pcdata("200");
	
		smlStatusCmd( id,  &status);
		
}
void CSyncSession::HandleSyncStart(InstanceID_t id,	CmdSync_s* pSync,CmdSyncHdr_s* pSyncHdr)
{
		char vert[10];
		SmlStatus_t status;
		m_eClientState = Sync_ClientSyncStart;
		smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
		status.elementType = SML_PE_STATUS;
		sprintf(vert , "%d",m_nCmdID++);
		status.cmdID			= smlString2Pcdata(vert);
		status.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		status.cmdRef			= smlString2Pcdata(pSync->cmdID);
		status.cmd				= smlString2Pcdata("Sync");	   
		if(pSync->target_locURI!=NULL)
		{
			SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
			smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
			status.targetRefList = pTarget;
			pTarget->targetRef =  smlString2Pcdata(pSync->target_locURI);
		}
		if(pSync->source_locURI!=NULL)
		{
			SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
			smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
			status.sourceRefList = pSource;
			pSource->sourceRef =  smlString2Pcdata(pSync->source_locURI);
		}
		status.data = smlString2Pcdata("200");
		smlStatusCmd( id,  &status);
		
}
void CSyncSession::HandleReplace(InstanceID_t id,CmdReplace_s* pReplace,CmdSyncHdr_s*pSyncHdr)
{
		char vert[10];
		CVcard card;
		card.Parse((char*)pReplace->itemList->item->data,smlLibStrlen((char*)(pReplace->itemList->item->data)));
		card.CheckCards();
		VItem*item = card.GetItem(N);
		
		char *tmp = "";
		char *data =tmp; 
		char * name = tmp;
		char * locuri = tmp;
		char * rev = tmp;
		char * tell = tmp;
		if(item!=NULL)
		{
			 if(item->data!=NULL)
			 {
				 name = item->data;
			 }
		}
		item = card.GetItem(TEL);
		if(item!=NULL)
		{
			 if(item->data!=NULL)
			 {
				 tell = item->data;
			 }
		}
		if(pReplace->itemList->item->source_locURI!=NULL)
			 locuri = pReplace->itemList->item->source_locURI;
		if(pReplace->itemList->item->data!=NULL)
			data= (char*)pReplace->itemList->item->data;
		char sql [10240];
		sprintf(sql,"select count(*) from pim_contact where userid='%s' and locuri='%s'",m_sUser,locuri);
		CMySet set;
		if(workdb.PrepareSql(sql, set)==FALSE)
		{
			  XPTDEBUG(("sql=%s error=%s\n",sql,workdb.GetSqlError()));
		}
		else
		{
				if(workdb.FetchData())
				{
					int nCnt = atoi(set.GetFieldValue(0));
					XPTDEBUG(("sql=%s Count=%d\n",sql,nCnt));
					if(nCnt==0)
					{
						sprintf(sql,"insert into pim_contact(userid,locuri,contact_cell,contact_name,data) values('%s' , '%s','%s','%s','%s')",m_sUser,locuri,tell,name,data);
						XPTDEBUG(("sql=%s\n",sql));
						if(!workdb.ExeSqlDirect(sql))
						{
							char log[1024];
							sprintf(log,"Error : %s ",sql);	
						}
					}
					else
					{
						
					}
				}
		}
		card.Free();
		SmlStatus_t status;

		smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
		status.elementType = SML_PE_STATUS;
		sprintf(vert , "%d",m_nCmdID++);
		status.cmdID			= smlString2Pcdata(vert);
		status.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		status.cmdRef			= smlString2Pcdata(pReplace->cmdID);
		status.cmd				= smlString2Pcdata("Replace");	   
		if(pReplace->itemList!=NULL&&pReplace->itemList->item!=NULL&&pReplace->itemList->item->target_locURI!=NULL)
		{
			SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
			smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
			status.targetRefList = pTarget;
			pTarget->targetRef =  smlString2Pcdata(pReplace->itemList->item->target_locURI);
		}
		if(pReplace->itemList!=NULL&&pReplace->itemList->item!=NULL&&pReplace->itemList->item->source_locURI!=NULL)
		{
			SmlSourceRefListPtr_t pSource = (SmlSourceRefListPtr_t)smlLibMalloc(sizeof(SmlSourceRefList_t));
			smlLibMemset(pSource, 0, sizeof(SmlSourceRefList_t));
			status.sourceRefList = pSource;
			pSource->sourceRef =  smlString2Pcdata(pReplace->itemList->item->source_locURI);
		}
		status.data = smlString2Pcdata("201");
		smlStatusCmd( id,  &status);
}


void CSyncSession::HandleMap(InstanceID_t id,CmdMap_s* pMap,CmdSyncHdr_s*pSyncHdr)
{
		char vert[10];
		SmlStatus_t status;
		smlLibMemset(&status,0,(MemSize_t)sizeof(SmlStatus_t));
		status.elementType = SML_PE_STATUS;
		sprintf(vert , "%d",m_nCmdID++);
		status.cmdID			= smlString2Pcdata(vert);
		status.msgRef			= smlString2Pcdata(pSyncHdr->msgID);
		status.cmdRef			= smlString2Pcdata(pMap->cmdID);
		status.cmd				= smlString2Pcdata("Map");	  
		
		SmlTargetRefListPtr_t pTarget = (SmlTargetRefListPtr_t)smlLibMalloc(sizeof(SmlTargetRefList_t));
		smlLibMemset(pTarget, 0, sizeof(SmlTargetRefList_t));
		status.targetRefList = pTarget;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -