コード例 #1
0
ファイル: SVSEAPI.cpp プロジェクト: SiteView/eccmeteor
SVAPI_API
bool PutValueIntoChildren(const NodeData & ndata, string pid, string addr)
{
	if(pid.empty()||addr.empty())
		return false;
	if(pid.find(".")==std::string::npos)
		return false;
	if(ndata.empty())
		return false;

	NodeData & ndata1= const_cast< NodeData & >( ndata );
	unsigned int tlen= GetNodeDataRawDataSize(ndata1);
	svutil::buffer tbuf;
	if(!tbuf.checksize(tlen))
		return false;
	const char *data= GetNodeDataRawData(ndata1,tbuf,tlen); 
	if(data==NULL)
		return false;

	QueryData qd;
	char *pdata=NULL;
	S_UINT rlen=0;

	S_UINT len=0;

	SVDBQUERY querybuf={0};
	querybuf.len = sizeof(SVDBQUERY);
	querybuf.querytype=QUERY_PUT_VALUE;
	querybuf.datatype=S_SVSE;
	strcpy(querybuf.qstr,pid.c_str());

	INIQUERY iquery={0};
	iquery.len=sizeof(INIQUERY);
	iquery.datatype=D_STRING;
	iquery.datalen=tlen;

	len+=sizeof(INIQUERY);
	len+=tlen;

	querybuf.datalen=len;

	buffer buf;
	if(!buf.checksize(len))
		return false;
	char *pt=buf.getbuffer();
	memcpy(pt,&iquery,sizeof(INIQUERY));
	pt+=sizeof(INIQUERY);
	memmove(pt,data,tlen);

	if(qd.Query(&querybuf,buf,len,(void **)&pdata,rlen,addr))
	{
		if(pdata!=NULL && rlen>0)
		{
			int *pret=(int*)pdata;
			if(*pret==SVDB_OK)
			{
				delete [] pdata;
				return true;
			}
		}
	}
	if(pdata!=NULL)
		delete [] pdata;
	return false;
}