void convert_str_to_myListGA(char* parsed_cfg_str, listGroupAddr *myListGA, int index_gaddr) { const char s[3] = CMD_STRING_DELIMITER; // Разделитель параметров в строке char *token; // Выделяемая подстрока token = strtok(parsed_cfg_str, s); // Первый токен - строка strcpy(myListGA[index_gaddr].group_addr, token); myListGA[index_gaddr].group_addr_in_hex = readgaddr((myListGA[index_gaddr].group_addr)); token = strtok(NULL, s); myListGA[index_gaddr].value = atoi(token); token = strtok(NULL, s); strcpy(myListGA[index_gaddr].send_to_ip, token); token = strtok(NULL, s); myListGA[index_gaddr].send_to_port = atoi(token); // Начинаем формировать строку команды из распарсиваемой строки из файла strcpy(myListGA[index_gaddr].cmd_string, "");// Вначале очищаем строку команды token = strtok(NULL, s); // Копируем первый токен команды (как минимум одна команда должна быть) while( token != NULL ) { if(strncmp(token, "<LF>", 4) == 0) // Если полученный токен это служебный символ CR или LF, то дописываем его в строку команды strcat(myListGA[index_gaddr].cmd_string, "\n"); else if(strncmp(token, "<CR>", 4) == 0) strcat(myListGA[index_gaddr].cmd_string, "\r"); else if(strncmp(token, "<EL>", 4) == 0); // Просто пропускаем чтобы исключить попадание 0x0A в конец строки else // Иначе дописываем токен в строку команды как есть strcat(myListGA[index_gaddr].cmd_string, token); token = strtok(NULL, s); // Читаем следующий токен } }
int main (int ac, char *ag[]) { int len; EIBConnection *con; eibaddr_t dest; uchar buf[255] = { 0, 0x80 }; if (ac < 4) die ("usage: %s url eibaddr val val ...", ag[0]); con = EIBSocketURL (ag[1]); if (!con) die ("Open failed"); dest = readgaddr (ag[2]); len = readBlock (buf + 2, sizeof (buf) - 2, ac - 3, ag + 3); if (EIBOpen_GroupSocket (con, 1) == -1) die ("Connect failed"); len = EIBSendGroup (con, dest, 2 + len, buf); if (len == -1) die ("Request failed"); printf ("Send request\n"); EIBClose (con); return 0; }
// read parameters void readParseCGI() { char* params; char* value; char *valuepairs[MAX_GA]; char *cgistr; int i=0,j=0; cgistr = parseRequest(); if(cgistr == NULL) cgidie ("No data"); hex2ascii(cgistr); params=strtok(cgistr,"&"); while( params != NULL && i < MAX_GA) { valuepairs[i] = (char *)malloc(strlen(params)+1); if(valuepairs[i] == NULL) return; valuepairs[i] = params; params=strtok(NULL,"&"); i++; } while (i > j) { value=strtok(valuepairs[j],"="); if ( value != NULL ) { if (strcmp (value,"url") == 0) { value=strtok(NULL,"="); #ifdef BETA if ( value != NULL ) *eiburl = (char *) strdup(value); /* FIXME: Security - define url from ENV - Parameter only for devel */ #endif } else if (strcmp (value,"a") == 0) { value=strtok(NULL,"="); if (value==NULL) break; if (isNumeric(value)) gadest=atoi(value); else gadest=readgaddr(value); } else if (strcmp (value,"d") == 0) { value=strtok(NULL,"="); if (isNumeric(value)) { dpt=atoi(value); } } else if (strcmp (value,"v") == 0) { value=strtok(NULL,"="); if ( value != NULL && strlen(value)<50 ) strcpy(data,value); } else { //printf ("Unknown param %s\n",value); //debug } } j++; } }