Ejemplo n.º 1
0
Archivo: zrex.c Proyecto: Prarrot/czmq
int
zrex_hits (zrex_t *self, const char *text)
{
    assert (self);
    assert (text);
    assert (self->trex);

    unsigned int index;
    for (index = 0; index < self->hits; index++) {
        free (self->hit [index]);
        self->hit [index] = NULL;
    }
    bool matched = !!trex_match (self->trex, text);
    if (matched) {
        //  Get number of hits, setting a sane limit
        self->hits = trex_getsubexpcount (self->trex);
        if (self->hits > MAX_HITS)
            self->hits = MAX_HITS;
    }
    else
        self->hits = 0;

    return self->hits;
}
Ejemplo n.º 2
0
static int reMatchTX (RegExpInfo *rx, const char *str) {
  if (!rx->tx) return 0;
  rx->bos = str;
  return trex_match(rx->tx, str)==TRex_True ? 1 : 0;
}
Ejemplo n.º 3
0
/**
 * \brief Parse a string
 * \param mess_src The string to parse.
 * \return A Message created from the parameter.
 */
struct Message* mess__parse(char* mess_src)
{
	if(!isEverythingInitialized) mess__base__init();
     if(!mess_src)
	  return NULL;
     struct Message* mess_dest;
     mess__init(&mess_dest);

     int i;
     int match = 0;
     char * ptr, *tmp2;

     for(i = 0; i < MESS__NB_REGEXES; i++) // trouver le moyen de staticifier ça
     {
	  if(trex_match(trex_regexes[i], mess_src))
	  {
	       match = 1;
	       break;
	  }
     }
     if(match == 0) i = -1;

     char * tmp = malloc((strlen(mess_src) + 1)* sizeof(char));
     switch(i)
     {
     case 0:
	  mess_dest->type = LOAD;
	  mess_dest->s_parameter = str_sub(mess_src, 5, strlen(mess_src) - 1);
	  break;
     case 1:
	  mess_dest->type = SAVE;
	  mess_dest->s_parameter = str_sub(mess_src, 5, strlen(mess_src) - 1);
	  break;
     case 2:
	  mess_dest->type = SHOW;
	  break;
     case 3:
	  mess_dest->type = ADDLINK;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->node1 = strcopy(strtok(NULL, " "));
	  mess_dest->node2 = strcopy(strtok(NULL, " "));
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));
	  break;
     case 4:
	  mess_dest->type = UPDATELINK;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));
	  break;
     case 5:
	  mess_dest->type = DELLINK;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  break;
     case 6:
	  mess_dest->type = DISCONNECT;
	  strtok(mess_src, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  break;
     case 7:
	  mess_dest->type = MESSAGE;
	  strcpy(tmp, mess_src);
	  strtok(tmp, " ");

	  mess_dest->node1  = strcopy(strtok(NULL, " "));

	  ptr = strstr(mess_src, mess_dest->node1) + strlen(mess_dest->node1) + 2;
	  mess_dest->s_parameter = malloc((1 + strlen(ptr)) * sizeof(char));
	  strcpy(mess_dest->s_parameter, ptr);
	  mess_dest->s_parameter[strlen(ptr) - 1] = 0;

	  break;
     case 8:
	  mess_dest->type = ROUTE;
	  strtok(mess_src, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));

	  break;
     case 9:
	  mess_dest->type = ROUTETABLE;
	  break;
     case 10:
	  mess_dest->type = LOGIN;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));

	  break;
     case 11:
	  mess_dest->type = LOGIN;
	  //log in port p
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  strtok(NULL, " ");
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));

	  break;
     case 12:
	  mess_dest->type = LOGOUT;
	  break;
     case 13:
	  mess_dest->type = GREETING;
	  strtok(mess_src, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  break;
     case 14:
	  mess_dest->type = BYE;
	  break;
     case 15:
	  mess_dest->type = POLL;
	  break;
     case 16:
	  mess_dest->type = NEIGHBORHOOD;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->s_parameter  = strcopy(strtok(NULL, " "));
	  break;
     case 17:
	  mess_dest->type = NEIGHBORHOOD;
	  mess_dest->accept = OK;
	  break;
     case 18:
	  mess_dest->type = LINK;
	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  break;
     case 19:
	  mess_dest->type = LINK;
	  mess_dest->accept = OK;
	  break;
     case 20:
	  mess_dest->type = VECTOR;
	  strtok(mess_src, " ");
	  mess_dest->s_parameter  = strcopy(strtok(NULL, " "));
	  break;
     case 21:
	  mess_dest->type = VECTOR;
	  mess_dest->accept = OK;
	  break;
     case 22:
	  mess_dest->type = PACKET;

	  strcpy(tmp, mess_src);

	  strtok(tmp, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");

	  tmp2 = strtok(NULL, " ");
	  mess_dest->n_parameter = atoi(tmp2);


	  mess_dest->s_parameter = strcopy(strtok(NULL, "\0") + 5); //strstr(mess_src, tmp2) + strlen(tmp2) + 1;
	  break;

     case 23:
	  mess_dest->type = PACKET;
	  mess_dest->accept = OK;

	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  break;

     case 24:
	  mess_dest->type = PACKET;
	  mess_dest->accept = TOOFAR;

	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  break;

     case 25:
	  mess_dest->type = PING;

	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));
	  break;

     case 26:
	  mess_dest->type = PONG;

	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->n_parameter = atoi(strtok(NULL, " "));
	  break;

     case 27:
	  mess_dest->type = PONG;
	  mess_dest->accept = TTLZERO;

	  strtok(mess_src, " ");
	  strtok(NULL, " ");
	  mess_dest->seqnum  = atoi(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  strtok(NULL, " ");
	  mess_dest->node2  = strcopy(strtok(NULL, " "));
	  break;

     case 28:
	  mess_dest->type = PING;
	  strtok(mess_src, " ");
	  mess_dest->node1  = strcopy(strtok(NULL, " "));
	  break;

     case 29:
	  mess_dest->type = QUIT;
	  break;

     case 30:
	  mess_dest->type = NEIGHBORHOOD;
	  mess_dest->s_parameter = malloc(sizeof(char));
	  mess_dest->s_parameter[0] = 0;
	  break;

     case 31:
	  mess_dest->type = VECTOR;
	  mess_dest->s_parameter = malloc(sizeof(char) * 3);
	  mess_dest->s_parameter[0] = '[';
	  mess_dest->s_parameter[1] = ']';
	  mess_dest->s_parameter[2] = 0;
	  break;

     case 32:
       	  mess_dest->type = NETWORK_DEBUG;
       break;

     default:
	  mess_dest->type = NONE;
	  fprintf(stderr, "ERREUR: Message invalide : '%s'.\n", mess_src);

	  break;
     }

     free(tmp);
     return mess_dest;
}