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

📄 tmlsession.cpp

📁 pimserver是syncml_vc开发包的服务器实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		}
	}

	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 + -