
/* OpenWebSpider
 *
 *  Author:     Stefano Alimonti aka Shen139
 *  Mail:       shen139 [at] openwebspider (dot) org
 *
 *
 * This file is part of OpenWebSpider
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */


#ifndef __FNCT
#define __FNCT

#include "options.h"


/*openwebspider-0.5.c*/
int usage(char *txt);
void sigdie(int a);

/*hstlist.h*/
typedef struct _NODE
{
	void* field;
	struct _NODE* next;
}NODE;

NODE* lstFirst;

NODE* lstInit(struct sHost host);
int lstAddHost(NODE** first,struct sHost host);
NODE* lstGetNodeByHost(NODE* first, struct sHost host);
NODE* lstGetNodeByVal(NODE* first,int val);
int lstSetNodeStatus(NODE* first,int sub, int bus);


/*htmlfnct.h*/
int ParseHTTPRequest(char* recvdpkt,char* htmlOut,int maxout,char* httpHeader, char* stuff,int level);
int ForgeHTTPPacket(struct sHost hst,char * packet);
int BetweenTag(char* html, char* tag,char* out,int endwithstarttag,int maxout);
int UnHtml(char* html, char* text,int maxout);
int ReturnFirstUrl(struct sHost* Host);
int LookForUrls(char *html,struct sHost hst);


/*list.h*/
int lstFreeAll(NODE* first);
NODE* lstGetNodeX(NODE* first, int x);
NODE* lstGetLastNode(NODE* first, int* NumOfNodes);


/*misc.h*/
#ifndef WIN32
  int GetTickCount();
  void SetconsoleTilte(char*);
  int stricmp(char*,char*);
  int strnicmp(char*,char*,int);
  void Sleep(int);
  char* _strupr(char*);
  char* _strlwr(char*a);
  void closesocket(int);
  int ExitThread(int);
  int TerminateThread(pthread_t,int);
  void CloseHandle(HANDLE);
#endif

int InitIndexing(struct sHost currentHst);
void MemoryCorruptedHandler(char* funct);
int ReadConfFile();
int IndexedSearch(char* hostname,char* username,char* password,char* dbname,char* Query);
int IndexPage(char* html, struct sHost host, unsigned int htmlLength);
void printStats(struct sHost* Host,int flag);
void DoQuit();
int IsPageIndexed(struct sHost* host);
int sqlTextToUTF8(char* text, char* out, int maxout);


/*mymutex.h*/
void init_mutex();
void thrdBlock(int iHndl);
void thrdUnBlock(int iHndl);
void UnBlockAll();


/*rank.h*/
int GetHostRank(char* hostname);
int CalcPageRank(char* hostname);


/*robots.h*/
int ParseRobotsTxt(char* html,struct sHost host);
int CheckRobotExclusion(char* page);


/*socket.h*/
#ifdef WIN32
  #pragma comment(lib,"WS2_32.lib")
#else
  #define  SOCKET          int
  #define  SOCKADDR_IN     struct sockaddr_in
  #define  LPSOCKADDR      struct sockaddr*
  #define  SOCKET_ERROR    -1
#endif

int setnonblock(SOCKET sock,int timeout);
int StartUpWinsock();
int LoadSocket(SOCKET *sock,struct sHost* shost,SOCKADDR_IN *saddr);
int RecvPackets(SOCKET *sock,char* packet, int maxlen);


/*sqlfnct.h*/
int sqlConnect(char* hostname, char* username, char* password, char* table,MYSQL* rMysql);
void my_mysql_ping(MYSQL* mysql,int iMutex);
int my_mysql_query(MYSQL*mysql, char* sqlQuery,int iMutex);
int my_mysql_query_and_store_results(MYSQL*mysql, char* sqlQuery,MYSQL_RES** tRes,MYSQL_RES* srRes,int iMutex);


/*strfnct.h*/
int atoupper(char* in, char* out, int maxout);
int UnToken(char* str,char* Tokens,char* out,int len);
int bTokenIn(char* str,char* Tokens,int len);
int OnlyOneSpace(char* str,char* out,int len);
int ReplaceChr(char* string, char bus, char sub);
int ReplaceStr(char* string,char* strOut, char* bus, char* sub);
void RemoveShit(char* text);
char* strtrim(char* in,char* out);
char* strWord(char* where,char* word);

typedef struct __myCStr
{
char* myString;
int myStrLen;
}MYCSTR;
int myCStrLen(struct __myCStr* myCStr);
int myCStrLenUpdate(struct __myCStr* myCStr);
char* myCStrCpy(struct __myCStr* myCStr, char* text);
char* myCStrnCpy(struct __myCStr* myCStr, char* text, int n);
char* myCStrCat(struct __myCStr* myCStr, char* text);
char* myCStrnCat(struct __myCStr* myCStr, char* text, int n);
char* myCStrMemCpy(struct __myCStr* myCStr, char* blob, int blobLen);
char* myCStrMemCat(struct __myCStr* myCStr, char* blob, int blobLen);


/*temptamble.h*/
void RandomTable(char* table);
int CreateTmpTable(char* table);
int FlushTempTable(char* table);
int DropTempTable(char* table);


/*thread.h*/
#ifdef WIN32
unsigned __stdcall mainThread(LPVOID pthrdNum);
#else
void* mainThread(LPVOID pthrdNum);
#endif

void KillThreads();
void CreateThreads();
void CheckThreads();


/*urlfunct.h*/
int AddUrl(struct sHost hst, int level,struct sHost* from);
int AddExternalHost(struct sHost Host,struct sHost* from);
int ParseUrl(char* url,struct sHost* sh,struct sHost* currentHost);
int GenerateURL(struct sHost Host,char* URL);
int PortNumFromHostname(char* hostname);
int GetDir(char* Page,char* dir);
int CheckPage(char* page);
int PageType(struct sHost* Host);
void unencode(char *src, char *last, char *dest);
int pRelationships(struct sHost* links,struct sHost* linked,int level);


/*modules.h*/
void* GetModFunctionHandlerByName(char* functName);
void* GetInitModFunctionHandlerByName(char* functName);
void* myGetProcAddress(void* handler,char* funct);
int myLoadModules(char* filename, void* handler);
int myLoadModules(char* filename,void* handler);


#endif

/*EOF*/

