servmgr.h
上传用户:chn_coc
上传日期:2007-12-20
资源大小:563k
文件大小:8k
源码类别:

P2P编程

开发平台:

Windows_Unix

  1. // ------------------------------------------------ // File : servmgr.h // Date: 4-apr-2002 // Author: giles // Desc:  // // (c) 2002 peercast.org // ------------------------------------------------ // 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. // ------------------------------------------------ #ifndef _SERVMGR_H #define _SERVMGR_H #include "servent.h"
  2. // ----------------------------------
  3. const int MIN_YP_RETRY = 20;
  4. const int MIN_TRACKER_RETRY = 10;
  5. const int MIN_RELAY_RETRY = 5;
  6. // ----------------------------------
  7. class BCID
  8. {
  9. public:
  10. BCID()
  11. :next(0),valid(true)
  12. {}
  13. bool writeVariable(Stream &, const String &);
  14. GnuID id;
  15. String name,email,url;
  16. bool valid;
  17. BCID *next;
  18. };
  19. // ---------------------------------- class ServHost { public: enum TYPE { T_NONE, T_STREAM, T_CHANNEL, T_SERVENT,
  20. T_TRACKER }; ServHost() {init();} void init() { host.init(); time = 0; type = T_NONE;
  21. } void init(Host &h, TYPE tp, unsigned int tim) {
  22. init(); host = h; type = tp;
  23. if (tim) time = tim; else time = sys->getTime();
  24. } static const char *getTypeStr(TYPE); static TYPE getTypeFromStr(const char *);
  25. TYPE type; Host host; unsigned int time; }; // ---------------------------------- class ServFilter  { public: enum  { F_PRIVATE  = 0x01, F_BAN    = 0x02, F_NETWORK  = 0x04, F_DIRECT   = 0x08 }; ServFilter() {init();} void init() { flags = 0; host.init(); }
  26. bool writeVariable(Stream &, const String &);
  27. Host host; unsigned int flags; }; // ---------------------------------- // ServMgr keeps track of Servents class ServMgr { public: enum NOTIFY_TYPE { NT_UPGRADE = 0x0001, NT_PEERCAST = 0x0002, NT_BROADCASTERS = 0x0004, NT_TRACKINFO = 0x0008 }; enum FW_STATE { FW_OFF, FW_ON, FW_UNKNOWN }; enum { MAX_HOSTCACHE = 100, // max. amount of hosts in cache MIN_HOSTS = 3, // min. amount of hosts that should be kept in cache MAX_OUTGOING = 3, // max. number of outgoing servents to use MAX_INCOMING = 6,     // max. number of public incoming servents to use MAX_TRYOUT   = 10, // max. number of outgoing servents to try connect MIN_CONNECTED = 3, // min. amount of connected hosts that should be kept
  28. MIN_RELAYS = 2,
  29. MAX_FILTERS = 50, MAX_VERSIONS = 16, MAX_PREVIEWTIME = 300, // max. seconds preview per channel available (direct connections) MAX_PREVIEWWAIT = 300, // max. seconds wait between previews  }; enum AUTH_TYPE { AUTH_COOKIE, AUTH_HTTPBASIC }; ServMgr(); bool start(); Servent *findServent(unsigned int,unsigned short,GnuID &); Servent *findServent(Servent::TYPE); Servent *findServent(Servent::TYPE,Host &,GnuID &); Servent *findOldestServent(Servent::TYPE,bool); Servent *findServentByIndex(int); bool writeVariable(Stream &, const String &); Servent *allocServent(); unsigned int numUsed(int);
  30. unsigned int numStreams(GnuID &, Servent::TYPE,bool);
  31. unsigned int numStreams(Servent::TYPE,bool);
  32. unsigned int numConnected(int,bool,unsigned int); unsigned int numConnected(int t,int tim = 0) { return numConnected(t,false,tim)+numConnected(t,true,tim); }
  33. unsigned int numConnected();
  34. unsigned int numServents();
  35. unsigned int totalConnected() { //return numConnected(Servent::T_OUTGOING) + numConnected(Servent::T_INCOMING); return numConnected();
  36. } unsigned int numOutgoing(); bool isFiltered(int,Host &h); bool addOutgoing(Host,GnuID &,bool);
  37. Servent *findConnection(Servent::TYPE,GnuID &); static THREAD_PROC serverProc(ThreadInfo *); static THREAD_PROC clientProc(ThreadInfo *); static THREAD_PROC trackerProc(ThreadInfo *);
  38. static THREAD_PROC idleProc(ThreadInfo *); int broadcast(GnuPacket &,Servent * = NULL); int route(GnuPacket &, GnuID &, Servent * = NULL); XML::Node *createServentXML();
  39. void connectBroadcaster();
  40. void procConnectArgs(char *,ChanInfo &);
  41. void quit();
  42. void closeConnections(Servent::TYPE);
  43. void checkFirewall();
  44. // host cache
  45. void addHost(Host &,ServHost::TYPE,unsigned int); int getNewestServents(Host *,int, Host &); ServHost getOutgoingServent(GnuID &); void deadHost(Host &,ServHost::TYPE); unsigned int numHosts(ServHost::TYPE); void clearHostCache(ServHost::TYPE); bool seenHost(Host &,ServHost::TYPE,unsigned int);
  46. void setMaxRelays(int); void setFirewall(FW_STATE);
  47. bool checkForceIP(); FW_STATE getFirewall() {return firewalled;} void saveSettings(const char *); void loadSettings(const char *); void setPassiveSearch(unsigned int); int findChannel(ChanInfo &);
  48. bool getChannel(char *,ChanInfo &,bool); void setFilterDefaults();
  49. bool acceptGIV(ClientSocket *); void addVersion(unsigned int);
  50. void broadcastRootSettings(bool);
  51. int broadcastPushRequest(ChanHit &, Host &, GnuID &, Servent::TYPE);
  52. void writeRootAtoms(AtomStream &,bool);
  53. int broadcastPacket(ChanPacket &,GnuID &,GnuID &,GnuID &,Servent::TYPE type);
  54. void addValidBCID(BCID *);
  55. void removeValidBCID(GnuID &);
  56. BCID *findValidBCID(GnuID &);
  57. BCID *findValidBCID(int);
  58. unsigned int getUptime() { return sys->getTime()-startTime; } bool seenPacket(GnuPacket &); bool needHosts() {
  59. return false; //return numHosts(ServHost::T_SERVENT) < maxTryout; }
  60. unsigned int numActiveOnPort(int); unsigned int numActive(Servent::TYPE);
  61. bool needConnections()  { return numConnected(Servent::T_PGNU,60) < minGnuIncoming;
  62. } bool tryFull()  {
  63. return false; //return maxTryout ? numUsed(Servent::T_OUTGOING) > maxTryout: false; } bool pubInOver()  { return numConnected(Servent::T_PGNU) > maxGnuIncoming;
  64. // return maxIncoming ? numConnected(Servent::T_INCOMING,false) > maxIncoming : false; } bool pubInFull()  { return numConnected(Servent::T_PGNU) >= maxGnuIncoming;
  65. // return maxIncoming ? numConnected(Servent::T_INCOMING,false) >= maxIncoming : false; } bool outUsedFull()  { return false;
  66. // return maxOutgoing ? numUsed(Servent::T_OUTGOING) >= maxOutgoing: false; } bool outOver()  { return false;
  67. // return maxOutgoing ? numConnected(Servent::T_OUTGOING) > maxOutgoing : false; }
  68. bool controlInFull()
  69. {
  70. return numConnected(Servent::T_CIN)>=maxControl;
  71. }
  72. bool outFull()  { return false;
  73. // return maxOutgoing ? numConnected(Servent::T_OUTGOING) >= maxOutgoing : false; } bool relaysFull()  { return numStreams(Servent::T_RELAY,false) >= maxRelays; } bool directFull() 
  74. {
  75. return numStreams(Servent::T_DIRECT,false) >= maxDirect;
  76. }
  77. bool bitrateFull(unsigned int br)  { return maxBitrateOut ? (BYTES_TO_KBPS(totalOutput(false))+br) > maxBitrateOut  : false; } unsigned int totalOutput(bool);
  78. static ThreadInfo serverThread,idleThread;
  79. Servent *servents; WLock lock; ServHost hostCache[MAX_HOSTCACHE]; char password[64]; bool allowGnutella;
  80. unsigned int maxBitrateOut,maxControl,maxRelays,maxDirect;
  81. unsigned int minGnuIncoming,maxGnuIncoming;
  82. unsigned int maxServIn;
  83. bool isDisabled; bool isRoot; int totalStreams; Host serverHost;
  84. String  rootHost; char downloadURL[128]; String rootMsg; String forceIP; char connectHost[128]; GnuID networkID; unsigned int firewallTimeout; int showLog; int shutdownTimer; bool pauseLog; bool forceNormal; bool useFlowControl;
  85. unsigned int lastIncoming; bool restartServer; bool allowDirect; bool autoConnect,autoServe,forceLookup; int queryTTL; unsigned int allowServer1,allowServer2; unsigned int startTime; unsigned int tryoutDelay; unsigned int refreshHTML; unsigned int relayBroadcast;
  86. unsigned int notifyMask; BCID *validBCID;
  87. GnuID sessionID; ServFilter filters[MAX_FILTERS]; int numFilters;
  88. CookieList cookieList; AUTH_TYPE authType;
  89. char htmlPath[128]; unsigned int clientVersions[MAX_VERSIONS],clientCounts[MAX_VERSIONS]; int numVersions; int serventNum; String chanLog; private: FW_STATE firewalled; }; // ---------------------------------- extern ServMgr *servMgr; #endif