Diff for /libwww/Robot/src/HTRobot.c between versions 1.67 and 1.68

version 1.67, 1998/03/20 17:53:18 version 1.68, 1998/05/04 19:38:22
Line 61 Line 61
 #define DEFAULT_DEPTH           0  #define DEFAULT_DEPTH           0
 #define DEFAULT_DELAY           50                      /* Write delay in ms */  #define DEFAULT_DELAY           50                      /* Write delay in ms */
   
   #define DEFAULT_SQL_SERVER      "localhost"
   #define DEFAULT_SQL_DB          "webbot"
   #define DEFAULT_SQL_USER        "webbot"
   #define DEFAULT_SQL_PW          ""
   
 #if 0  #if 0
 #define HT_MEMLOG               /* Is expensive in performance! */  #define HT_MEMLOG               /* Is expensive in performance! */
 #endif  #endif
Line 145  typedef struct _Robot { Line 150  typedef struct _Robot {
     regex_t *           check;      regex_t *           check;
 #endif  #endif
   
   #ifdef HT_MYSQL
       HTSQLLog *          sqllog;
       char *              sqlserver;
       char *              sqldb;
       char *              sqluser;
       char *              sqlpw;
       char *              sqlrelative;
       BOOL                sqlexternals;
       int                 sqlflags;
   #endif
   
 } Robot;  } Robot;
   
 typedef struct _Finger {  typedef struct _Finger {
Line 290  PRIVATE int HitSort (const void * a, con Line 306  PRIVATE int HitSort (const void * a, con
 PRIVATE BOOL calculate_linkRelations (Robot * mr, HTArray * array)  PRIVATE BOOL calculate_linkRelations (Robot * mr, HTArray * array)
 {  {
     if (mr && array) {      if (mr && array) {
         HTLog * log = HTLog_open(mr->relfile, YES, YES);          HTLog * log = mr->relfile ? HTLog_open(mr->relfile, YES, YES) : NULL;
         if (log) {          void ** data = NULL;
             void ** data = NULL;          HTParentAnchor * anchor = NULL;
             HTParentAnchor * anchor = NULL;          anchor = (HTParentAnchor *) HTArray_firstObject(array, data);
             anchor = (HTParentAnchor *) HTArray_firstObject(array, data);          while (anchor) {
             while (anchor) {  
                 char * uri = HTAnchor_address((HTAnchor *) anchor);              /*
                 if (uri) {              **  If we have a specific link relation to look for then do this.
                     /*              **  Otherwise look for all link relations.
                     **  If we have a specific relation to look for then use that.              */
                     */              if (mr->relation) {
                     if (mr->relation) {                  HTLink * link = HTAnchor_findLinkType((HTAnchor *) anchor, mr->relation);
                         HTLink * link = HTAnchor_findLinkType((HTAnchor *) anchor,                  if (link) {
                                                               mr->relation);                      HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link));
                         if (link) {                      char * src_uri = HTAnchor_address((HTAnchor *) anchor);
                             HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link));                      char * dest_uri = HTAnchor_address((HTAnchor *) dest);
                             char * dest_uri = HTAnchor_address((HTAnchor *) dest);                      if (src_uri && dest_uri) {
   #ifdef HT_MYSQL
                           if (mr->sqllog) {
                               HTSQLLog_addLinkRelationship (mr->sqllog,
                                                             src_uri, dest_uri,
                                                             HTAtom_name(mr->relation),
                                                             NULL);
                           }
   #endif
                           if (log) {
                               HTFormat format = HTAnchor_format(dest);
                               HTLog_addText(log, "%s %s %s --> %s\n",
                                             HTAtom_name(mr->relation),
                                             format != WWW_UNKNOWN ?
                                             HTAtom_name(format) : "<unknown>",
                                             src_uri, dest_uri);
                           }
   
                           /* Cleanup */
                           HT_FREE(src_uri);
                           HT_FREE(dest_uri);
                       }
                   }
               } else {
                   HTLink * link = HTAnchor_mainLink((HTAnchor *) anchor);
                   HTList * sublinks = HTAnchor_subLinks((HTAnchor *) anchor);
                   char * src_uri = HTAnchor_address((HTAnchor *) anchor);
                   HTLinkType linktype;
   
                   /* First look in the main link */
                   if (link && (linktype = HTLink_type(link))) {               
                       HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link));
                       char * dest_uri = HTAnchor_address((HTAnchor *) dest);
                       if (src_uri && dest_uri) {
   #ifdef HT_MYSQL
                           if (mr->sqllog) {
                               HTSQLLog_addLinkRelationship (mr->sqllog,
                                                             src_uri, dest_uri,
                                                             HTAtom_name(linktype),
                                                             NULL);
                           }
   #endif
                           if (log) {
                             HTFormat format = HTAnchor_format(dest);                              HTFormat format = HTAnchor_format(dest);
                             if (dest_uri) {                              HTLog_addText(log, "%s %s %s --> %s\n",
                                 HTLog_addText(log, "%s %s %s --> %s\n",                                            HTAtom_name(linktype),
                                               HTAtom_name(mr->relation),                                            format != WWW_UNKNOWN ?
                                               format != WWW_UNKNOWN ?                                            HTAtom_name(format) : "<unknown>",
                                               HTAtom_name(format) : "<unknown>",                                            src_uri, dest_uri);
                                               uri, dest_uri);                          }
                       }
                       HT_FREE(dest_uri);
                   }
   
                   /* and then in any sublinks */
                   if (sublinks) {
                       HTLink * pres;
                       while ((pres = (HTLink *) HTList_nextObject(sublinks))) {
                           if ((linktype = HTLink_type(pres))) {
                               HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(pres));
                               char * dest_uri = HTAnchor_address((HTAnchor *) dest);
                               if (src_uri && dest_uri) {
   #ifdef HT_MYSQL
                                   if (mr->sqllog) {
                                       HTSQLLog_addLinkRelationship (mr->sqllog,
                                                                     src_uri, dest_uri,
                                                                     HTAtom_name(linktype),
                                                                     NULL);
                                   }
   #endif
                                   if (log) {
                                       HTFormat format = HTAnchor_format(dest);
                                       HTLog_addText(log, "%s %s %s --> %s\n",
                                                     HTAtom_name(linktype),
                                                     format != WWW_UNKNOWN ?
                                                     HTAtom_name(format) : "<unknown>",
                                                     src_uri, dest_uri);
                                   }
                                 HT_FREE(dest_uri);                                  HT_FREE(dest_uri);
                             }                              }
                         }                          }
                     }                      }
                     HT_FREE(uri);  
                 }                  }
                 anchor = (HTParentAnchor *) HTArray_nextObject(array, data);  
             }                  /* Cleanup */
                   HT_FREE(src_uri);
               }
               anchor = (HTParentAnchor *) HTArray_nextObject(array, data);
         }          }
         HTLog_close(log);          if (log) HTLog_close(log);
         return YES;          return YES;
     }      }
     return NO;      return NO;
Line 581  PRIVATE BOOL calculate_statistics (Robot Line 669  PRIVATE BOOL calculate_statistics (Robot
             }              }
   
             /* Sort after link relations */              /* Sort after link relations */
             if (mr->relfile) {  #ifdef HT_MYSQL
                 if (SHOW_REAL_QUIET(mr))              if (mr->relfile || mr->sqllog) {
                   if (mr->relfile && SHOW_REAL_QUIET(mr))
                     HTTrace("\tLogged link relationship distribution in file `%s\'\n",                      HTTrace("\tLogged link relationship distribution in file `%s\'\n",
                             mr->relfile);                              mr->relfile);
                 calculate_linkRelations(mr, array);                  calculate_linkRelations(mr, array);
             }              }
   #endif
   
             /* Sort after modified date */              /* Sort after modified date */
             if (mr->lmfile) {              if (mr->lmfile) {
Line 747  PRIVATE BOOL Robot_delete (Robot * mr) Line 837  PRIVATE BOOL Robot_delete (Robot * mr)
         }          }
 #endif  #endif
   
   #ifdef HT_MYSQL
           if (mr->sqllog) {
               HTSQLLog_close(mr->sqllog);
               mr->sqllog = NULL;
           }
   #endif
   
         HT_FREE(mr->cwd);          HT_FREE(mr->cwd);
         HT_FREE(mr->prefix);          HT_FREE(mr->prefix);
         HT_FREE(mr->img_prefix);          HT_FREE(mr->img_prefix);
Line 905  PRIVATE int terminate_handler (HTRequest Line 1002  PRIVATE int terminate_handler (HTRequest
     Robot * mr = finger->robot;      Robot * mr = finger->robot;
     if (SHOW_QUIET(mr)) HTTrace("Robot....... done with %s\n", HTAnchor_physical(finger->dest));      if (SHOW_QUIET(mr)) HTTrace("Robot....... done with %s\n", HTAnchor_physical(finger->dest));
   
   #ifdef HT_MYSQL
       if (mr->sqllog) HTSQLLog_addEntry(mr->sqllog, request, status);
   #endif
   
     /* Check if negotiated resource and whether we should log that*/      /* Check if negotiated resource and whether we should log that*/
     if (mr->conneg) {      if (mr->conneg) {
         HTAssocList * cur = HTResponse_variant(response);          HTAssocList * cur = HTResponse_variant(response);
Line 1031  PUBLIC void HText_beginAnchor (HText * t Line 1132  PUBLIC void HText_beginAnchor (HText * t
         if (hd) {          if (hd) {
             if (SHOW_QUIET(mr)) HTTrace("Already checked\n");              if (SHOW_QUIET(mr)) HTTrace("Already checked\n");
             hd->hits++;              hd->hits++;
   #ifdef HT_MYSQL
               if (mr->sqllog) {
                   char * ref_addr = HTAnchor_address((HTAnchor *) referer);
                   if (ref_addr) {
                       HTSQLLog_addLinkRelationship(mr->sqllog, ref_addr, uri,
                                                    "referer", NULL);
                       HT_FREE(ref_addr);
                   }
               }
   #endif
             HT_FREE(uri);              HT_FREE(uri);
             return;              return;
         }          }
Line 1074  PUBLIC void HText_beginAnchor (HText * t Line 1185  PUBLIC void HText_beginAnchor (HText * t
             }              }
         } else {          } else {
             if (SHOW_QUIET(mr)) HTTrace("does not fulfill constraints\n");              if (SHOW_QUIET(mr)) HTTrace("does not fulfill constraints\n");
   #ifdef HT_MYSQL
               if (mr->reject || mr->sqllog) {
   #else   
             if (mr->reject) {              if (mr->reject) {
   #endif
                 if (referer) {                  if (referer) {
                     char * ref_addr = HTAnchor_address((HTAnchor *) referer);                      char * ref_addr = HTAnchor_address((HTAnchor *) referer);
                     if (ref_addr) HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri);                      if (mr->reject && ref_addr)
                           HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri);
   #ifdef HT_MYSQL
                       if (mr->sqllog && mr->sqlexternals && ref_addr)
                           HTSQLLog_addLinkRelationship(mr->sqllog,
                                                        ref_addr, uri,
                                                        "referer", NULL);
   #endif
   
                     HT_FREE(ref_addr);                      HT_FREE(ref_addr);
                 }                  }
             }              }
Line 1103  PUBLIC void HText_appendImage (HText * t Line 1226  PUBLIC void HText_appendImage (HText * t
             if (hd) {              if (hd) {
                 if (SHOW_QUIET(mr)) HTTrace("Already checked\n");                  if (SHOW_QUIET(mr)) HTTrace("Already checked\n");
                 hd->hits++;                  hd->hits++;
   #ifdef HT_MYSQL
                   if (mr->sqllog) {
                       char * ref_addr = HTAnchor_address((HTAnchor *) referer);
                       if (ref_addr) {
                           HTSQLLog_addLinkRelationship(mr->sqllog,
                                                        ref_addr, uri,
                                                        "image", alt);
                           HT_FREE(ref_addr);
                       }
                   }
   #endif
                 HT_FREE(uri);                  HT_FREE(uri);
                 return;                  return;
             }              }
Line 1135  PUBLIC void HText_appendImage (HText * t Line 1269  PUBLIC void HText_appendImage (HText * t
                 }                  }
             } else {              } else {
                 if (SHOW_QUIET(mr)) HTTrace("does not fulfill constraints\n");                  if (SHOW_QUIET(mr)) HTTrace("does not fulfill constraints\n");
   #ifdef HT_MYSQL
                   if (mr->reject || mr->sqllog) {
   #else   
                 if (mr->reject) {                  if (mr->reject) {
   #endif
                     if (referer) {                      if (referer) {
                         char * ref_addr = HTAnchor_address((HTAnchor *) referer);                          char * ref_addr = HTAnchor_address((HTAnchor *) referer);
                         if (ref_addr) HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri);                          if (mr->reject && ref_addr)
                               HTLog_addText(mr->reject, "%s --> %s\n", ref_addr, uri);
   #ifdef HT_MYSQL
                           if (mr->sqllog && mr->sqlexternals && ref_addr)
                               HTSQLLog_addLinkRelationship(mr->sqllog,
                                                            ref_addr, uri,
                                                            "image", alt);
   #endif
   
                         HT_FREE(ref_addr);                          HT_FREE(ref_addr);
                     }                      }
                 }                  }
Line 1428  int main (int argc, char ** argv) Line 1574  int main (int argc, char ** argv)
                 }                  }
 #endif  #endif
   
   #ifdef HT_MYSQL
               /* If we can link against a MYSQL database library */
               } else if (!strncmp(argv[arg], "-sqldb", 5)) {
                   mr->sqldb = (arg+1 < argc && *argv[arg+1] != '-') ?
                       argv[++arg] : DEFAULT_SQL_DB;
   
               } else if (!strncmp(argv[arg], "-sqlclearlinks", 10)) {
                   mr->sqlflags |= HTSQLLOG_CLEAR_LINKS_TABLE;
   
               } else if (!strncmp(argv[arg], "-sqlclearrequests", 12)) {
                   mr->sqlflags |= HTSQLLOG_CLEAR_REQUESTS_TABLE;
   
               } else if (!strncmp(argv[arg], "-sqlclearresources", 12)) {
                   mr->sqlflags |= HTSQLLOG_CLEAR_RESOURCES_TABLE;
   
               } else if (!strncmp(argv[arg], "-sqlclearuris", 10)) {
                   mr->sqlflags |= HTSQLLOG_CLEAR_URIS_TABLE;
   
               } else if (!strncmp(argv[arg], "-sqlexternals", 5)) {
                   mr->sqlexternals = YES;
   
               } else if (!strncmp(argv[arg], "-sqlpassword", 5)) {
                   mr->sqlpw = (arg+1 < argc && *argv[arg+1] != '-') ?
                       argv[++arg] : DEFAULT_SQL_PW;
   
               } else if (!strncmp(argv[arg], "-sqlrelative", 5)) {
                   mr->sqlrelative = (arg+1 < argc && *argv[arg+1] != '-') ?
                       argv[++arg] : NULL;
   
               } else if (!strncmp(argv[arg], "-sqlserver", 5)) {
                   mr->sqlserver = (arg+1 < argc && *argv[arg+1] != '-') ?
                       argv[++arg] : DEFAULT_SQL_SERVER;
   
               } else if (!strncmp(argv[arg], "-sqluser", 5)) {
                   mr->sqluser = (arg+1 < argc && *argv[arg+1] != '-') ?
                       argv[++arg] : DEFAULT_SQL_USER;
   
   #endif
   
             } else {              } else {
                 if (SHOW_REAL_QUIET(mr)) HTTrace("Bad Argument (%s)\n", argv[arg]);                  if (SHOW_REAL_QUIET(mr)) HTTrace("Bad Argument (%s)\n", argv[arg]);
             }              }
Line 1503  int main (int argc, char ** argv) Line 1688  int main (int argc, char ** argv)
         if (flush) HTCache_flushAll();          if (flush) HTCache_flushAll();
     }      }
   
       /* SQL Log specified? */
   #ifdef HT_MYSQL
       if (mr->sqlserver) {
           if ((mr->sqllog =
                HTSQLLog_connect(mr->sqlserver,
                                 mr->sqluser ? mr->sqluser : DEFAULT_SQL_USER,
                                 mr->sqlpw ? mr->sqlpw : DEFAULT_SQL_PW)) != NULL) {
               HTSQLLog_openDB(mr->sqllog, mr->sqldb ? mr->sqldb : DEFAULT_SQL_DB,
                               mr->sqlflags);
               if (mr->sqlrelative) HTSQLLog_makeRelativeTo(mr->sqllog, mr->sqlrelative);
           }
       }
   #endif
   
     /* CLF Log file specified? */      /* CLF Log file specified? */
     if (mr->logfile) {      if (mr->logfile) {
         mr->log = HTLog_open(mr->logfile, YES, YES);          mr->log = HTLog_open(mr->logfile, YES, YES);

Removed from v.1.67  
changed lines
  Added in v.1.68


Webmaster