?? recv_message_fromcli.cxx.bak
字號:
#include <stdio.h>#include <unistd.h>#include "myptop.h"#include "sysmonitor.h"#include <dcepm.h>#include <dstruct.h>#include <oodb.h>#include <sys/select.h>#include <sys/time.h>#include <netdb.h>#include <stdlib.h>#include <iostream.h>#include <fcntl.h>#include <sys/types.h>#include <unistd.h>#include <errno.h>#include <arpa/inet.h>#include <sys/socket.h>#include <string.h>#include <strings.h>#include <signal.h>#include <semaphore.h>#define SA struct sockaddr#ifndef INADDR_NONE#define INADDR_NONE 0xffffffff;#endifextern sem_t *sem;extern struct NODEINFO nodeinfo_ptr;extern int node_num=0;int fill_dcepm_sysinfor(char *ptr,int len);int fill_dcepm_driverinfor(char *ptr,int len);int fill_dcepm_netinfor(char *ptr,int len);int fill_dcepm_pthreadinfor(char *ptr,int len);//int srv_accept(int fd,struct sockaddr *cli_addr,int *clilen,char* descr);int srv_init(char *service,int port,char* descr);int myreadn(int fd,char *ptr,int nbytes);void recv_message_fromcli(int socketfd){ int j,k,i; char descr[100]; int sockfd,length; struct sockaddr_in tcp_cli_addr; char ipaddress[30],buff[512]; int ret_value; char recv_buffer[1024],send_buffer[1024]; char *ptr; struct timeval wait; fd_set read_temp; int status; int sd,retcode; //printf("come in recv_message_fromcli ...socketfd=%d .......\n",socketfd); while(1==1) { //printf(" ......... recv_message_fromcli socketfd=%d ...........\n",socketfd); sockfd=socketfd; retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); continue; } ///////////////////////////////////////////////////////////////////////////read socket////////////// bzero(recv_buffer,1024); ptr=recv_buffer; ret_value=read(sockfd,ptr,1); if(ret_value<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",socketfd,ret_value); close(socketfd); break; } if((unsigned char)recv_buffer[0]==0xeb) //value of monipara from client { retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error second\n"); continue; } ret_value=read(sockfd,ptr,2); if(ret_value<=0) { printf("second recv sockfd = %d, ret_value is %d close SOCKET \n",socketfd,ret_value); close(socketfd); break; } //printf("recv_buffer[0]=%d recv_buffer[1]=%d \n",(unsigned char)recv_buffer[0],(unsigned char)recv_buffer[1]); length=(unsigned char)recv_buffer[1]*256 +(unsigned char)recv_buffer[0]; retcode=Select_socket_status(sockfd); //printf("third read Select_socket_status ret_code=%d length=%d .....\n",retcode,length); if(retcode<0) { printf("Select_socket_status error third .... sockfd=%d\n",sockfd); continue; } ret_value=read(sockfd,ptr,length); if(ret_value<=0) { printf("third recv sockfd = %d ret_value is %d close SOCKET \n",socketfd,ret_value); close(socketfd); break; } if((unsigned char)recv_buffer[ret_value-1]!=0x16) { printf("the END byte ERROR ,the message is ERROR ......\n"); continue; } if((unsigned char)recv_buffer[0]==1) { fill_dcepm_driverinfor(recv_buffer,length); } else if((unsigned char)recv_buffer[0]==2) { fill_dcepm_sysinfor(recv_buffer,length); } else if((unsigned char)recv_buffer[0]==3) { fill_dcepm_netinfor(recv_buffer,length); } else if((unsigned char)recv_buffer[0]==4) { fill_dcepm_pthreadinfor(recv_buffer,length); } else { printf("recv other message ------------ ERROR -------------------\n"); } sleep(1); } else if((unsigned char)recv_buffer[0]==0xfc) //ask for moniparas from client { int j,ret,send_num; int tempint1,len_hostname; char clientname[5]; int recnum=0; retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error\n"); continue; } ret_value=read(sockfd,recv_buffer,1); len_hostname=recv_buffer[0]; ret_value=read(sockfd,recv_buffer,len_hostname); strncpy(clientname,recv_buffer,len_hostname); clientname[len_hostname]='\0'; printf("clientname is %s\n",clientname); retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error second\n"); continue; } ret_value=read(sockfd,recv_buffer,1); if((unsigned char)recv_buffer[0]!=0x16) { printf("the end signal isn't valid!\n"); continue; } //get partition_name to be moni recnum=oodbfind("Node_name",clientname,&tb_descr_Partitioninfo); //printf("num of part to be moni is %d\n",recnum); struct part_name *part_name_p; struct PARTITIONINFO *partitioninfo_p; part_name_p=(struct part_name*)malloc(sizeof(struct part_name)*recnum); partitioninfo_p=(struct PARTITIONINFO*)malloc(sizeof(struct PARTITIONINFO)*recnum); ret=oodbread_ra(partitioninfo_p,"Node_name",clientname,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO)*recnum); if(ret<0) { printf("oodbread fail!\n"); } for(tempint1=0;tempint1<recnum;tempint1++) { strcpy((part_name_p+tempint1)->name,(partitioninfo_p+tempint1)->Part_name); //printf("recv %s\n",(part_name_p+tempint1)->name); } send_buffer[0]=0xfc; send_buffer[1]=recnum; memcpy(&send_buffer[2],part_name_p,recnum*sizeof(struct part_name)); send_num=recnum*sizeof(struct part_name)+2; retcode=Select_socket_status1(sockfd,1); j=ptop_write_message(sockfd,send_buffer,send_num); if(j<=0) { if((j==-2)||(j==-1)) { close(sockfd); free(part_name_p); free(partitioninfo_p); break; } } free(part_name_p); free(partitioninfo_p); //get pthread_name to be moni*************************** recnum=oodbfind("Node_name",clientname,&tb_descr_Pthreadinfo); //printf("num of proc to be moni is %d\n",recnum); struct proc_name *proc_name_p; struct PTHREADINFO *pthreadinfo_p; proc_name_p=(struct proc_name*)malloc(sizeof(struct proc_name)*recnum); pthreadinfo_p=(struct PTHREADINFO*)malloc(sizeof(struct PTHREADINFO)*recnum); ret=oodbread_ra(pthreadinfo_p,"Node_name",clientname,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO)*recnum); for(tempint1=0;tempint1<recnum;tempint1++) { strcpy((proc_name_p+tempint1)->name,(pthreadinfo_p+tempint1)->Pthread_name); //printf("recv %s\n",(proc_name_p+tempint1)->name); } send_buffer[0]=recnum; memcpy(&send_buffer[1],proc_name_p,recnum*sizeof(struct proc_name)); send_num=recnum*sizeof(struct proc_name)+1; j=ptop_write_message(sockfd,send_buffer,send_num); if(j<=0) { if((j==-2)||(j==-1)) { close(sockfd); free(proc_name_p); free(pthreadinfo_p); break; } } free(proc_name_p); free(pthreadinfo_p); //get net_name to be moni********************** recnum=oodbfind("Node_name",clientname,&tb_descr_Netinfo); //printf("num of net to be moni is %d\n",recnum); struct net_name *net_name_p; struct NETINFO *netinfo_p; net_name_p=(struct net_name*)malloc(sizeof(struct net_name)*recnum); netinfo_p=(struct NETINFO*)malloc(sizeof(struct NETINFO)*recnum); ret=oodbread_ra(netinfo_p,"Node_name",clientname,&tb_descr_Netinfo,sizeof(NETINFO)*recnum); for(tempint1=0;tempint1<recnum;tempint1++) { strcpy((net_name_p+tempint1)->name,(netinfo_p+tempint1)->Net_name); //printf("recv %s\n",(net_name_p+tempint1)->name); } send_buffer[0]=recnum; memcpy(&send_buffer[1],net_name_p,recnum*sizeof(struct net_name)); send_buffer[recnum*sizeof(struct net_name)+1]=0x16; send_num=recnum*sizeof(struct net_name)+2; j=ptop_write_message(sockfd,send_buffer,send_num); if(j<=0) { if((j==-2)||(j==-1)) { close(sockfd); free(net_name_p); free(netinfo_p); break; } } free(net_name_p); free(netinfo_p); } else { printf("the SYN error recv char is %0.2x sockfd=%d !!!\n",(unsigned char)recv_buffer[0],sockfd); continue; } } close(socketfd); printf("RETURN this pthread(sokefd == %d ) BYE BYE !!!!!!!\n\n\n",sockfd);}int fill_dcepm_driverinfor(char *ptr,int len){ char buffer[1024]; int i,retcode,up_code,part_num_temp=0,ins_code; bzero(buffer,1024); memcpy(buffer,ptr,len); PARTITIONINFO dinfor; NODEINFO nodeinfo; struct PARTITIONMESSAGE *partitionmessage; part_num_temp=buffer[1]; partitionmessage=(struct PARTITIONMESSAGE *)&buffer[2]; for(i=0;i<part_num_temp;i++) { retcode=oodbread_rk(&dinfor,partitionmessage->Id,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO)); if(retcode <0) { printf("%s is not in Partinfo table!",partitionmessage->Id ); continue; } dinfor.Part_size=partitionmessage->Part_size; dinfor.Part_used=partitionmessage->Part_used; //printf("recv:%s %d %f\n",partitionmessage->Id,partitionmessage->Part_size,partitionmessage->Part_used); dinfor.Flag=0; sem_wait(sem); up_code=oodbupdate_rk(&dinfor,partitionmessage->Id,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO)); sem_post(sem); partitionmessage++; }/////////////////////Update nodeinfo struct for(i=0;i<node_num;i++) { if(!strcmp((nodeinfo_ptr+i)->Node_name,dinfor.Node_name)) { (nodeinfo_ptr+i)->ticks=0; (nodeinfo_ptr+i)->status=0; break; } } return(0); }int fill_dcepm_sysinfor(char *ptr,int len){ char buffer[1024]; int retcode=-1,ins_code=-1,up_code=-1; bzero(buffer,1024); //printf("len=%d \n",len); memcpy(buffer,ptr,len); /* for(int i=0;i<len;i++) { printf("%0.2x ",(unsigned char)buffer[i]); } printf("\n"); */ SYSINFO sysinfor; SYSMESSAGE *sysmesage; sysmesage=(SYSMESSAGE *)&buffer[2]; //printf("sysmesage->Node_name=%s ...............\n",sysmesage->Node_name); if(Sysinfo_use_flag==1) { retcode=oodbread_rk(&sysinfor,sysmesage->Node_name,&tb_descr_Sysinfo,sizeof(SYSINFO)); //printf("oodbread_rk retcode=%d ............\n",retcode); bzero(&sysinfor,sizeof(SYSINFO)); memcpy(sysinfor.Node_name,sysmesage->Node_name,10); sysinfor.Cpu_used=sysmesage->Cpu_used; sysinfor.Mem_used=sysmesage->Mem_used; sysinfor.Mem_size=sysmesage->Mem_size; sem_wait(sem); if(retcode <0) { ins_code=oodbinsert(&sysinfor,&tb_descr_Sysinfo,1,sizeof(SYSINFO)); //printf("insert ins_code is %d ...\n",ins_code); } else { up_code=oodbupdate_rk(&sysinfor,sysmesage->Node_name,&tb_descr_Sysinfo,sizeof(SYSINFO)); //printf("insert up_code is %d ...\n",up_code); } sem_post(sem); } return(0);}int fill_dcepm_netinfor(char *ptr,int len){ char buffer[1024]; int net_num_temp=0; int retcode=-1,up_code=-1; bzero(buffer,1024); //printf("len=%d \n",len); memcpy(buffer,ptr,len); NETINFO netinfor; NETMESSAGE *netmessage; net_num_temp=buffer[1]; //printf("net_num_temp is %d\n",net_num_temp); netmessage=(NETMESSAGE *)&buffer[2]; for(int k=0;k<net_num_temp;k++) { retcode=oodbread_rk(&netinfor,netmessage->Id,&tb_descr_Netinfo,sizeof(NETINFO)); if(retcode <0) { printf("%s is not in Netinfo table!",netmessage->Id ); continue; } memcpy(netinfor.Net_address,netmessage->Net_address,20); //printf("netinfor.Net_address is %s\n",netinfor.Net_address); netinfor.Net_speed=netmessage->Net_speed; //printf("netinfor.speed is %d\n",netinfor.Net_speed); netinfor.Flag=0; sem_wait(sem); up_code=oodbupdate_rk(&netinfor,netmessage->Id,&tb_descr_Netinfo,sizeof(NETINFO)); sem_post(sem); //printf(" up_code is %d ...\n",up_code); netmessage++; } return(0);}int fill_dcepm_pthreadinfor(char *ptr,int len){ char buffer[1024]; int retcode=-1,ins_code=-1,up_code=-1; bzero(buffer,1024); //printf("len=%d \n",len); memcpy(buffer,ptr,len); /* for(int i=0;i<len;i++) { printf("%0.2x ",(unsigned char)buffer[i]); } printf("\n"); */ PTHREADINFO pthinfor; PTHREADMESSAGE *pthreadmessage; pthreadmessage=(PTHREADMESSAGE *)&buffer[2]; if(Pthreadinfo_use_flag==1) { int proc_num=len/(sizeof(PTHREADMESSAGE)); for(int i=0;i<proc_num;i++) { retcode=oodbread_rk(&pthinfor,pthreadmessage->Id,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO)); //printf("oodbread_rk retcode=%d ............\n",retcode); if(retcode <0) { printf("%s is not in Pthreadinfo table!\n",pthreadmessage->Id); continue; } pthinfor.Pthread_cpuload = pthreadmessage->Pthread_cpuload; pthinfor.Pthread_status=pthreadmessage->Pthread_status; pthinfor.Pthread_memload=pthreadmessage->Pthread_memload; pthinfor.Flag=0; up_code=oodbupdate_rk(&pthinfor,pthreadmessage->Id,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO)); //printf("update up_code is %d ...\n",up_code); pthreadmessage++; } } return(0);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -