/* * Convert an array of 16-bit integers from HP's big-endian form to the * native byte order required by the host processor. */ static void convert_int16_array(int num_ints, const byte * pinbuff, int16 * poutbuff) { while (num_ints-- > 0) { *poutbuff++ = make_int16(pinbuff); pinbuff += 2; } }
int rau_app_analysis_data(SOCKET client,char *pbuf,int len) { int ret = -1; short cmd = 0,cmd_h=0xffff,cmd_l=0xffff, ver = 0; int cmd_index = 0; int datalen = 0; LClock_t EndClock; if(*pbuf!=0x02) { hclog("消息头错误\n"); ret = HEAD_ERROR; return ret; } pbuf++; ver = make_int16(pbuf); hclog("protocol version number:%d\n",(unsigned int)ver); pbuf+=2; cmd = make_int16(pbuf); hclog("command number:0x%02x\n",(unsigned int)cmd); cmd_h=cmd&0xff00; cmd_l=cmd&0x00ff; pbuf+=2; cmd_index = make_int32(pbuf); hclog("command index:%d\n",(unsigned int)cmd_index); pbuf+=4; datalen = make_int32(pbuf); hclog("datalen:%d\n",(unsigned int)datalen); pbuf+=4; ret = cmd_l; if((cmd_l == CMD_LOGIN) && (cmd_h ==CMD_RESPONSE) && (cmd_index==gclient_cmd_index))/*登陆成功*/ { hlog("login success\n"); client_get_member_list(client); } else if((cmd_l == CMD_GET_MEMBER_LIST) && (cmd_h ==CMD_RESPONSE) && (cmd_index==gclient_cmd_index))/*返回成员列表*/ { char com_rbuf[MAX_LOG_LEN]={0}; int rlen = 0; rt_memset(com_rbuf,0,MAX_LOG_LEN); hlog("return member\n"); client_save_member_list(pbuf,datalen); } else if((cmd_l == CMD_SEND_MESSAGE) && (cmd_h ==CMD_RESPONSE) /*&& (cmd_index==gclient_cmd_index)*/)/*消息发送成功*/ { hlog("send message success\n"); } else if((cmd_l == CMD_FORWARD_MESSAGE) && (cmd_h ==0)) { hlog("receive message\n"); EndClock=GetClock(); hlog("UsedClock:%lf\n",EndClock); //printf_buf(pbuf,datalen); client_recvice_message(pbuf,datalen); client_send_receive_success(client,pbuf,cmd_index); } else { hclog("unknow cmd number received:%d",(unsigned int)cmd); } return ret; }
int client_data_proc(char* data, int len, send_data_t* sptr) { int ret=0; int mlen=0; short cmd; int dlen,index,srcid,destid,dataLen; char from[MAX_NAME_LEN]={0}; char to[MAX_NAME_LEN]={0}; char rdata[128]={0}; char flag,dataType; char* p = data; if(data==NULL || len<=0) return ret; hlog("processRecvMsg()--len:%d\n",len); if(*p!=0x02) { hlog("processRecvMsg()--msg not begin with 0x02\n"); return ret; } p++; dlen = make_int32(p); p+=4; p+=2;//version cmd = make_int16(p);//ntohs((u_short)*p); p+=2; index = make_int32(p);//ntohl((u_int)*p); p+=4; flag = *p; p++; if(cmd == MSG_CMD_SEND_DATA) { srcid = make_int32(p); p+=4; destid = make_int32(p); p+=4; dataType = *p; p++; dataLen = make_int32(p); p+=4; if(DEVICE_ID == destid) { //send to comm port and wait response /* rcu_uart_write(p,dataLen); dlen=rcu_uart_read(rdata,128); if(dlen<128) { p = rdata; return getSendMsgData(srcid,rdata,dlen,sptr); }*/ sprintf(rdata,"got %s",p); dlen = strlen(rdata); return getSendMsgData(srcid,rdata,dlen,sptr); } } #if 0 p++; p+=2;//version cmd = make_int16(p);//ntohs((u_short)*p); p+=2; index = make_int32(p);//ntohl((u_int)*p); p+=4; dlen = make_int32(p);//ntohl((u_int)*p); p+=4; hlog("recv msg,cmd:%d,index:%d,dlen:%d\n",(int)cmd,index,dlen); if(cmd == 0x0004) { strcpy(from,p); // hlog("msg from:%s\n",from); p+=MAX_NAME_LEN; strcpy(to,p); // hlog("msg to:%s\n",to); p+=MAX_NAME_LEN; // hlog("msg content:%s\n",p); mlen = dlen-2*MAX_NAME_LEN; p[mlen]=0; #ifdef DEV_RAU rcu_uart_write("\nRECV:",6); rcu_uart_write(p,mlen); rcu_uart_write("\n",1); //ret = getAckMsgData(cmd,index,sptr); dlen=rcu_uart_read(rdata,128); if(dlen<128) { p = rdata; } else { dlen = mlen; } #endif ret = getForwardReply(index,from,to,p,dlen,sptr); } else if(cmd == 0x0104) { strcpy(from,p); // hlog("msg from:%s\n",from); p+=MAX_NAME_LEN; strcpy(to,p); // hlog("msg to:%s\n",to); p+=MAX_NAME_LEN; // hlog("msg content:%s",p); mlen = dlen-2*MAX_NAME_LEN; p[mlen]=0; //ret = getAckMsgData(cmd,index,sptr); ret = 0; } else if(cmd == 0x0103) { hlog("recv ack msg.....\n"); /* char tmp[MAX_NAME_LEN+1]={0}; TCHAR utmp[2*MAX_NAME_LEN+2]={0}; m_devlist.ResetContent(); int num = dlen/(MAX_NAME_LEN+1); hlog("get device list num:%d\n",num); // p+=4; for(int i=0;i<num;i++) { strcpy_s(tmp,p); #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, tmp, -1, utmp, 2*MAX_NAME_LEN); #else strcpy_s(buf, str); #endif m_devlist.AddString(utmp); if(i<(num-1)) p+=(MAX_NAME_LEN+1); } */ } #endif return ret; }