/[LeafOK_CVS]/innwebd/base_passive.cpp
ViewVC logotype

Diff of /innwebd/base_passive.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.1 by sysadm, Sat Jul 3 05:22:23 2004 UTC Revision 1.9 by sysadm, Sat Feb 26 16:10:25 2005 UTC
# Line 1  Line 1 
1  /*******************************************************/  /*******************************************************/
2  /*                                                     */  /*                                                     */
3  /*  LeafOK Innd                                        */  /*  LeafOK Innbbsd                                     */
4  /*  Copyright (C) LeafOK.com, 2003-2004                */  /*  Copyright (C) LeafOK.com, 2003-2005                */
5  /*                                                     */  /*                                                     */
6  /*  Programmed by Leaf                                 */  /*  Programmed by Leaf                                 */
7  /*  E-mail:leaf@leafok.com  QQ:6049044                 */  /*  E-mail:leaflet@leafok.com  QQ:6049044              */
8  /*                                                     */  /*                                                     */
9  /*  http://bbs.leafok.com                              */  /*  http://bbs.leafok.com                              */
10  /*  http://bbs.leafok.net                              */  /*  http://bbs.leafok.net                              */
# Line 18  Line 18 
18    
19  using namespace std;  using namespace std;
20    
21  UINT base_passive::uThreadCount = 0;  // UINT base_passive::uThreadCount = 0;
22    
23  base_passive::base_passive(void)  base_passive::base_passive(void)
 : p_ParentThread(NULL)  
24  {  {
25  }  }
26    
# Line 103  int base_passive::work() Line 102  int base_passive::work()
102          if (this->load_priv() != 0)          if (this->load_priv() != 0)
103                  return -1;                  return -1;
104    
105            this->SetThreadPool(new thread_pool(MAX_CLIENT));
106            if (this->p_ThreadPool->GetLastError() != 0)
107            {
108                    return -1;
109            }
110    
111          if (this->s_connect(this->w_address,this->w_port) == 0)          if (this->s_connect(this->w_address,this->w_port) == 0)
112          {          {
113                  this->Startup();                  this->Startup();
# Line 117  int base_passive::work() Line 122  int base_passive::work()
122                                  continue;                                  continue;
123                          }                          }
124                                                    
125                          p->p_ParentThread = this;                          p->SetParentThread(this);
126                          p->configure(this->innd_id,this->innd_name,this->innd_server,this->innd_uid,this->w_address,this->w_port,this->w_conn_str);                          p->configure(this->innd_id,this->innd_name,this->innd_server,this->innd_uid,this->w_address,this->w_port,this->w_conn_str);
127                    
128                          this->running = true;                          this->running = true;
129    
130                            this->GetParentThread()->GetThreadPool()->SetThreadStatus(GetCurrentThreadId(),thread_pool::S_WAITING);
131    
132                          namelen = sizeof(sin);                          namelen = sizeof(sin);
133                          if ((p->s = accept(this->s,(LPSOCKADDR)&sin,&namelen)) == INVALID_SOCKET)                          if ((p->s = accept(this->s,(LPSOCKADDR)&sin,&namelen)) == INVALID_SOCKET)
134                          {                          {
# Line 137  int base_passive::work() Line 144  int base_passive::work()
144                                  break;                                  break;
145                          }                          }
146    
147                            this->GetParentThread()->GetThreadPool()->SetThreadStatus(GetCurrentThreadId(),thread_pool::S_WORKING);
148    
149                          strcpy(p->hostaddr,inet_ntoa(sin.sin_addr));                          strcpy(p->hostaddr,inet_ntoa(sin.sin_addr));
150                          p->port = sin.sin_port;                          p->port = sin.sin_port;
151                          p->isConnected = true;                          p->isConnected = true;
152    
153  //              strcpy(p->w_conn_str,this->w_conn_str);  //              strcpy(p->w_conn_str,this->w_conn_str);
154                          if (this->>get_priv(p)!=0)  
155                          if (this->get_priv(p)!=0)                          if (this->get_priv(p)!=0)
156                          {                          {
157                                  p->s_send("502 Load access file failed.\r\n");                                  p->s_send("502 Load access file failed.\r\n");
# Line 151  int base_passive::work() Line 159  int base_passive::work()
159                                  continue;                                  continue;
160                          }                          }
161    
162                          if (!p->access.get)                          if (!p->check_priv())
163                          {                          {
164                                  p->s_send("502 You are not in my access file.\r\n");                                  p->s_send("502 You are not in my access file.\r\n");
165                                  delete(p);                                  delete(p);
166                                  continue;                                  continue;
167                          }                          }
168                          if (base_passive::uThreadCount < MAX_THREAD)  
169    //                      if (base_passive::uThreadCount < MAX_CLIENT)
170                          if (this->GetThreadPool()->GetThreadCount() < MAX_CLIENT)                          if (this->GetThreadPool()->GetThreadCount() < MAX_CLIENT)
171                          {                          {
172                                  if (hThreadCurrent = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)base_passive::AcceptThread,(LPVOID)p,0,&ulThreadId))                                  if (hThreadCurrent = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)base_passive::AcceptThread,(LPVOID)p,0,&ulThreadId))
173                                          base_passive::uThreadCount++;                                  {
174                                          CloseHandle(hThreadCurrent);                                          CloseHandle(hThreadCurrent);
175                                          syslog << logfile::log_head << "Create accept thread ... OK" << endl;                                          syslog << logfile::log_head << "Create accept thread ... OK" << endl;
176                                  }                                  }
# Line 195  DWORD base_passive::AcceptThread(LPVOID Line 204  DWORD base_passive::AcceptThread(LPVOID
204    
205          try          try
206          {          {
207                    p = (base_passive*)pParam;
208    
209                    p->ulMainThreadId = GetCurrentThreadId();
210    
211                    syslog << logfile::log_head << "Accept connection from " << p->hostaddr
212                            << ":" << p->port << endl;
213    
214                    if (p->GetParentThread()->GetThreadPool()->AddThread(GetCurrentThreadId(), CLOCKS_PER_SEC * 30) != 0)
215                    {
216                            syslog << logfile::log_head << "Register thread ... Failed" << endl;
217                    }
218                    p->GetParentThread()->GetThreadPool()->SetThreadStatus(GetCurrentThreadId(),thread_pool::S_WORKING);
219    
220                  if (p->db_env_init() == 0)                  if (p->db_env_init() == 0)
221                  {                  {
# Line 203  DWORD base_passive::AcceptThread(LPVOID Line 224  DWORD base_passive::AcceptThread(LPVOID
224                  else                  else
225                  {                  {
226                          syslog << logfile::log_head << "DB_ENV_INIT failed" << endl;                          syslog << logfile::log_head << "DB_ENV_INIT failed" << endl;
227                    }
228    
229                    if (p->GetParentThread()->GetThreadPool()->RemoveThread(GetCurrentThreadId()) != 0)
230                    {
231                            syslog << logfile::log_head << "Unregister thread ... Failed" << endl;
232                    }
233    //              base_passive::uThreadCount--;
234    
                 base_passive::uThreadCount--;  
235                  delete(p);                  delete(p);
236                  syslog << logfile::log_head << "Delete accept thread ... OK" << endl;                  syslog << logfile::log_head << "Delete accept thread ... OK" << endl;
237          }          }
# Line 225  int base_passive::get_priv(base_passive* Line 252  int base_passive::get_priv(base_passive*
252                  //Default value                  //Default value
253                  strcpy(p->access.ip,p->hostaddr);                  strcpy(p->access.ip,p->hostaddr);
254                  p->access.control = false;                  p->access.control = false;
255                  p->access.get = true;                  p->access.get = false;
256                  p->access.post = false;                  p->access.post = false;
257                  p->access.ihave = false;                  p->access.ihave = false;
258    
# Line 329  int base_passive::w_call(void) Line 356  int base_passive::w_call(void)
356          this->work();          this->work();
357          return 0;          return 0;
358  }  }
359    
360    bool base_passive::check_priv(void)
361    {
362            return this->access.get;
363    }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1