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

📄 tmlsession.cpp

📁 pimserver是syncml_vc开发包的服务器实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    XptCommunicationInfo_t		_docInfo;
	
	strcpy(_smmsServer,"211.155.235.57:8080");
	sprintf(_sHost,"HOST=%s",_smmsServer);
	sprintf(_sdocName,"MagicMMS/MMSPortalService?action=%s&area=%s&message=%s&sno=%s&style=%s&type=%s",pRes->action,pRes->area,pRes->message,pRes->sno,pRes->style,pRes->type);
	XPTDEBUG(("HandleMagicmms(doc=%s)\n",_sdocName));

    C(xptSelectProtocol(id,_sHost, XPT_CLIENT, &serviceID));
    C(xptOpenCommunication(serviceID, XPT_REQUEST_SENDER, &_httpconn));
    C(xptBeginExchange(_httpconn));

    _docInfo.cbSize = sizeof(_docInfo);
    _docInfo.cbLength = 0;
    _docInfo.auth = NULL;
    _docInfo.hmacInfo = NULL;
    strcpy(_docInfo.mimeType, "application/vnd.syncml+xml");
    strcpy(_docInfo.docName, _sdocName);

    C(xptSetDocumentInfo(_httpconn, &_docInfo));
    C(xptSendData(_httpconn, "", 0, &bytesSent));
    C(xptSendComplete(_httpconn));
	C(xptGetDocumentInfo(_httpconn, &_docInfo));
  
   // char receiveBuf[10000 + 1] = "";
	while(true)
	{
		C(xptReceiveData(_httpconn, _swplName+pkgbyteReceived, 10000, &bytesReceived));
		pkgbyteReceived = pkgbyteReceived + bytesReceived;
		if(pkgbyteReceived>=_docInfo.cbLength){
			break;
		}
		if(bytesReceived<=0){
			break;	
		}
	}

	_swplName[pkgbyteReceived] = 0;

	XPTDEBUG(("Wpl = '%s'\n", _swplName));
	C(xptEndExchange(_httpconn));
    C(xptCloseCommunication(_httpconn));

	_nokHttp = strlen(_swplName);

	char readBuf[MAX_CLIENTBUFFER+1];
	size_t _length_buffer = MAX_CLIENTBUFFER;
	char b64Buf[MAX_B64BUFFER];
	if(_nokHttp>0)
	{
		char * szTMP = strstr(_swplName,_smmsServer);
		char  szURL[1024]="";
		char *pfx=NULL;
		if(szTMP!=NULL)
		{
			szTMP+=strlen(_smmsServer);
			if((pfx = strstr(szTMP,"show.wpl"))!=NULL)
			{
				strncpy(szURL,szTMP,pfx-szTMP);
				strcat(szURL,"1.gif");
			}	
		}
		C(xptSelectProtocol(id,_sHost, XPT_CLIENT, &serviceID));

		_httpconn = 0;
    
		C(xptOpenCommunication(serviceID, XPT_REQUEST_SENDER, &_httpconn));
		C(xptBeginExchange(_httpconn));
		_docInfo.cbSize = sizeof(_docInfo);
		_docInfo.cbLength = 0;
		_docInfo.auth = NULL;
		_docInfo.hmacInfo = NULL;
		strcpy(_docInfo.mimeType, "application/vnd.syncml+xml");
		strcpy(_docInfo.docName, szURL);
		C(xptSetDocumentInfo(_httpconn, &_docInfo));
		C(xptSendData(_httpconn, "", 0, &bytesSent));
		C(xptSendComplete(_httpconn));
		C(xptGetDocumentInfo(_httpconn, &_docInfo));
		bytesReceived	= 0;
		pkgbyteReceived = 0;

		char *revBuf = (char *)tmlLibMalloc((int)_docInfo.cbLength);
		while(true)
		{
			C(xptReceiveData(_httpconn, revBuf+pkgbyteReceived, (int)_docInfo.cbLength, &bytesReceived));
			pkgbyteReceived = pkgbyteReceived + bytesReceived;
			if(pkgbyteReceived>=_docInfo.cbLength){
				break;
			}
			if(bytesReceived<=0){
				break;	
			}
		}
		m_nFileLength = pkgbyteReceived;
		revBuf[pkgbyteReceived] = 0;

		char szFile[1024];
		sprintf(szFile,"%s.gif",_get_nowtime());
		m_fpFile = fopen(szFile,"ab");
		fwrite(revBuf,pkgbyteReceived,1,m_fpFile);
		fflush(m_fpFile);
		fclose(m_fpFile);
		m_nAll = pkgbyteReceived / MAX_CLIENTBUFFER+1;
		m_nItem = 1;
		int _length = tmlLibStrlen(szFile);
		m_sPath=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sPath,0,_length);
		tmlLibStrcpy(m_sPath,szFile);

		_length = tmlLibStrlen(pRes->message);
		m_sMessage=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sMessage,0,_length);
		tmlLibStrcpy(m_sMessage,pRes->message);

		_length = tmlLibStrlen(pRes->action);
		m_sAction=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sAction,0,_length);
		tmlLibStrcpy(m_sAction,pRes->action);

		_length = tmlLibStrlen(pRes->area);
		m_sArea=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sArea,0,_length);
		tmlLibStrcpy(m_sArea,pRes->area);

		_length = tmlLibStrlen(pRes->sno);
		m_sSno=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sSno,0,_length);
		tmlLibStrcpy(m_sSno,pRes->sno);
		
		_length = tmlLibStrlen(pRes->style);
		m_sStyle=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sStyle,0,_length);
		tmlLibStrcpy(m_sStyle,pRes->style);

		_length = tmlLibStrlen(pRes->type);
		m_sType=(String_t)tmlLibMalloc(_length);
		tmlLibMemset(m_sType,0,_length);
		tmlLibStrcpy(m_sType,pRes->type);

		if(m_sCurMagicLocURI==NULL||tmlLibStrlen(m_sCurMagicLocURI)==0)
		{
				char newlocuri[100]; 
				_get_new_anchor(newlocuri);
				_length = tmlLibStrlen(newlocuri);
				m_sCurMagicLocURI =(char*) tmlLibMalloc(_length);
				tmlLibStrcpy(m_sCurMagicLocURI,newlocuri);		
		}
		_insert_pimmagicmms(this);
		_insert_pimmagicmmsdownfile(this);
		unsigned int cbOffset = 0; // <<<<< ????
		char abSave [4];
		abSave [0] = abSave [1] = abSave [2] = abSave [3] = '\0';
		m_fpFile = fopen(szFile,"rb");
		if(m_nFileLength> MAX_CLIENTBUFFER)
		{
			m_nSendData = MAX_CLIENTBUFFER;
			fread(readBuf,MAX_CLIENTBUFFER,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;
		}
		else
		{
			m_nSendData = m_nFileLength;
			fread(readBuf,m_nFileLength,1,m_fpFile);
			fclose(m_fpFile);
			size_t t = base64Encode((BYTE*)b64Buf,MAX_B64BUFFER,(BYTE*)readBuf,&m_nFileLength,&cbOffset,1,(unsigned char *)abSave);
			b64Buf[t]=0;
		}
	}

	TmlMagicmmss_t _magicmmss;
	tmlLibMemset(&_magicmmss,0,(MemSize_t)sizeof(TmlMagicmmss_t));
	_magicmmss.elementType = TML_PE_MAGICMMSS_START;
	_magicmmss.count = tmlString2Pcdata("1");
	tmlMagicmmss(id,&_magicmmss);

	TmlMagicmms_t _magicmms;
	tmlLibMemset(&_magicmms,0,(MemSize_t)sizeof(TmlMagicmms_t));
	
	if(_nokHttp>0)
	{
		_magicmms.elementType = TML_PE_MAGICMMS;
		_magicmms.cmd = tmlString2Pcdata("send");
		_magicmms.cmdid = tmlString2Pcdata("1");
		_magicmms.action = tmlString2Pcdata(m_sAction);
		_magicmms.area = tmlString2Pcdata(m_sArea);
		_magicmms.sno = tmlString2Pcdata(m_sSno);
		_magicmms.type = tmlString2Pcdata(m_sType);
		_magicmms.message = tmlString2Pcdata(m_sMessage);
		_magicmms.style = tmlString2Pcdata(m_sStyle);
		_magicmms.data = tmlString2Pcdata("200");
		_magicmms.locuri = tmlString2Pcdata(m_sCurMagicLocURI);
		char vert[10];
		sprintf(vert , "%d",1);
		_magicmms.item = tmlString2Pcdata(vert);
		sprintf(vert , "%d",m_nAll);
		_magicmms.all = tmlString2Pcdata(vert);
		_magicmms.content = tmlString2Pcdata(b64Buf);
		tmlMagicmms(id,&_magicmms);
	}
	else
	{
		_magicmms.elementType = TML_PE_MAGICMMS;
		_magicmms.cmd = tmlString2Pcdata("send");
		_magicmms.cmdid = tmlString2Pcdata("1");
		_magicmms.action = tmlString2Pcdata(m_sAction);
		_magicmms.area = tmlString2Pcdata(m_sArea);
		_magicmms.sno = tmlString2Pcdata(m_sSno);
		_magicmms.type = tmlString2Pcdata(m_sType);
		_magicmms.message = tmlString2Pcdata(m_sMessage);
		_magicmms.style = tmlString2Pcdata(m_sStyle);
		_magicmms.data = tmlString2Pcdata("500");
		_magicmms.locuri = tmlString2Pcdata("");
		char vert[10];
		sprintf(vert , "%d",1);
		_magicmms.item = tmlString2Pcdata(vert);
		sprintf(vert , "%d",1);
		_magicmms.all = tmlString2Pcdata(vert);
		_magicmms.content = tmlString2Pcdata("");
		tmlMagicmms(id,&_magicmms);
	}
	
	tmlEndMagicmmss(id);

	if(m_nItem==m_nAll)
	{
		//只有一个包
		m_nSendOK =1;
		_update_pimmagicmmsdownfile(this);	
		m_nSendData = 0;
		m_sPath = NULL;
		m_sCurMagicLocURI=NULL;
		m_sMessage =NULL;
		m_sAction=NULL;
		m_sSno =NULL;
		m_sType =NULL;
	}
	else
	{
		_update_pimmagicmmsdownfile(this);
	}

    C(xptEndExchange(_httpconn));
    C(xptCloseCommunication(_httpconn));

}


void CTmlSession::HandleMStatus(InstanceID_t id,TmlCmdMStatus_s*pMStatus)
{
	XPTDEBUG(("HandleMStatus()\n"));
	int _return_code = 200;
	int _search_locuri_result = 0;
	int _data = atoi(pMStatus->data);
	int _nextitem = atoi(pMStatus->nextitem);
	if(m_sCurMagicLocURI ==NULL)
	{
		_return_code = 500;
	}
	else if(pMStatus->locuri==NULL||tmlLibStrlen(pMStatus->locuri)==0)
	{
		_return_code = 500;
	}
	else
	{
		int _cmp_locuri = tmlLibStrcmp(m_sCurMagicLocURI,pMStatus->locuri);
		if(_cmp_locuri!=0)
		{	
			_return_code = 500;
		}
	}

	if(_nextitem>m_nAll)
	{
		//已经传完
		_return_code = 500;
		m_nItem=1;
		m_nSendOK =1;
		m_nSendData = 0;
		m_sPath = NULL;
		m_sCurMagicLocURI=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(("HandleMStatus(_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(("HandleMStatus(_length_buffer2=%d)\n",_length_buffer));
		}
	}
	TmlMagicmmss_t _magicmmss;
	tmlLibMemset(&_magicmmss,0,(MemSize_t)sizeof(TmlMagicmmss_t));
	_magicmmss.elementType = TML_PE_MAGICMMSS_START;
	_magicmmss.count = tmlString2Pcdata("1");
	tmlMagicmmss(id,&_magicmmss);
	TmlMagicmms_t _magicmms;
	tmlLibMemset(&_magicmms,0,(MemSize_t)sizeof(TmlMagicmms_t));
		
	if(_return_code==200)
	{
			_magicmms.elementType = TML_PE_MAGICMMS;
			_magicmms.cmd = tmlString2Pcdata("send");
			_magicmms.cmdid = tmlString2Pcdata("1");
			_magicmms.action = tmlString2Pcdata(m_sAction);
			_magicmms.area = tmlString2Pcdata(m_sArea);
			_magicmms.sno = tmlString2Pcdata(m_sSno);
			_magicmms.type = tmlString2Pcdata(m_sType);
			_magicmms.message = tmlString2Pcdata(m_sMessage);
			_magicmms.style = tmlString2Pcdata(m_sStyle);
			_magicmms.data = tmlString2Pcdata("200");
			_magicmms.locuri = tmlString2Pcdata(m_sCurMagicLocURI);
			char vert[10];
			sprintf(vert , "%d",_nextitem);
			_magicmms.item = tmlString2Pcdata(vert);
			sprintf(vert , "%d",m_nAll);
			_magicmms.all = tmlString2Pcdata(vert);
			_magicmms.content = tmlString2Pcdata(b64Buf);

	}
	else
	{
			_magicmms.elementType = TML_PE_MAGICMMS;
			_magicmms.cmd = tmlString2Pcdata("send");
			_magicmms.cmdid = tmlString2Pcdata("1");
			_magicmms.action = tmlString2Pcdata("");
			_magicmms.area = tmlString2Pcdata("");
			_magicmms.sno = tmlString2Pcdata("");
			_magicmms.type = tmlString2Pcdata("");
			_magicmms.message = tmlString2Pcdata("");
			_magicmms.style = tmlString2Pcdata("");
			_magicmms.data = tmlString2Pcdata("500");
			_magicmms.locuri = tmlString2Pcdata("");
			char vert[10];
			sprintf(vert , "%d",_nextitem);
			_magicmms.item = tmlString2Pcdata(vert);
			sprintf(vert , "%d",m_nAll);
			_magicmms.all = tmlString2Pcdata(vert);
			_magicmms.content = tmlString2Pcdata("");
	}
	tmlMagicmms(id,&_magicmms);
	tmlEndMagicmmss(id);
	if(_nextitem==m_nAll)
	{
		//已经传完	
		m_nSendOK =1;
		m_nSendData = 0;
		_update_pimmagicmmsdownfile(this);
		m_sPath = NULL;
		m_sCurMagicLocURI=NULL;
	}
}

void CTmlSession::HandleRStatus(InstanceID_t id,TmlCmdRStatus_s*pRStatus)
{

	XPTDEBUG(("HandleRStatus()\n"));
	int _return_code = 200;
	int _search_locuri_result = 0;
	int _data = atoi(pRStatus->data);
	int _nextitem = atoi(pRStatus->nextitem);
	if(m_sCurLocURI ==NULL)
	{
		_return_code = 500;
	}
	else if(pRStatus->locuri==NULL||tmlLibStrlen(pRStatus->locuri)==0)
	{
		_return_code = 500;
	}
	else
	{
		int _cmp_locuri = tmlLibStrcmp(m_sCurLocURI,pRStatus->locuri);
		if(_cmp_locuri!=0)
		{	
			_return_code = 500;
		}
	}

	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::HandleCStatus(InstanceID_t id,TmlCmdCStatus_s*pCStatus)
{

	XPTDEBUG(("HandleCStatus()\n"));
	/*
	int _return_code = 200;
	int _search_locuri_result = 0;
	int _data = atoi(pCStatus->data);
	int _nextitem = atoi(pCStatus->nextitem);
	if(m_sCurLocURI ==NULL)
	{
		_return_code = 500;
	}
	else if(pCStatus->locuri==NULL||tmlLibStrlen(pCStatus->locuri)==0)
	{
		_return_code = 500;
	}
	else
	{
		int _cmp_locuri = tmlLibStrcmp(m_sCurLocURI,pRStatus->locuri);
		if(_cmp_locuri!=0)
		{	
			_return_code = 500;

⌨️ 快捷键说明

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