📄 tmlsession.cpp
字号:
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 + -