void MainObject::SendGpoMask(int ch,int matrix) { for(int i=0;i<ripcd_gpos[matrix];i++) { EchoCommand(ch,QString().sprintf("GN %d %d %d!", matrix,i,ripcd_gpo_mask[matrix][i])); } }
void MainObject::SendGpoCart(int ch,int matrix) { for(int i=0;i<ripcd_gpos[matrix];i++) { EchoCommand(ch,QString().sprintf("GD %d %d %d %d!", matrix,i,ripcd_gpo_macro[matrix][i][0], ripcd_gpo_macro[matrix][i][1])); } }
void MainObject::BroadcastCommand(const char *command) { for(int i=0;i<RIPCD_MAX_CONNECTIONS;i++) { if(socket[i]!=NULL) { EchoCommand(i,command); } } }
void MainObject::BroadcastCommand(const char *command) { for(unsigned i=0;i<ripcd_conns.size();i++) { if(ripcd_conns[i]!=NULL) { EchoCommand(i,command); } } }
void MainObject::SendGpoMask(int ch,int matrix) { if(ripcd_switcher[matrix]==NULL) { return; } for(unsigned i=0;i<ripcd_switcher[matrix]->gpoQuantity();i++) { EchoCommand(ch,QString().sprintf("GN %d %d %d!", matrix,i,ripcd_gpo_mask[matrix][i])); } }
void MainObject::SendGpiCart(int ch,int matrix) { if(ripcd_switcher[matrix]==NULL) { return; } for(unsigned i=0;i<ripcd_switcher[matrix]->gpiQuantity();i++) { EchoCommand(ch,QString().sprintf("GC %d %d %d %d!", matrix,i,ripcd_gpi_macro[matrix][i][0], ripcd_gpi_macro[matrix][i][1])); } }
void MainObject::SendGpo(int ch,int matrix) { switch(ripcd_matrix_type[matrix]) { case RDMatrix::LiveWire: ripcd_livewire[matrix]->sendGpo(); break; default: for(int i=0;i<ripcd_gpos[matrix];i++) { EchoCommand(ch,QString().sprintf("GO %d %d %d %d!", matrix,i,ripcd_gpo_state[matrix][i], ripcd_gpo_mask[matrix][i])); } break; } }
void MainObject::EchoArgs(int ch,const char append) { char command[RIPCD_MAX_LENGTH+2]; int l; command[0]=0; for(int i=0;i<argnum[ch];i++) { strcat(command,args[ch][i]); strcat(command," "); } l=strlen(command); command[l]=append; command[l+1]='!'; command[l+2]=0; EchoCommand(ch,command); }
void MainObject::DispatchCommand(int ch) { QString default_name; char str[RD_RML_MAX_LENGTH]; RDMacro macro; char buffer[RD_RML_MAX_LENGTH]; char cmd[RD_RML_MAX_LENGTH+4]; int echo=0; QHostAddress addr; // // Common Commands // Authentication not required to execute these! // if(!strcmp(args[ch][0],"DC")) { // Drop Connection socket[ch]->close(); KillSocket(ch); return; } if(!strcmp(args[ch][0],"PW")) { // Password Authenticate if(!strcmp(args[ch][1],ripcd_config->password())) { auth[ch]=true; EchoCommand(ch,"PW +!"); return; } else { auth[ch]=false; EchoCommand(ch,"PW -!"); return; } } // // Priviledged Commands // Authentication required to execute these! // if(!auth[ch]) { EchoArgs(ch,'-'); return; } if(!strcmp(args[ch][0],"RU")) { // Request User EchoCommand(ch,(const char *)QString(). sprintf("RU %s!",(const char *)rdstation->userName())); return; } if(!strcmp(args[ch][0],"SU")) { // Set User SetUser(args[ch][1]); } if(!strcmp(args[ch][0],"MS")) { // Send RML Command if(argnum[ch]<4) { return; } strcpy(str,args[ch][3]); for(int i=4;i<argnum[ch];i++) { strcat(str," "); strcat(str,args[ch][i]); } strcat(str,"!"); } if(macro.parseString(str,strlen(str))) { addr.setAddress(args[ch][1]); macro.setAddress(addr); macro.setRole(RDMacro::Cmd); /* char temp[RD_RML_MAX_LENGTH]; macro.generateString(temp,RD_RML_MAX_LENGTH); LogLine(QString().sprintf("RECEIVED: %s ADDR: %s\n",temp,(const char *)macro.address().toString())); */ if(!macro.address().isNull()) { if(macro.address()==rdstation->address()) { // Local Loopback macro.generateString(buffer,RD_RML_MAX_LENGTH); if(macro.echoRequested()) { echo=1; } sprintf(cmd,"MS %s %d %s",(const char *)macro.address().toString(), echo,buffer); RunLocalMacros(¯o); BroadcastCommand(cmd); } else { sendRml(¯o); } } } if(!strcmp(args[ch][0],"ME")) { // Send RML Reply if(argnum[ch]<4) { return; } strcpy(str,args[ch][3]); for(int i=4;i<argnum[ch];i++) { strcat(str," "); strcat(str,args[ch][i]); } strcat(str,"!"); } if(macro.parseString(str,strlen(str))) { QHostAddress addr; addr.setAddress(args[ch][1]); macro.setAddress(addr); macro.setRole(RDMacro::Reply); if(macro.address()==rdstation->address()) { // Local Loopback macro.generateString(buffer,RD_RML_MAX_LENGTH); sprintf(cmd,"ME %s 0 %s",(const char *)macro.address().toString(), buffer); BroadcastCommand(cmd); } else { sendRml(¯o); } } if(!strcmp(args[ch][0],"RG")) { // Reload the GPI Table LoadGpiTable(); } if(!strcmp(args[ch][0],"GI")) { // Send Complete GPI Status int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpi(ch,matrix); } if(!strcmp(args[ch][0],"GO")) { // Send Complete GPO Status int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpo(ch,matrix); } if(!strcmp(args[ch][0],"GM")) { // Send Complete GPI Mask States int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpiMask(ch,matrix); } if(!strcmp(args[ch][0],"GN")) { // Send Complete GPI Mask States int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpoMask(ch,matrix); } if(!strcmp(args[ch][0],"GC")) { // Send Complete GPI Cart Assignments int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpiCart(ch,matrix); } if(!strcmp(args[ch][0],"GD")) { // Send Complete GPO Cart Assignments int matrix; sscanf(args[ch][1],"%d",&matrix); SendGpoCart(ch,matrix); } if(!strcmp(args[ch][0],"TA")) { // Send Onair Flag State EchoCommand(ch,QString().sprintf("TA %d!",ripc_onair_flag)); } }
void EchoIpcServer::echoCommand(const QVariant &command) { client()->echo(EchoCommand(command)); }