Exemplo n.º 1
0
static void new_indexnode_event (
    const void *ctxt,
    const char *host,
    const char *port,
    const char *fs2protocol,
    const char *id
)
{
    indexnodes_t *ins = (indexnodes_t *)ctxt;
    indexnode_t *found_in, *new_in = NULL;
    const char *version;


    if (!parse_fs2protocol(fs2protocol, &version))
    {
        trace_info("Seen advert for indexnode %s at %s:%s (version %s)\n", id, host, port, version);

        if ((found_in = indexnodes_list_find(CALLER_INFO ins->list, id)))
        {
            indexnode_seen(found_in);

            indexnode_delete(CALLER_INFO found_in);
        }
        else
        {
            new_in = indexnode_new(CALLER_INFO host, port, version, id);
            if (new_in)
            {
                rw_lock_wlock(ins->lock);

                /* If it's not been seen before, add it */
                indexnodes_list_add(ins->list, new_in);

                rw_lock_wunlock(ins->lock);
            }
            else
            {
                free_const(version);
            }
        }
    }
    else
    {
        free_const(fs2protocol);
    }

    if (!new_in)
    {
        free_const(host); free_const(port); free_const(id);
    }
}
Exemplo n.º 2
0
  void query_recommender::merge_recommended_queries(std::multimap<double,std::string,std::less<double> > &related_queries,
      hash_map<const char*,double,hash<const char*>,eqstr> &update)
  {
    hash_map<const char*,double,hash<const char*>,eqstr>::iterator hit;
    std::multimap<double,std::string,std::less<double> >::iterator mit
    = related_queries.begin();
    while(mit!=related_queries.end())
      {
        std::string rquery = (*mit).second;
        if ((hit = update.find(rquery.c_str()))!=update.end())
          {
            (*hit).second = std::min((*mit).first,(*hit).second);
            std::multimap<double,std::string,std::less<double> >::iterator mit2 = mit;
            ++mit;
            related_queries.erase(mit2);
          }
        else ++mit;
      }
    hit = update.begin();
    hash_map<const char*,double,hash<const char*>,eqstr>::iterator chit;
    while(hit!=update.end())
      {
        related_queries.insert(std::pair<double,std::string>((*hit).second,std::string((*hit).first)));
        chit = hit;
        ++hit;
        free_const((*chit).first);
      }

  }
Exemplo n.º 3
0
 /* free map. */
 void miscutil::free_map(hash_map<const char*,const char*,hash<const char*>,eqstr> *&the_map)
 {
   hash_map<const char*,const char*,hash<const char*>,eqstr>::iterator mit
   = the_map->begin();
   while (mit!=the_map->end())
     {
       const char *key = (*mit).first;
       const char *value = (*mit).second;
       hash_map<const char*,const char*,hash<const char*>,eqstr>::iterator mitc = mit;
       ++mit;
       the_map->erase(mitc);
       free_const(key);
       if (value)
         free_const(value);
     }
   delete the_map;
   the_map = NULL;
 }
Exemplo n.º 4
0
 stopwordlist::~stopwordlist()
 {
   hash_map<const char*,bool,hash<const char*>,eqstr>::iterator hit, hit2;
   hit = _swlist.begin();
   while (hit!=_swlist.end())
     {
       hit2 = hit;
       ++hit;
       const char *key = (*hit2).first;
       _swlist.erase(hit2);
       free_const(key);
     }
 }
Exemplo n.º 5
0
  void miscutil::list_remove_all(std::list<const char*> *the_list)
  {
    assert(the_list);

    std::list<const char*>::iterator lit = the_list->begin();
    while (lit!=the_list->end())
      {
        if ((*lit))
          free_const((*lit));
        std::list<const char*>::iterator c**t = lit;
        ++lit;
        the_list->erase(c**t);
      }
    the_list->clear();
  }
Exemplo n.º 6
0
  http_response::~http_response()
  {
    if (this != &cgi::_cgi_error_memory_response)
      {
        freez(_status);
        freez(_head);
        freez(_body);

        std::list<const char*>::iterator lit = _headers.begin();
        while (lit!=_headers.end())
          {
            const char *head = (*lit);
            lit = _headers.erase(lit);
            free_const(head);
          }
      }
    _head_length = 0;
  }
Exemplo n.º 7
0
static void
free_request_element(struct hbac_request_element *el,
                     bool free_group_ptrs)
{
    size_t i;

    if (el == NULL) {
        return;
    }

    if (el->groups != NULL && free_group_ptrs) {
        for (i=0; el->groups[i]; i++) {
            free_const(el->groups[i]);
        }
    }

    free(el->groups);
    free(el);
}
Exemplo n.º 8
0
  int miscutil::list_remove_item(std::list<const char*> *the_list, const char *str)
  {
    assert(the_list);

    int count = 0;
    std::list<const char*>::iterator lit = the_list->begin();
    while (lit!=the_list->end())
      {
        if ((*lit) && strcmp((*lit),str)==0)
          {
            free_const((*lit));
            std::list<const char*>::iterator c**t = lit;
            ++lit;
            the_list->erase(c**t);
            count++;
          }
        else ++lit;
      }
    return count;
  }
Exemplo n.º 9
0
static int parse_fs2protocol (const char *fs2protocol, const char **version)
{
    int rc = 1;
    const char *prefix = "fs2protocol-";
    const size_t prefix_len = strlen(prefix);

    if (!strncmp(fs2protocol, prefix, prefix_len))
    {
        char *v = malloc((strlen(fs2protocol) - prefix_len + 1) * sizeof(char));

        assert(sscanf(fs2protocol, "fs2protocol-%s", v) == 1);

        *version = v;
        rc = 0;
    }

    free_const(fs2protocol);

    return rc;
}
Exemplo n.º 10
0
  void se_parser_yahoo::start_element(parser_context *pc,
                                      const xmlChar *name,
                                      const xmlChar **attributes)
  {
    const char *tag = (const char*)name;

    if (strcasecmp(tag,"div") == 0)
      {
        const char *a_id = se_parser::get_attribute((const char**)attributes,"id");
        const char *a_class = se_parser::get_attribute((const char**)attributes,"class");

        if (!_start_results && a_id && strcasecmp(a_id,"web") == 0)
          _start_results = true;
        else if (_begin_results && a_class && (strcasecmp(a_class,"abstr") == 0
                                               || strcasecmp(a_class,"sm-abs") == 0))
          _summary_flag = true;
        else if (_begin_results && a_class && strncasecmp(a_class,"res",3) == 0)
          {
            // check on previous snippet, if any.
            if (pc->_current_snippet)
              {
                post_process_snippet(pc->_current_snippet);
                if (pc->_current_snippet)
                  {
                    //pc->_snippets->push_back(pc->_current_snippet);
                    pc->_current_snippet = NULL;
                  }
                else pc->_snippets->pop_back();
              }

            // create new snippet.
            search_snippet *sp = new search_snippet(_count++);
            sp->_engine |= std::bitset<NSEs>(SE_YAHOO);
            pc->_current_snippet = sp;
            pc->_snippets->push_back(pc->_current_snippet);
          }
      }
    else if (_start_results && strcasecmp(tag,"ol") == 0)
      {
        _begin_results = true;
      }
    else if (_begin_results && strcasecmp(tag,"h3") == 0)
      {
        _title_flag = true;
      }
    else if (strcasecmp(tag,"a") == 0)
      {
        const char *a_link = se_parser::get_attribute((const char**)attributes,"href");

        if (a_link)
          {
            if (_title_flag && pc->_current_snippet)
              {
                std::string url_str = std::string(a_link);
                size_t pos = 0;
                if ((pos = url_str.find("rds.yahoo.com"))!=std::string::npos
                    || (pos = url_str.find("search.yahoo.com"))!=std::string::npos)
                  if ((pos = url_str.find("/**",pos))!=std::string::npos)
                    {
                      try
                        {
                          url_str = url_str.substr(pos+3);
                        }
                      catch (std::exception &e)
                        {
                          // do nothing for now.
                        }
                    }
                const char *url_dec_str = encode::url_decode(url_str.c_str());
                url_str = std::string(url_dec_str);
                free_const(url_dec_str);
                pc->_current_snippet->set_url(url_str);
                pc->_current_snippet->set_cite(url_str);
              }
            else if (_begin_results && pc->_current_snippet)
              pc->_current_snippet->_cached = std::string(a_link);
          }
      }
  }