|
|
@ -2549,6 +2549,122 @@ int ProvHaveSoeData(int provport)
|
|
|
|
return SioParam[provport].m_psBaoHu->ProvSoeBuf.iSoeNum;
|
|
|
|
return SioParam[provport].m_psBaoHu->ProvSoeBuf.iSoeNum;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//插到最后一个结点之后
|
|
|
|
|
|
|
|
int AddNodeEx(int commid, char *buf, int len)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int iMallocSize;
|
|
|
|
|
|
|
|
struct WR_DATA *wdata;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// wen 2004.12.28 停止系统发送数据
|
|
|
|
|
|
|
|
//if (StopSend)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// return 0;
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// wen 2005.07.02 如果端口未打开,不进行缓冲
|
|
|
|
|
|
|
|
if (!ShmGetPortFlag(commid, FLAG_OPEN))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 增加缓冲区容量大小的限制(???)
|
|
|
|
|
|
|
|
if (SioParam[commid].iWriteDataNo > MAX_BUFUNIT_NUM)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (len <= 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// wen 2004.12.03
|
|
|
|
|
|
|
|
printf("TIP_: AddNode (commid = %d) buf is empty or invalid(len=%d)\n", commid, len);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*if (WatchPort == commid)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
FillUdpSetBuf(commid, SDS_SIO_SEND_DATA, buf, len);
|
|
|
|
|
|
|
|
SetUdpSend();
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iMallocSize = sizeof(struct WR_DATA) + len;
|
|
|
|
|
|
|
|
if (MIN_MALLOC_SIZE > iMallocSize)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
iMallocSize = MIN_MALLOC_SIZE;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!SioParam[commid].WriteData) //empty before insert
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
SioParam[commid].WriteData = (struct WR_DATA*)HEAP_MALLOC(iMallocSize);
|
|
|
|
|
|
|
|
if (!SioParam[commid].WriteData)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// wen 2004.12.03
|
|
|
|
|
|
|
|
printf("TIP_(): AddNode (commid = %d) memory malloc error1(len=%d, totallen=%d)\n",
|
|
|
|
|
|
|
|
commid, len, iMallocSize);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SioParam[commid].WriteData->Next = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memmove(SioParam[commid].WriteData->MsgData, buf, len);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SioParam[commid].WriteData->MsgLen = len;
|
|
|
|
|
|
|
|
SioParam[commid].WriteData->PLen = 0;
|
|
|
|
|
|
|
|
SioParam[commid].SendCharNum += len;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SioParam[commid].iWriteDataNo++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test
|
|
|
|
|
|
|
|
//if(commid == 16)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// printf("TIP_(%04d): AddNode(commid=%d, len=%d), No=%d, MallocSize=%d\n",
|
|
|
|
|
|
|
|
// getpid(), commid, len, SioParam[commid].iWriteDataNo, iMallocSize);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return len;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wdata = SioParam[commid].WriteData; //old link head
|
|
|
|
|
|
|
|
while (wdata->Next != NULL)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
wdata = wdata->Next;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wdata->Next = (struct WR_DATA*)HEAP_MALLOC(iMallocSize);
|
|
|
|
|
|
|
|
if (!wdata->Next)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// wen 2004.12.03
|
|
|
|
|
|
|
|
printf("TIP_(): AddNode (commid = %d) memory malloc error3(len=%d, totallen=%d)\n",
|
|
|
|
|
|
|
|
commid, len, iMallocSize);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wdata->Next->Next = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//memmove(wdata->Next->MsgData, buf, len);
|
|
|
|
|
|
|
|
memcpy(wdata->Next->MsgData, buf, len);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wdata->Next->MsgLen = len;
|
|
|
|
|
|
|
|
wdata->Next->PLen = 0;
|
|
|
|
|
|
|
|
SioParam[commid].SendCharNum += len;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SioParam[commid].iWriteDataNo++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// test
|
|
|
|
|
|
|
|
//if(commid >= 16)
|
|
|
|
|
|
|
|
//{
|
|
|
|
|
|
|
|
// printf("TIP_(%04d): AddNode(commid=%d, len=%d), No=%d, MallocSize=%d\n",
|
|
|
|
|
|
|
|
// getpid(), commid, len, SioParam[commid].iWriteDataNo, iMallocSize);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return len;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int AddNode(int commid, char *buf, int len)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// 修改内存分配策略
|
|
|
|
|
|
|
|
return AddNodeEx(commid, buf, len);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//********************************************************************
|
|
|
|
//********************************************************************
|
|
|
|
//* 发送数据函数 *
|
|
|
|
//* 发送数据函数 *
|
|
|
|
//*参数: int commid : 端口号 *
|
|
|
|
//*参数: int commid : 端口号 *
|
|
|
@ -2566,13 +2682,13 @@ void SendDataToPort(int commid, char *buf, int len)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef OS_LINUX
|
|
|
|
//#ifdef OS_LINUX
|
|
|
|
AddNode(commid, (char *)buf, len);
|
|
|
|
AddNode(commid, (char *)buf, len);
|
|
|
|
#else
|
|
|
|
//#else
|
|
|
|
// FillAndSendCmd(0, commid, SDS_SIO_SEND_DATA, (u_char*)buf, len);
|
|
|
|
// FillAndSendCmd(0, commid, SDS_SIO_SEND_DATA, (u_char*)buf, len);
|
|
|
|
// wen 2004.12.21 发送计数已经在发送时做了计算
|
|
|
|
// wen 2004.12.21 发送计数已经在发送时做了计算
|
|
|
|
SioParam[commid].SendCharNum += len;
|
|
|
|
// SioParam[commid].SendCharNum += len;
|
|
|
|
#endif
|
|
|
|
//#endif
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//********************************************************************
|
|
|
|
//********************************************************************
|
|
|
|