From 88dd74fc84b574f17673338c6d42123570f464da Mon Sep 17 00:00:00 2001 From: brain Date: Thu, 12 May 2005 23:06:51 +0000 Subject: Added docs for new smaller memory footprint classes git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1371 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/module-doc/users_8cpp-source.html | 467 ++++++++++++++++----------------- 1 file changed, 233 insertions(+), 234 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 5a5d09547..b17e945a7 100644 --- a/docs/module-doc/users_8cpp-source.html +++ b/docs/module-doc/users_8cpp-source.html @@ -43,244 +43,243 @@ 00036 strcpy(dhost,""); 00037 strcpy(fullname,""); 00038 strcpy(modes,""); -00039 strcpy(inbuf,""); -00040 strcpy(server,""); -00041 strcpy(awaymsg,""); -00042 strcpy(oper,""); -00043 reset_due = TIME; -00044 lines_in = 0; -00045 fd = lastping = signon = idle_lastmsg = nping = registered = 0; -00046 flood = port = bytes_in = bytes_out = cmds_in = cmds_out = 0; -00047 haspassed = false; -00048 dns_done = false; -00049 recvq = ""; -00050 sendq = ""; -00051 strcpy(result,""); -00052 for (int i = 0; i < MAXCHANS; i++) -00053 { -00054 this->chans[i].channel = NULL; -00055 this->chans[i].uc_modes = 0; -00056 } -00057 invites.clear(); -00058 } +00039 strcpy(server,""); +00040 strcpy(awaymsg,""); +00041 strcpy(oper,""); +00042 reset_due = TIME; +00043 lines_in = 0; +00044 fd = lastping = signon = idle_lastmsg = nping = registered = 0; +00045 flood = port = bytes_in = bytes_out = cmds_in = cmds_out = 0; +00046 haspassed = false; +00047 dns_done = false; +00048 recvq = ""; +00049 sendq = ""; +00050 strcpy(result,""); +00051 for (int i = 0; i < MAXCHANS; i++) +00052 { +00053 this->chans[i].channel = NULL; +00054 this->chans[i].uc_modes = 0; +00055 } +00056 invites.clear(); +00057 } +00058 00059 -00060 -00061 -00062 char* userrec::GetFullHost() -00063 { -00064 snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,dhost); -00065 return result; -00066 } +00060 +00061 char* userrec::GetFullHost() +00062 { +00063 snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,dhost); +00064 return result; +00065 } +00066 00067 -00068 -00069 char* userrec::GetFullRealHost() -00070 { -00071 snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,host); -00072 return result; -00073 } -00074 -00075 bool userrec::IsInvited(char* channel) -00076 { -00077 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) -00078 { -00079 if (i->channel) { -00080 if (!strcasecmp(i->channel,channel)) -00081 { -00082 return true; -00083 } -00084 } -00085 } -00086 return false; -00087 } -00088 -00089 void userrec::InviteTo(char* channel) -00090 { -00091 Invited i; -00092 strlcpy(i.channel,channel,CHANMAX); -00093 invites.push_back(i); -00094 } -00095 -00096 void userrec::RemoveInvite(char* channel) -00097 { -00098 log(DEBUG,"Removing invites"); -00099 if (channel) -00100 { -00101 if (invites.size()) -00102 { -00103 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) -00104 { -00105 if (i->channel) -00106 { -00107 if (!strcasecmp(i->channel,channel)) -00108 { -00109 invites.erase(i); -00110 return; -00111 } -00112 } -00113 } -00114 } -00115 } -00116 } -00117 -00118 bool userrec::HasPermission(char* command) -00119 { -00120 char TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF]; -00121 char* mycmd; -00122 char* savept; -00123 char* savept2; -00124 -00125 // are they even an oper at all? -00126 if (strchr(this->modes,'o')) -00127 { -00128 log(DEBUG,"*** HasPermission: %s is an oper",this->nick); -00129 for (int j =0; j < ConfValueEnum("type",&config_f); j++) -00130 { -00131 ConfValue("type","name",j,TypeName,&config_f); -00132 if (!strcmp(TypeName,this->oper)) -00133 { -00134 log(DEBUG,"*** HasPermission: %s is an oper of type '%s'",this->nick,this->oper); -00135 ConfValue("type","classes",j,Classes,&config_f); -00136 char* myclass = strtok_r(Classes," ",&savept); -00137 while (myclass) -00138 { -00139 log(DEBUG,"*** HasPermission: checking classtype '%s'",myclass); -00140 for (int k =0; k < ConfValueEnum("class",&config_f); k++) -00141 { -00142 ConfValue("class","name",k,ClassName,&config_f); -00143 if (!strcmp(ClassName,myclass)) -00144 { -00145 ConfValue("class","commands",k,CommandList,&config_f); -00146 log(DEBUG,"*** HasPermission: found class named %s with commands: '%s'",ClassName,CommandList); +00068 char* userrec::GetFullRealHost() +00069 { +00070 snprintf(result,MAXBUF,"%s!%s@%s",nick,ident,host); +00071 return result; +00072 } +00073 +00074 bool userrec::IsInvited(char* channel) +00075 { +00076 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) +00077 { +00078 if (i->channel) { +00079 if (!strcasecmp(i->channel,channel)) +00080 { +00081 return true; +00082 } +00083 } +00084 } +00085 return false; +00086 } +00087 +00088 void userrec::InviteTo(char* channel) +00089 { +00090 Invited i; +00091 strlcpy(i.channel,channel,CHANMAX); +00092 invites.push_back(i); +00093 } +00094 +00095 void userrec::RemoveInvite(char* channel) +00096 { +00097 log(DEBUG,"Removing invites"); +00098 if (channel) +00099 { +00100 if (invites.size()) +00101 { +00102 for (InvitedList::iterator i = invites.begin(); i != invites.end(); i++) +00103 { +00104 if (i->channel) +00105 { +00106 if (!strcasecmp(i->channel,channel)) +00107 { +00108 invites.erase(i); +00109 return; +00110 } +00111 } +00112 } +00113 } +00114 } +00115 } +00116 +00117 bool userrec::HasPermission(char* command) +00118 { +00119 char TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF]; +00120 char* mycmd; +00121 char* savept; +00122 char* savept2; +00123 +00124 // are they even an oper at all? +00125 if (strchr(this->modes,'o')) +00126 { +00127 log(DEBUG,"*** HasPermission: %s is an oper",this->nick); +00128 for (int j =0; j < ConfValueEnum("type",&config_f); j++) +00129 { +00130 ConfValue("type","name",j,TypeName,&config_f); +00131 if (!strcmp(TypeName,this->oper)) +00132 { +00133 log(DEBUG,"*** HasPermission: %s is an oper of type '%s'",this->nick,this->oper); +00134 ConfValue("type","classes",j,Classes,&config_f); +00135 char* myclass = strtok_r(Classes," ",&savept); +00136 while (myclass) +00137 { +00138 log(DEBUG,"*** HasPermission: checking classtype '%s'",myclass); +00139 for (int k =0; k < ConfValueEnum("class",&config_f); k++) +00140 { +00141 ConfValue("class","name",k,ClassName,&config_f); +00142 if (!strcmp(ClassName,myclass)) +00143 { +00144 ConfValue("class","commands",k,CommandList,&config_f); +00145 log(DEBUG,"*** HasPermission: found class named %s with commands: '%s'",ClassName,CommandList); +00146 00147 -00148 -00149 mycmd = strtok_r(CommandList," ",&savept2); -00150 while (mycmd) -00151 { -00152 if (!strcasecmp(mycmd,command)) -00153 { -00154 log(DEBUG,"*** Command %s found, returning true",command); -00155 return true; -00156 } -00157 mycmd = strtok_r(NULL," ",&savept2); -00158 } -00159 } -00160 } -00161 myclass = strtok_r(NULL," ",&savept); -00162 } -00163 } -00164 } -00165 } -00166 return false; -00167 } +00148 mycmd = strtok_r(CommandList," ",&savept2); +00149 while (mycmd) +00150 { +00151 if (!strcasecmp(mycmd,command)) +00152 { +00153 log(DEBUG,"*** Command %s found, returning true",command); +00154 return true; +00155 } +00156 mycmd = strtok_r(NULL," ",&savept2); +00157 } +00158 } +00159 } +00160 myclass = strtok_r(NULL," ",&savept); +00161 } +00162 } +00163 } +00164 } +00165 return false; +00166 } +00167 00168 -00169 -00170 bool userrec::AddBuffer(std::string a) -00171 { -00172 std::string b = ""; -00173 for (int i = 0; i < a.length(); i++) -00174 if ((a[i] != '\r') && (a[i] != '\0') && (a[i] != 7)) -00175 b = b + a[i]; -00176 std::stringstream stream(recvq); -00177 stream << b; -00178 recvq = stream.str(); -00179 int i = 0; -00180 // count the size of the first line in the buffer. -00181 while (i < recvq.length()) -00182 { -00183 if (recvq[i++] == '\n') -00184 break; -00185 } -00186 if (recvq.length() > this->recvqmax) -00187 { -00188 this->SetWriteError("RecvQ exceeded"); -00189 WriteOpers("*** User %s RecvQ of %d exceeds connect class maximum of %d",this->nick,recvq.length(),this->recvqmax); -00190 } -00191 // return false if we've had more than 600 characters WITHOUT -00192 // a carriage return (this is BAD, drop the socket) -00193 return (i < 600); -00194 } -00195 -00196 bool userrec::BufferIsReady() -00197 { -00198 for (int i = 0; i < recvq.length(); i++) -00199 if (recvq[i] == '\n') -00200 return true; -00201 return false; -00202 } -00203 -00204 void userrec::ClearBuffer() -00205 { -00206 recvq = ""; -00207 } -00208 -00209 std::string userrec::GetBuffer() -00210 { -00211 if (recvq == "") -00212 return ""; -00213 char* line = (char*)recvq.c_str(); -00214 std::string ret = ""; -00215 while ((*line != '\n') && (strlen(line))) -00216 { -00217 ret = ret + *line; -00218 line++; -00219 } -00220 if ((*line == '\n') || (*line == '\r')) -00221 line++; -00222 recvq = line; -00223 return ret; -00224 } -00225 -00226 void userrec::AddWriteBuf(std::string data) -00227 { -00228 if (this->GetWriteError() != "") -00229 return; -00230 if (sendq.length() + data.length() > this->sendqmax) -00231 { -00232 WriteOpers("*** User %s SendQ of %d exceeds connect class maximum of %d",this->nick,sendq.length() + data.length(),this->sendqmax); -00233 this->SetWriteError("SendQ exceeded"); -00234 return; -00235 } -00236 std::stringstream stream; -00237 stream << sendq << data; -00238 sendq = stream.str(); -00239 } -00240 -00241 // send AS MUCH OF THE USERS SENDQ as we are able to (might not be all of it) -00242 void userrec::FlushWriteBuf() -00243 { -00244 if (sendq.length()) -00245 { -00246 char* tb = (char*)this->sendq.c_str(); -00247 int n_sent = write(this->fd,tb,this->sendq.length()); -00248 if (n_sent == -1) -00249 { -00250 this->SetWriteError(strerror(errno)); -00251 } -00252 else -00253 { -00254 // advance the queue -00255 tb += n_sent; -00256 this->sendq = tb; -00257 // update the user's stats counters -00258 this->bytes_out += n_sent; -00259 this->cmds_out++; -00260 } -00261 } -00262 } -00263 -00264 void userrec::SetWriteError(std::string error) -00265 { -00266 log(DEBUG,"Setting error string for %s to '%s'",this->nick,error.c_str()); -00267 // don't try to set the error twice, its already set take the first string. -00268 if (this->WriteError == "") -00269 this->WriteError = error; -00270 } -00271 -00272 std::string userrec::GetWriteError() -00273 { -00274 return this->WriteError; -00275 } -
Generated on Thu May 12 02:25:13 2005 for InspIRCd by +00169 bool userrec::AddBuffer(std::string a) +00170 { +00171 std::string b = ""; +00172 for (int i = 0; i < a.length(); i++) +00173 if ((a[i] != '\r') && (a[i] != '\0') && (a[i] != 7)) +00174 b = b + a[i]; +00175 std::stringstream stream(recvq); +00176 stream << b; +00177 recvq = stream.str(); +00178 int i = 0; +00179 // count the size of the first line in the buffer. +00180 while (i < recvq.length()) +00181 { +00182 if (recvq[i++] == '\n') +00183 break; +00184 } +00185 if (recvq.length() > this->recvqmax) +00186 { +00187 this->SetWriteError("RecvQ exceeded"); +00188 WriteOpers("*** User %s RecvQ of %d exceeds connect class maximum of %d",this->nick,recvq.length(),this->recvqmax); +00189 } +00190 // return false if we've had more than 600 characters WITHOUT +00191 // a carriage return (this is BAD, drop the socket) +00192 return (i < 600); +00193 } +00194 +00195 bool userrec::BufferIsReady() +00196 { +00197 for (int i = 0; i < recvq.length(); i++) +00198 if (recvq[i] == '\n') +00199 return true; +00200 return false; +00201 } +00202 +00203 void userrec::ClearBuffer() +00204 { +00205 recvq = ""; +00206 } +00207 +00208 std::string userrec::GetBuffer() +00209 { +00210 if (recvq == "") +00211 return ""; +00212 char* line = (char*)recvq.c_str(); +00213 std::string ret = ""; +00214 while ((*line != '\n') && (strlen(line))) +00215 { +00216 ret = ret + *line; +00217 line++; +00218 } +00219 if ((*line == '\n') || (*line == '\r')) +00220 line++; +00221 recvq = line; +00222 return ret; +00223 } +00224 +00225 void userrec::AddWriteBuf(std::string data) +00226 { +00227 if (this->GetWriteError() != "") +00228 return; +00229 if (sendq.length() + data.length() > this->sendqmax) +00230 { +00231 WriteOpers("*** User %s SendQ of %d exceeds connect class maximum of %d",this->nick,sendq.length() + data.length(),this->sendqmax); +00232 this->SetWriteError("SendQ exceeded"); +00233 return; +00234 } +00235 std::stringstream stream; +00236 stream << sendq << data; +00237 sendq = stream.str(); +00238 } +00239 +00240 // send AS MUCH OF THE USERS SENDQ as we are able to (might not be all of it) +00241 void userrec::FlushWriteBuf() +00242 { +00243 if (sendq.length()) +00244 { +00245 char* tb = (char*)this->sendq.c_str(); +00246 int n_sent = write(this->fd,tb,this->sendq.length()); +00247 if (n_sent == -1) +00248 { +00249 this->SetWriteError(strerror(errno)); +00250 } +00251 else +00252 { +00253 // advance the queue +00254 tb += n_sent; +00255 this->sendq = tb; +00256 // update the user's stats counters +00257 this->bytes_out += n_sent; +00258 this->cmds_out++; +00259 } +00260 } +00261 } +00262 +00263 void userrec::SetWriteError(std::string error) +00264 { +00265 log(DEBUG,"Setting error string for %s to '%s'",this->nick,error.c_str()); +00266 // don't try to set the error twice, its already set take the first string. +00267 if (this->WriteError == "") +00268 this->WriteError = error; +00269 } +00270 +00271 std::string userrec::GetWriteError() +00272 { +00273 return this->WriteError; +00274 } +
Generated on Thu May 12 22:58:59 2005 for InspIRCd by doxygen 1.3.3
-- cgit v1.3.1-10-gc9f91