string ReadLine (byte [] buffer, int offset, int len, ref int used)
{
if (current_line == null)
current_line = new StringBuilder ();
int last = offset + len;
used = 0;
for (int i = offset; i < last && line_state != LineState.LF; i++) {
used++;
byte b = buffer [i];
if (b == 13) {
line_state = LineState.CR;
} else if (b == 10) {
line_state = LineState.LF;
} else {
current_line.Append ((char) b);
}
}
string result = null;
if (line_state == LineState.LF) {
line_state = LineState.None;
result = current_line.ToString ();
current_line.Length = 0;
}
return result;
}