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

📄 pimserver.cpp

📁 pimserver是syncml_vc开发包的服务器实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// pimserver.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "pimserver.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/* Include header files required in any SyncML session */
#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 "..\\inc\\tml\\define.h"


#include "..\\inc\\tml\\tml.h"
#include "..\\inc\\tml\\tmldef.h"
#include "..\\inc\\tml\\tmldtd.h"
#include "vcard.h"

#include "mydb.h"
#include "builder_wrapper.h"
#include "wbxml2xml.h"
#include "sessionmgr.h"
#include "tmlsessmgr.h"
#include "mydb.h"

#include "b64.h"
#include "ccharcode.h"
CWinApp theApp;
CMydb workdb;
using namespace std;
CSessionMgr smgr;
CTmlSessMgr tmgr;
FILE*stream;
char* _get_nowtime();
int base64decode(char *src, int src_len, char *dst);
/**
 * Receive the SyncML document from the transport layer
 *
 * @param id instance ID
 * @param serviceID transport service ID
 * @see xptReceiveData
 */
int myGetReplace(InstanceID_t id,CSyncSession*pSess);
int myGetAdd(InstanceID_t id,CSyncSession*pSess);

int _get_new_anchor(char*_buf)
{	
	SYSTEMTIME		_systemTime;
	char			_datebuf[256];
	int				 _datebufSize = 256;
	char			_msbuf[5];
	int				_length = 0;
	struct { int tv_sec; int tv_usec; } _tv = {0,0};

	time((time_t *)(&_tv.tv_sec));
	GetLocalTime(&_systemTime);
	_tv.tv_usec = _systemTime.wMilliseconds * 1000; 
	const time_t _timeInSeconds = (time_t) _tv.tv_sec;
    strftime (_datebuf,_datebufSize,"%Y%m%d%H%M%S",localtime (&_timeInSeconds));
	sprintf(_msbuf, "%3.3ld", long(_tv.tv_usec / 1000));
	strcat(_datebuf,_msbuf);
	_length = strlen(_datebuf);
	if(IsBadWritePtr(_buf,_length)){
		return 0;
	}
	else{
		strcpy(_buf,_datebuf);
		return 1;
	}
}
	
int _get_new_locuri(char*_buf)
{	
	SYSTEMTIME		_systemTime;
	char			_datebuf[256];
	int				 _datebufSize = 256;
	char			_msbuf[5];
	int				_length = 0;
	struct { int tv_sec; int tv_usec; } _tv = {0,0};

	time((time_t *)(&_tv.tv_sec));
	GetLocalTime(&_systemTime);
	_tv.tv_usec = _systemTime.wMilliseconds * 1000; 
	const time_t _timeInSeconds = (time_t) _tv.tv_sec;
    strftime (_datebuf,_datebufSize,"%Y%m%d%H%M%S",localtime (&_timeInSeconds));
	sprintf(_msbuf, "%3.3ld", long(_tv.tv_usec / 1000));
	strcat(_datebuf,_msbuf);
	_length = strlen(_datebuf);
	if(IsBadWritePtr(_buf,_length)){
		return 0;
	}
	else{
		strcpy(_buf,_datebuf);
		return 1;
	}
}


int _get_filelength(char*_filepath)
{	
	XPTDEBUG(("_get_filelength=%s\n",_filepath));
	if(_filepath==NULL)
		return 0;

	FILE*_fp = fopen(_filepath,"rb");
	if(_fp==NULL)
		return 0;
	fseek (_fp , 0 , SEEK_END );
	int _length = ftell(_fp);
	XPTDEBUG(("_get_filelength='%d'\n",_length));
	fclose(_fp);
	return _length;
}

char *_database_get_clientanchor(char *_userid)
{
	char		_sql[1024];
	CMySet		_set;

	sprintf(_sql,"select clientanchor from pim_user where userid='%s'",_userid);
	XPTDEBUG(("SQL='%s'\n",_sql));
	if(workdb.PrepareSql(_sql, _set)==FALSE){
		  XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
	}
	else{
		if(workdb.FetchData()){
				char * _anchor =  _set.GetFieldValue(0);
				XPTDEBUG(("SQL=%s anchor=%s\n",_sql,_anchor));
				return _anchor;
		}
	}
	return NULL;
}
char *_database_get_serveranchor(char *_userid)
{
	char		_sql [1024];
	CMySet		_set;
	sprintf(_sql,"select serveranchor from pim_user where userid='%s'",_userid);
	XPTDEBUG(("SQL='%s'\n",_sql));
	if(workdb.PrepareSql(_sql, _set)==FALSE){
		  XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
	}
	else{
		if(workdb.FetchData()){
				char * _anchor =  _set.GetFieldValue(0);
				XPTDEBUG(("SQL='%s' serveranchor='%s'\n",_sql,_anchor));
				return _anchor;
		}
	}
	return NULL;
}
char *_database_get_filepath(char *_locuri,char*_userid)
{
	char		_sql [1024];
	CMySet		_set;
	int			_count=0;
	char*		_filepath;
	sprintf(_sql,"select count(*) from pim_resource where userid='%s' and locuri='%s'",_userid,_userid);
	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)
	{
		sprintf(_sql,"select filepath from pim_resource where userid='%s' and locuri='%s'",_userid,_userid);
		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);
					XPTDEBUG(("SQL='%s' filepath='%s'\n",_sql,_filepath));
					return _filepath;
			}
		}
	}
	return NULL;
}
int _database_get_numberofchange(CSyncSession*_pSess)
{
	char	_sql[1024];
	CMySet	_set;
	if(_pSess->m_nSyncType==201){
			sprintf(_sql,"update  pim_contact set flag = 3 where userid='%s' and flag = 0 ",_pSess->m_sUser);
			XPTDEBUG(("SQL='%s'\n",_sql));
			if(!workdb.ExeSqlDirect(_sql)){
				XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
			}
	}
	if(_pSess->m_nSyncType==200){
		sprintf(_sql,"select count(*) from pim_contact where userid='%s' and flag!=0 ",_pSess->m_sUser);
	}
	else if(_pSess->m_nSyncType==201) {
		sprintf(_sql,"select count(*) from pim_contact where userid='%s' ",_pSess->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()){
			char _noc[100];
			strcpy(_noc , _set.GetFieldValue(0));
			XPTDEBUG(("SQL='%s' noc='%s'\n",_sql,_noc));
			return atoi(_noc);
		}
	}
	return 0;
}

int _database_get_txlnumberofdownload(CTmlSession*_pSess)
{
	char	_sql[1024];
	CMySet	_set;
	if(_pSess->m_nTxlFlag==1)
	{
		sprintf(_sql,"select count(*) from pim_contact where userid='%s' ",_pSess->m_sUser);
	}
	else
	{
		sprintf(_sql,"select count(*) from pim_contact where userid='%s' and syncid!='%s' ",_pSess->m_sUser,_pSess->m_sSyncID);
	}

	XPTDEBUG(("SQL='%s'\n",_sql));
	if(workdb.PrepareSql(_sql, _set)==FALSE){
		  XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
	}
	else{
		if(workdb.FetchData()){
			char _noc[100];
			strcpy(_noc , _set.GetFieldValue(0));
			XPTDEBUG(("SQL='%s' noc='%s'\n",_sql,_noc));
			return atoi(_noc);
		}
	}
	return 0;
}

int _database_get_txlnumber(CTmlSession*_pSess)
{
	char	_sql[1024];
	CMySet	_set;
	sprintf(_sql,"select count(*) from pim_contact where userid='%s' ",_pSess->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()){
			char _noc[100];
			strcpy(_noc , _set.GetFieldValue(0));
			XPTDEBUG(("SQL='%s' noc='%s'\n",_sql,_noc));
			return atoi(_noc);
		}
	}
	return 0;
}
int _database_get_contactflag(CTmlSession*_pSess,TmlCmdContact_s*pCont)
{
	char	_sql[1024];
	CMySet	_set;
	int c = 0;
	sprintf(_sql,"select count(*) from pim_contact where  userid='%s' and cmobile ='%s' and locuri='%s' ",_pSess->m_sUser,pCont->cmobile,pCont->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()){
			char _noc[100];
			strcpy(_noc , _set.GetFieldValue(0));
			XPTDEBUG(("SQL='%s' count='%s'\n",_sql,_noc));
			c =  atoi(_noc);
			
		}
	}
	if(c==0)
		return -1;
	sprintf(_sql,"select flag from pim_contact where  userid='%s' and cmobile ='%s' and locuri='%s' ",_pSess->m_sUser,pCont->cmobile,pCont->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()){
			char _noc[100];
			strcpy(_noc , _set.GetFieldValue(0));
			XPTDEBUG(("SQL='%s' flag='%s'\n",_sql,_noc));
			return atoi(_noc);
		}
	}
	return -1;
}

int _database_get_nextcontact(CTmlSession*_pSess,TmlCmdContact_s*pCont,int item)
{
	char	_sql[1024];
	CMySet	_set;
	int c = 0;

	sprintf(_sql,"select locuri,cmobile,cname,flag from pim_contact where  userid='%s' order by id desc  ",_pSess->m_sUser);
	XPTDEBUG(("SQL='%s'\n",_sql));
	if(workdb.PrepareSql(_sql, _set)==FALSE){
		  XPTDEBUG(("SQL='%s' error='%s'\n",_sql,workdb.GetSqlError()));
	}
	else{
		int i = 0;
		while(workdb.FetchData()){
			if(i++==item)
			{
				char _noc[100];
				strcpy(pCont->locuri ,	_set.GetFieldValue(0));
				strcpy(pCont->cmobile,	_set.GetFieldValue(1));	
				strcpy(pCont->cname,	_set.GetFieldValue(2));
				strcpy(pCont->op,		_set.GetFieldValue(3));
			
				return 1;
			}
		}
	}
	return -1;
}
int	_get_usedsize(InstanceID_t id)
{
	MemPtr_t            _writeBuffer;       // current Position from to which to write
	MemSize_t           _usedSize;     
	smlLockReadBuffer(id, &_writeBuffer, &_usedSize);
	smlUnlockWriteBuffer(id, (MemSize_t)0);  
	return _usedSize;
}

int	_get_remainbytes(InstanceID_t id,CSyncSession*pSess)
{
	int _usedsize = _get_usedsize(id);
	XPTDEBUG(("_get_remainbytes : maxsize %d usedsize %d\n", pSess->m_nMaxMsgSize,_usedsize));
	if(pSess->m_nMaxMsgSize-_usedsize>500){	
		return 1;
	}
	else{
		return 0;
	}
}

SmlProtoElement_t _get_status_datatype(CmdStatus_s*pStatus)
{
    if(strcmp(pStatus->cmd,"Add")==0){
		return SML_PE_ADD;
	}
	if(strcmp(pStatus->cmd,"Replace")==0){
		return SML_PE_REPLACE;
	}
	return SML_PE_UNDEF;
}


int _search_locuri_pimupfile(CTmlSession*pSess,char*curLocuri)
{
	char	_sql[1024];
	int		_count = 0;
	CMySet	_set;

	sprintf(_sql,"select count(*) from pim_upfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,curLocuri);
	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 revok from pim_upfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,curLocuri);
	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' revok=%d\n",_sql,_count));
		}
	}
	if(_count==0){
		return 1;
	}
	else{
		return 2;
	}
}


int _search_locuri_pimmagicmmsfile(CTmlSession*pSess,char*curLocuri)
{
	char	_sql[1024];
	int		_count = 0;
	CMySet	_set;

	sprintf(_sql,"select count(*) from pim_magicmmsdownfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,curLocuri);
	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 sendok from pim_magicmmsdownfile where pimsession='%s' and locuri='%s'",pSess->m_sSessID,curLocuri);
	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' revok=%d\n",_sql,_count));
		}
	}
	if(_count==0){
		return 1;
	}
	else{
		return 2;
	}
}

int _load_pimresource(CTmlSession*pSess,char*locuri)
{
	char	_sql[1024];
	int		_count=0;
	CMySet	_set;
	char *	_filepath=NULL;
	char *  _locuri=NULL;
	char *  _rtype =NULL;
	char *  _rname=NULL;
	char *  _path =NULL;
	int		_length;

	sprintf(_sql,"select count(*) from pim_resource where userid='%s' and locuri='%s'",pSess->m_sUser,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 rtype,rname,path  from pim_resource where userid='%s' and locuri='%s'",pSess->m_sUser,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()){
				_rtype = _set.GetFieldValue(0);
				_length = tmlLibStrlen(_rtype);
				pSess->m_sRType=(String_t)tmlLibMalloc(_length);
				tmlLibMemset(pSess->m_sRType,0,_length);
				tmlLibStrcpy(pSess->m_sRType,_rtype);

⌨️ 快捷键说明

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