typedef int(HookRecvFinsh)(uint32_t, char , uint32_t);定义回调
typedef struct PushClientCore 结构体
{
int pushfd;
HookPushEvent pfHookPushEvent; //call back function. when udp push event occurs, this func will be called
HookRecvFinsh pfHookRecvFinsh; //call back function. when tcp recv finish, this func will be called
uint16_t curPushId; //current udp query id
uint16_t eventPushId; //the last push event udp packet id
struct sockaddr_in stLocalAddr; //the local addr
}
int setHookRecvFinishF(PushClientHandl pushhandl ,HookRecvFinsh fp)回调赋值
{
lockpushClient((stPushClientCore*)pushhandl);
((stPushClientCore*)pushhandl)->pfHookRecvFinsh = fp;
unlockpushClient((stPushClientCore*)pushhandl);
return 0;
}
if(isSetTcpGetFlag(&(stcorep->stUDPRecvPushHead)) == 0)
{
stcorep->pfHookPushEvent(stcorep->curPushId,
stcorep->pRecvUdpContent, stcorep->stUDPRecvPushHead.dateLen);
return HAIERLPCTCPGET;
}
else
{
stcorep->pfHookRecvFinsh(stcorep->curPushId,
stcorep->pRecvUdpContent, stcorep->stUDPRecvPushHead.dateLen);回调启用
if(stcorep->stUDPRecvPushHead.confirmId > 0)
{
stcorep->stUDPRecvPushHead.cmd = LPCUDPCONFIRM;
if(stcorep->stUDPRecvPushHead.entype == 1)
{
codeBufferSelf(stcorep->pRecvUdpContent,
stcorep->stUDPRecvPushHead.dateLen);
}
dealHtoNHead( &(stcorep->stUDPRecvPushHead));
struct iovec iov[2];
iov[0].iov_base = &(stcorep->stUDPRecvPushHead);
iov[0].iov_len = sizeof(stcorep->stUDPRecvPushHead);
iov[1].iov_base = stcorep->pCheckContent;
iov[1].iov_len = stcorep->u32ContentLen;
writev(stcorep->pushfd, stcorep->iov, 2);
}
return HAIERNOTTCPGET;
}