00036 strcpy(<a class="code" href="classuserrec.html#o2">dhost</a>,<span class="stringliteral">""</span>);
00037 strcpy(<a class="code" href="classuserrec.html#o3">fullname</a>,<span class="stringliteral">""</span>);
00038 strcpy(<a class="code" href="classuserrec.html#o4">modes</a>,<span class="stringliteral">""</span>);
-00039 strcpy(<a class="code" href="classconnection.html#o3">inbuf</a>,<span class="stringliteral">""</span>);
-00040 strcpy(<a class="code" href="classuserrec.html#o6">server</a>,<span class="stringliteral">""</span>);
-00041 strcpy(<a class="code" href="classuserrec.html#o7">awaymsg</a>,<span class="stringliteral">""</span>);
-00042 strcpy(<a class="code" href="classuserrec.html#o11">oper</a>,<span class="stringliteral">""</span>);
-00043 <a class="code" href="classuserrec.html#o17">reset_due</a> = <a class="code" href="channels_8cpp.html#a37">TIME</a>;
-00044 <a class="code" href="classuserrec.html#o16">lines_in</a> = 0;
-00045 <a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="classconnection.html#o12">lastping</a> = <a class="code" href="classconnection.html#o13">signon</a> = <a class="code" href="classconnection.html#o14">idle_lastmsg</a> = <a class="code" href="classconnection.html#o15">nping</a> = <a class="code" href="classconnection.html#o10">registered</a> = 0;
-00046 <a class="code" href="classuserrec.html#o9">flood</a> = <a class="code" href="classconnection.html#o9">port</a> = <a class="code" href="classconnection.html#o4">bytes_in</a> = <a class="code" href="classconnection.html#o5">bytes_out</a> = <a class="code" href="classconnection.html#o6">cmds_in</a> = <a class="code" href="classconnection.html#o7">cmds_out</a> = 0;
-00047 <a class="code" href="classconnection.html#o8">haspassed</a> = <span class="keyword">false</span>;
-00048 <a class="code" href="classuserrec.html#o12">dns_done</a> = <span class="keyword">false</span>;
-00049 <a class="code" href="classuserrec.html#o15">recvq</a> = <span class="stringliteral">""</span>;
+00039 strcpy(<a class="code" href="classuserrec.html#o6">server</a>,<span class="stringliteral">""</span>);
+00040 strcpy(<a class="code" href="classuserrec.html#o7">awaymsg</a>,<span class="stringliteral">""</span>);
+00041 strcpy(<a class="code" href="classuserrec.html#o11">oper</a>,<span class="stringliteral">""</span>);
+00042 <a class="code" href="classuserrec.html#o18">reset_due</a> = <a class="code" href="channels_8cpp.html#a37">TIME</a>;
+00043 <a class="code" href="classuserrec.html#o17">lines_in</a> = 0;
+00044 <a class="code" href="classconnection.html#o0">fd</a> = <a class="code" href="classconnection.html#o10">lastping</a> = <a class="code" href="classconnection.html#o11">signon</a> = <a class="code" href="classconnection.html#o12">idle_lastmsg</a> = <a class="code" href="classconnection.html#o13">nping</a> = <a class="code" href="classconnection.html#o9">registered</a> = 0;
+00045 <a class="code" href="classuserrec.html#o9">flood</a> = <a class="code" href="classconnection.html#o8">port</a> = <a class="code" href="classconnection.html#o3">bytes_in</a> = <a class="code" href="classconnection.html#o4">bytes_out</a> = <a class="code" href="classconnection.html#o5">cmds_in</a> = <a class="code" href="classconnection.html#o6">cmds_out</a> = 0;
+00046 <a class="code" href="classconnection.html#o7">haspassed</a> = <span class="keyword">false</span>;
+00047 <a class="code" href="classuserrec.html#o12">dns_done</a> = <span class="keyword">false</span>;
+00048 <a class="code" href="classuserrec.html#o15">recvq</a> = <span class="stringliteral">""</span>;
+00049 <a class="code" href="classuserrec.html#o16">sendq</a> = <span class="stringliteral">""</span>;
00050 strcpy(<a class="code" href="classuserrec.html#o8">result</a>,<span class="stringliteral">""</span>);
00051 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < MAXCHANS; i++)
00052 {
00182 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a>[i++] == <span class="charliteral">'\n'</span>)
00183 <span class="keywordflow">break</span>;
00184 }
-00185 <span class="comment">// return false if we've had more than 600 characters WITHOUT</span>
-00186 <span class="comment">// a carriage return (this is BAD, drop the socket)</span>
-00187 <span class="keywordflow">return</span> (i < 600);
-00188 }
-00189
-<a name="l00190"></a><a class="code" href="classuserrec.html#a9">00190</a> <span class="keywordtype">bool</span> <a class="code" href="classuserrec.html#a9">userrec::BufferIsReady</a>()
-00191 {
-00192 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="classuserrec.html#o15">recvq</a>.length(); i++)
-00193 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a>[i] == <span class="charliteral">'\n'</span>)
-00194 <span class="keywordflow">return</span> <span class="keyword">true</span>;
-00195 <span class="keywordflow">return</span> <span class="keyword">false</span>;
-00196 }
-00197
-<a name="l00198"></a><a class="code" href="classuserrec.html#a10">00198</a> <span class="keywordtype">void</span> <a class="code" href="classuserrec.html#a10">userrec::ClearBuffer</a>()
-00199 {
-00200 <a class="code" href="classuserrec.html#o15">recvq</a> = <span class="stringliteral">""</span>;
+00185 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a>.length() > this-><a class="code" href="classuserrec.html#o22">recvqmax</a>)
+00186 {
+00187 this-><a class="code" href="classuserrec.html#a12">SetWriteError</a>(<span class="stringliteral">"RecvQ exceeded"</span>);
+00188 WriteOpers(<span class="stringliteral">"*** User %s RecvQ of %d exceeds connect class maximum of %d"</span>,this->nick,<a class="code" href="classuserrec.html#o15">recvq</a>.length(),this-><a class="code" href="classuserrec.html#o22">recvqmax</a>);
+00189 }
+00190 <span class="comment">// return false if we've had more than 600 characters WITHOUT</span>
+00191 <span class="comment">// a carriage return (this is BAD, drop the socket)</span>
+00192 <span class="keywordflow">return</span> (i < 600);
+00193 }
+00194
+<a name="l00195"></a><a class="code" href="classuserrec.html#a9">00195</a> <span class="keywordtype">bool</span> <a class="code" href="classuserrec.html#a9">userrec::BufferIsReady</a>()
+00196 {
+00197 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="classuserrec.html#o15">recvq</a>.length(); i++)
+00198 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a>[i] == <span class="charliteral">'\n'</span>)
+00199 <span class="keywordflow">return</span> <span class="keyword">true</span>;
+00200 <span class="keywordflow">return</span> <span class="keyword">false</span>;
00201 }
00202
-<a name="l00203"></a><a class="code" href="classuserrec.html#a11">00203</a> std::string <a class="code" href="classuserrec.html#a11">userrec::GetBuffer</a>()
+<a name="l00203"></a><a class="code" href="classuserrec.html#a10">00203</a> <span class="keywordtype">void</span> <a class="code" href="classuserrec.html#a10">userrec::ClearBuffer</a>()
00204 {
-00205 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a> == <span class="stringliteral">""</span>)
-00206 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
-00207 <span class="keywordtype">char</span>* line = (<span class="keywordtype">char</span>*)<a class="code" href="classuserrec.html#o15">recvq</a>.c_str();
-00208 std::string ret = <span class="stringliteral">""</span>;
-00209 <span class="keywordflow">while</span> ((*line != <span class="charliteral">'\n'</span>) && (strlen(line)))
-00210 {
-00211 ret = ret + *line;
-00212 line++;
-00213 }
-00214 <span class="keywordflow">if</span> ((*line == <span class="charliteral">'\n'</span>) || (*line == <span class="charliteral">'\r'</span>))
-00215 line++;
-00216 <a class="code" href="classuserrec.html#o15">recvq</a> = line;
-00217 <span class="keywordflow">return</span> ret;
-00218 }
-00219
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sat May 7 15:34:21 2005 for InspIRCd by
+00205 <a class="code" href="classuserrec.html#o15">recvq</a> = <span class="stringliteral">""</span>;
+00206 }
+00207
+<a name="l00208"></a><a class="code" href="classuserrec.html#a11">00208</a> std::string <a class="code" href="classuserrec.html#a11">userrec::GetBuffer</a>()
+00209 {
+00210 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o15">recvq</a> == <span class="stringliteral">""</span>)
+00211 <span class="keywordflow">return</span> <span class="stringliteral">""</span>;
+00212 <span class="keywordtype">char</span>* line = (<span class="keywordtype">char</span>*)<a class="code" href="classuserrec.html#o15">recvq</a>.c_str();
+00213 std::string ret = <span class="stringliteral">""</span>;
+00214 <span class="keywordflow">while</span> ((*line != <span class="charliteral">'\n'</span>) && (strlen(line)))
+00215 {
+00216 ret = ret + *line;
+00217 line++;
+00218 }
+00219 <span class="keywordflow">if</span> ((*line == <span class="charliteral">'\n'</span>) || (*line == <span class="charliteral">'\r'</span>))
+00220 line++;
+00221 <a class="code" href="classuserrec.html#o15">recvq</a> = line;
+00222 <span class="keywordflow">return</span> ret;
+00223 }
+00224
+<a name="l00225"></a><a class="code" href="classuserrec.html#a14">00225</a> <span class="keywordtype">void</span> <a class="code" href="classuserrec.html#a14">userrec::AddWriteBuf</a>(std::string data)
+00226 {
+00227 <span class="keywordflow">if</span> (this-><a class="code" href="classuserrec.html#a13">GetWriteError</a>() != <span class="stringliteral">""</span>)
+00228 <span class="keywordflow">return</span>;
+00229 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o16">sendq</a>.length() + data.length() > this-><a class="code" href="classuserrec.html#o21">sendqmax</a>)
+00230 {
+00231 WriteOpers(<span class="stringliteral">"*** User %s SendQ of %d exceeds connect class maximum of %d"</span>,this->nick,<a class="code" href="classuserrec.html#o16">sendq</a>.length() + data.length(),this-><a class="code" href="classuserrec.html#o21">sendqmax</a>);
+00232 this-><a class="code" href="classuserrec.html#a12">SetWriteError</a>(<span class="stringliteral">"SendQ exceeded"</span>);
+00233 <span class="keywordflow">return</span>;
+00234 }
+00235 std::stringstream stream;
+00236 stream << <a class="code" href="classuserrec.html#o16">sendq</a> << data;
+00237 <a class="code" href="classuserrec.html#o16">sendq</a> = stream.str();
+00238 }
+00239
+00240 <span class="comment">// send AS MUCH OF THE USERS SENDQ as we are able to (might not be all of it)</span>
+<a name="l00241"></a><a class="code" href="classuserrec.html#a15">00241</a> <span class="keywordtype">void</span> <a class="code" href="classuserrec.html#a15">userrec::FlushWriteBuf</a>()
+00242 {
+00243 <span class="keywordflow">if</span> (<a class="code" href="classuserrec.html#o16">sendq</a>.length())
+00244 {
+00245 <span class="keywordtype">char</span>* tb = (<span class="keywordtype">char</span>*)this-><a class="code" href="classuserrec.html#o16">sendq</a>.c_str();
+00246 <span class="keywordtype">int</span> n_sent = write(this->fd,tb,this->sendq.length());
+00247 <span class="keywordflow">if</span> (n_sent == -1)
+00248 {
+00249 this-><a class="code" href="classuserrec.html#a12">SetWriteError</a>(strerror(errno));
+00250 }
+00251 <span class="keywordflow">else</span>
+00252 {
+00253 <span class="comment">// advance the queue</span>
+00254 tb += n_sent;
+00255 this-><a class="code" href="classuserrec.html#o16">sendq</a> = tb;
+00256 <span class="comment">// update the user's stats counters</span>
+00257 this-><a class="code" href="classconnection.html#o4">bytes_out</a> += n_sent;
+00258 this-><a class="code" href="classconnection.html#o6">cmds_out</a>++;
+00259 }
+00260 }
+00261 }
+00262
+<a name="l00263"></a><a class="code" href="classuserrec.html#a12">00263</a> <span class="keywordtype">void</span> <a class="code" href="classuserrec.html#a12">userrec::SetWriteError</a>(std::string error)
+00264 {
+00265 log(<a class="code" href="modules_8h.html#a0">DEBUG</a>,<span class="stringliteral">"Setting error string for %s to '%s'"</span>,this->nick,error.c_str());
+00266 <span class="comment">// don't try to set the error twice, its already set take the first string.</span>
+00267 <span class="keywordflow">if</span> (this-><a class="code" href="classuserrec.html#o20">WriteError</a> == <span class="stringliteral">""</span>)
+00268 this-><a class="code" href="classuserrec.html#o20">WriteError</a> = error;
+00269 }
+00270
+<a name="l00271"></a><a class="code" href="classuserrec.html#a13">00271</a> std::string <a class="code" href="classuserrec.html#a13">userrec::GetWriteError</a>()
+00272 {
+00273 <span class="keywordflow">return</span> this-><a class="code" href="classuserrec.html#o20">WriteError</a>;
+00274 }
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri May 13 01:58:43 2005 for InspIRCd by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
</a>1.3.3 </small></address>