]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_cloaking.cpp
d355ec6570c6816976a8587164ee7548982bd05a
[user/henk/code/inspircd.git] / src / modules / m_cloaking.cpp
1 #include <stdio.h>
2
3 #include "users.h"
4 #include "channels.h"
5 #include "modules.h"
6
7 /* $ModDesc: Provides masking of user hostnames */
8
9 class ModuleCloaking : public Module
10 {
11  private:
12
13          Server *Srv;
14          
15  public:
16         ModuleCloaking()
17         {
18                 Srv = new Server;
19         }
20         
21         virtual ~ModuleCloaking()
22         {
23                 delete Srv;
24         }
25         
26         virtual Version GetVersion()
27         {
28                 return Version(1,0,0,0);
29         }
30         
31         virtual void OnUserConnect(userrec* user)
32         {
33                 if (strstr(user->dhost,"."))
34                 {
35                         std::string a = strstr(user->dhost,".");
36                         char ra[64];
37                         long seed,s2;
38                         memcpy(&seed,user->dhost,sizeof(long));
39                         memcpy(&s2,a.c_str(),sizeof(long));
40                         sprintf(ra,"%.8X",seed*s2*strlen(user->host));
41                         std::string b = Srv->GetNetworkName() + "-" + ra + a;
42                         Srv->Log(DEBUG,"cloak: allocated "+b);
43                         strcpy(user->dhost,b.c_str());
44                 }
45         }
46
47 };
48
49
50 class ModuleCloakingFactory : public ModuleFactory
51 {
52  public:
53         ModuleCloakingFactory()
54         {
55         }
56         
57         ~ModuleCloakingFactory()
58         {
59         }
60         
61         virtual Module * CreateModule()
62         {
63                 return new ModuleCloaking;
64         }
65         
66 };
67
68
69 extern "C" void * init_module( void )
70 {
71         return new ModuleCloakingFactory;
72 }
73