From bab9f4b4bc0f6aa0e1377745fd216ef9874b3f27 Mon Sep 17 00:00:00 2001 From: brain Date: Fri, 9 Dec 2005 20:21:39 +0000 Subject: Added new module docs git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2301 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/module-doc/users_8cpp-source.html | 561 +++++++++++++++++---------------- 1 file changed, 286 insertions(+), 275 deletions(-) (limited to 'docs/module-doc/users_8cpp-source.html') diff --git a/docs/module-doc/users_8cpp-source.html b/docs/module-doc/users_8cpp-source.html index 78de98822..4254d8509 100644 --- a/docs/module-doc/users_8cpp-source.html +++ b/docs/module-doc/users_8cpp-source.html @@ -31,282 +31,293 @@ 00022 #include "users.h" 00023 #include "inspircd.h" 00024 #include <stdio.h> -00025 #include "inspstring.h" -00026 #include "helperfuncs.h" -00027 -00028 extern std::stringstream config_f; -00029 extern char ServerName[MAXBUF]; -00030 -00031 extern time_t TIME; +00025 #ifdef THREADED_DNS +00026 #include <pthread.h> +00027 #include <signal.h> +00028 #endif +00029 #include "inspstring.h" +00030 #include "commands.h" +00031 #include "helperfuncs.h" 00032 -00033 userrec::userrec() -00034 { -00035 // the PROPER way to do it, AVOID bzero at *ALL* costs -00036 strcpy(nick,""); -00037 strcpy(ip,"127.0.0.1"); -00038 timeout = 0; -00039 strcpy(ident,""); -00040 strcpy(host,""); -00041 strcpy(dhost,""); -00042 strcpy(fullname,""); -00043 strcpy(modes,""); -00044 server = (char*)FindServerNamePtr(ServerName); -00045 strcpy(awaymsg,""); -00046 strcpy(oper,""); -00047 reset_due = TIME; -00048 lines_in = 0; -00049 fd = lastping = signon = idle_lastmsg = nping = registered = 0; -00050 flood = port = bytes_in = bytes_out = cmds_in = cmds_out = 0; -00051 haspassed = false; -00052 dns_done = false; -00053 recvq = ""; -00054 sendq = ""; -00055 for (int i = 0; i < MAXCHANS; i++) -00056 { -00057 this->chans[i].channel = NULL; -00058 this->chans[i].uc_modes = 0; -00059 } -00060 invites.clear(); -00061 } -00062 -00063 void userrec::CloseSocket() -00064 { -00065 shutdown(this->fd,2); -00066 close(this->fd); -00067 } -00068 -00069 char* userrec::GetFullHost() -00070 { -00071 static char result[MAXBUF]; -00072 snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,dhost); -00073 return result; -00074 } -00075 -00076 int userrec::ReadData(void* buffer, size_t size) -00077 { -00078 if (this->fd > -1) -00079 { -00080 log(DEBUG,"userrec::ReadData on fd %d",this->fd); -00081 return read(this->fd, buffer, size); -00082 } -00083 else return 0; -00084 } -00085 -00086 -00087 char* userrec::GetFullRealHost() -00088 { -00089 static char fresult[MAXBUF]; -00090 snprintf(fresult,MAXBUF,"%s!%s@%s",nick,ident,host); -00091 return fresult; -00092 } -00093 -00094 bool userrec::IsInvited(char* channel) -00095 { -00096 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) -00097 { -00098 if (i->channel) { -00099 if (!strcasecmp(i->channel,channel)) -00100 { -00101 return true; -00102 } -00103 } -00104 } -00105 return false; -00106 } -00107 -00108 InvitedList* userrec::GetInviteList() -00109 { -00110 return &invites; -00111 } -00112 -00113 void userrec::InviteTo(char* channel) -00114 { -00115 Invited i; -00116 strlcpy(i.channel,channel,CHANMAX); -00117 invites.push_back(i); -00118 } -00119 -00120 void userrec::RemoveInvite(char* channel) -00121 { -00122 log(DEBUG,"Removing invites"); -00123 if (channel) -00124 { -00125 if (invites.size()) -00126 { -00127 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) -00128 { -00129 if (i->channel) -00130 { -00131 if (!strcasecmp(i->channel,channel)) -00132 { -00133 invites.erase(i); -00134 return; -00135 } -00136 } -00137 } -00138 } -00139 } -00140 } -00141 -00142 bool userrec::HasPermission(char* command) -00143 { -00144 char TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF]; -00145 char* mycmd; -00146 char* savept; -00147 char* savept2; -00148 -00149 // are they even an oper at all? -00150 if (strchr(this->modes,'o')) -00151 { -00152 log(DEBUG,"*** HasPermission: %s is an oper",this->nick); -00153 for (int j =0; j < ConfValueEnum("type",&config_f); j++) -00154 { -00155 ConfValue("type","name",j,TypeName,&config_f); -00156 if (!strcmp(TypeName,this->oper)) -00157 { -00158 log(DEBUG,"*** HasPermission: %s is an oper of type '%s'",this->nick,this->oper); -00159 ConfValue("type","classes",j,Classes,&config_f); -00160 char* myclass = strtok_r(Classes," ",&savept); -00161 while (myclass) -00162 { -00163 log(DEBUG,"*** HasPermission: checking classtype '%s'",myclass); -00164 for (int k =0; k < ConfValueEnum("class",&config_f); k++) -00165 { -00166 ConfValue("class","name",k,ClassName,&config_f); -00167 if (!strcmp(ClassName,myclass)) -00168 { -00169 ConfValue("class","commands",k,CommandList,&config_f); -00170 log(DEBUG,"*** HasPermission: found class named %s with commands: '%s'",ClassName,CommandList); -00171 -00172 -00173 mycmd = strtok_r(CommandList," ",&savept2); -00174 while (mycmd) -00175 { -00176 if (!strcasecmp(mycmd,command)) -00177 { -00178 log(DEBUG,"*** Command %s found, returning true",command); -00179 return true; -00180 } -00181 mycmd = strtok_r(NULL," ",&savept2); -00182 } -00183 } -00184 } -00185 myclass = strtok_r(NULL," ",&savept); -00186 } -00187 } -00188 } -00189 } -00190 return false; -00191 } -00192 -00193 -00194 bool userrec::AddBuffer(std::string a) -00195 { -00196 std::string b = ""; -00197 for (unsigned int i = 0; i < a.length(); i++) -00198 if ((a[i] != '\r') && (a[i] != '\0') && (a[i] != 7)) -00199 b = b + a[i]; -00200 std::stringstream stream(recvq); -00201 stream << b; -00202 recvq = stream.str(); -00203 unsigned int i = 0; -00204 // count the size of the first line in the buffer. -00205 while (i < recvq.length()) -00206 { -00207 if (recvq[i++] == '\n') -00208 break; -00209 } -00210 if (recvq.length() > (unsigned)this->recvqmax) -00211 { -00212 this->SetWriteError("RecvQ exceeded"); -00213 WriteOpers("*** User %s RecvQ of %d exceeds connect class maximum of %d",this->nick,recvq.length(),this->recvqmax); -00214 } -00215 // return false if we've had more than 600 characters WITHOUT -00216 // a carriage return (this is BAD, drop the socket) -00217 return (i < 600); -00218 } -00219 -00220 bool userrec::BufferIsReady() -00221 { -00222 for (unsigned int i = 0; i < recvq.length(); i++) -00223 if (recvq[i] == '\n') -00224 return true; -00225 return false; -00226 } -00227 -00228 void userrec::ClearBuffer() -00229 { -00230 recvq = ""; -00231 } -00232 -00233 std::string userrec::GetBuffer() -00234 { -00235 if (recvq == "") -00236 return ""; -00237 char* line = (char*)recvq.c_str(); -00238 std::string ret = ""; -00239 while ((*line != '\n') && (strlen(line))) -00240 { -00241 ret = ret + *line; -00242 line++; -00243 } -00244 if ((*line == '\n') || (*line == '\r')) -00245 line++; -00246 recvq = line; -00247 return ret; -00248 } -00249 -00250 void userrec::AddWriteBuf(std::string data) -00251 { -00252 if (this->GetWriteError() != "") -00253 return; -00254 if (sendq.length() + data.length() > (unsigned)this->sendqmax) -00255 { -00256 WriteOpers("*** User %s SendQ of %d exceeds connect class maximum of %d",this->nick,sendq.length() + data.length(),this->sendqmax); -00257 this->SetWriteError("SendQ exceeded"); -00258 return; -00259 } -00260 std::stringstream stream; -00261 stream << sendq << data; -00262 sendq = stream.str(); -00263 } -00264 -00265 // send AS MUCH OF THE USERS SENDQ as we are able to (might not be all of it) -00266 void userrec::FlushWriteBuf() -00267 { -00268 if (sendq.length()) -00269 { -00270 char* tb = (char*)this->sendq.c_str(); -00271 int n_sent = write(this->fd,tb,this->sendq.length()); -00272 if (n_sent == -1) -00273 { -00274 this->SetWriteError(strerror(errno)); -00275 } -00276 else -00277 { -00278 // advance the queue -00279 tb += n_sent; -00280 this->sendq = tb; -00281 // update the user's stats counters -00282 this->bytes_out += n_sent; -00283 this->cmds_out++; -00284 } -00285 } -00286 } -00287 -00288 void userrec::SetWriteError(std::string error) -00289 { -00290 log(DEBUG,"Setting error string for %s to '%s'",this->nick,error.c_str()); -00291 // don't try to set the error twice, its already set take the first string. -00292 if (this->WriteError == "") -00293 this->WriteError = error; -00294 } -00295 -00296 std::string userrec::GetWriteError() -00297 { -00298 return this->WriteError; -00299 } -
1.4.4-20050815