📄 ch_info_server.cpp
字号:
#include <sys/types.h>#include <stdlib.h>#include <fcntl.h>#include <sys/time.h>#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include <stdlib.h>#include <sys/wait.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <signal.h>#include <time.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <semaphore.h>#include <error.h>#include "mysock.h"extern int errno;#define MAXCHANNELNUM 200#define MAXNAMELENGTH 256#define MAXCHANNELNAME 20struct CHAN{ int channel_no; int ip; int port; char channel_name[MAXCHANNELNAME]; int v_pid; int a_pid; int rate; int type;};struct CHANNEL_INFO_PACKET{ int command; //100 int chanNum; struct CHAN chan[MAXCHANNELNUM];}chPack;char channel_ip[MAXNAMELENGTH]="225.8.8.8", lip[MAXNAMELENGTH]="192.168.6.178";int channel_port=8888, lport=2222;mySock t_sock;int listenfd=0, connfd=0;int get(char *name,char *s);double CountSecond(char *s);FILE * fp;void parent_Quit(int signo){ t_sock.Close(); return;}int main(int argv, char **argc){ int index=0; char * tempstr; char fname[MAXNAMELENGTH]="/mnt/project/vodproject/Ch.txt"; char str[MAXNAMELENGTH]; char source_ip[32],source_port[16],target_ip[32], target_port[16],start_time[64],end_time[64],channel_no[16], bandwidth[128],channel_name[MAXNAMELENGTH],v_pid[16],a_pid[16],mode[6],program_type[6]; time_t currentTime; char timeStr[128]; struct tm * localTime; int i; for ( index=1; index<argv; index++) { if ( (tempstr=strstr(argc[index], "channel_ip="))!=NULL ) { tempstr+=11; strcpy(channel_ip, tempstr); } else if ( (tempstr=strstr(argc[index], "lip="))!=NULL ) { tempstr+=4; strcpy(lip, tempstr); } else if ( (tempstr=strstr(argc[index], "channel_port="))!=NULL ) { tempstr+=13; channel_port=atoi(tempstr); } else if ( (tempstr=strstr(argc[index], "lport="))!=NULL ) { tempstr+=6; lport = atoi(tempstr); } else if ( (tempstr=strstr(argc[index], "script="))!=NULL ) { tempstr+=7; strcpy(fname,tempstr); } } signal(SIGKILL, parent_Quit); signal(SIGQUIT, parent_Quit); signal(SIGTERM, parent_Quit); signal(SIGINT , parent_Quit); signal(SIGSTOP, parent_Quit); chPack.command=100; chPack.chanNum=0; if (!t_sock.Create(channel_ip, channel_port, lip, lport, S_WYJ_SEND)){ printf("create socket failure\n"); exit(0); } while ( 1 ){ chPack.chanNum=0; while((fp=fopen(fname,"r"))==NULL){ printf("Maybe program sheet is being edit,wait 5 seconds.\n"); sleep(5); } while (!feof(fp)){ fscanf(fp,"%s",str); while(strcmp(str,"[channel]")&&(!feof(fp))) fscanf(fp,"%s",str); if(feof(fp)) break; // get channel description if((get("source_ip=",source_ip))&& (get("source_port=",source_port)) && (get("target_ip=",target_ip))&& (get("target_port=",target_port)) &&(get("start_time=",start_time))&&(get("end_time=",end_time)) &&(get("channel_no=",channel_no))&&(get("bandwidth=",bandwidth)) &&(get("describe=",channel_name))&&(get("mode=",mode)) &&(get("v_pid=",v_pid))&&(get("a_pid=",a_pid)) &&(get("type=",program_type))){ currentTime = time(NULL); localTime = localtime(¤tTime); sprintf(timeStr,"%d:%d:%d",localTime->tm_hour,localTime->tm_min,localTime->tm_sec); // if mode==0 || mode==1 then output if( (atoi(mode)==0)|| (atoi(mode)==1) ){ chPack.chan[chPack.chanNum].channel_no=atoi(channel_no); inet_aton(target_ip,(struct in_addr *)&chPack.chan[chPack.chanNum].ip); chPack.chan[chPack.chanNum].port=atoi(target_port); strncpy(chPack.chan[chPack.chanNum].channel_name,channel_name,MAXCHANNELNAME-1); //printf("%d %d %s\n",chPack.chan[chPack.chanNum].ip,chPack.chan[chPack.chanNum].port,chPack.chan[chPack.chanNum].channel_name); chPack.chan[chPack.chanNum].v_pid=atoi(v_pid); chPack.chan[chPack.chanNum].a_pid=atoi(a_pid); chPack.chan[chPack.chanNum].type=atoi(program_type); for(i=0;i<strlen(bandwidth);i++) if(bandwidth[i]<'0'||bandwidth[i]>'9') break; if(i==strlen(bandwidth)) chPack.chan[chPack.chanNum].rate=atoi(bandwidth); else chPack.chan[chPack.chanNum].rate=0;// printf("ch %d is active.\n",chPack.chan[chPack.chanNum].channel_no); chPack.chanNum++; } } } fclose(fp); // printf("there are %d channels.\n",chPack.chanNum); if ( !t_sock.SendMsg((char *)&chPack, 2*sizeof(int)+chPack.chanNum*sizeof(CHAN))) printf("send error\n"); sleep(30); } // end while (1) } double CountSecond(char *s){//turn the XX:xx:xx to xxxx seconds int hour,minute,second; hour=atoi(s); minute=atoi(strchr(s,':')+1); second=atoi(strrchr(s,':')+1); return (hour*3600+minute*60+second); } int get(char *name,char *s){ char str[128]; fscanf(fp,"%s",str); if(!strcmp(str,name)){ fscanf(fp,"%s",s); if (!strcmp(name,"source_ip=")){ if(INADDR_NONE==inet_addr(s)){ printf("the source_ip is invalid\n"); return 0; } return 1; }else if(!strcmp(name, "source_port=")){ if ((atoi(s))<0||(atoi(s))>9999){ printf("the source_port is invalid\n"); return 0; } return 1; }else if(!strcmp(name, "target_ip=")){ if(INADDR_NONE==inet_addr(s)){ printf("the target_ip is invalid"); return 0; } return 1; }else if(!strcmp(name, "target_port=")){ if ((atoi(s))<0||(atoi(s))>9999){ printf("the target_port is invalid"); return 0; } return 1; }else if(!strcmp(name, "start_time=")){ return 1; }else if(!strcmp(name, "end_time=")){ return 1; }else if(!strcmp(name, "channel_no=")){ if (atoi(s)<0){ printf("the channel_no is invalid"); return 0; } return 1; }else if( !strcmp(name, "bandwidth=")){ if (atof(s)<0){ printf("the bandwidth is invalid"); return 0; } }else if( !strcmp(name, "describe=")){ return 1; }else if( !strcmp(name, "v_pid=")){ return 1; }else if( !strcmp(name, "a_pid=")){ return 1; }else if( !strcmp(name, "mode=")){ return 1; }else if( !strcmp(name, "type=")){ return 1; } return 1; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -