diff options
Diffstat (limited to 'sock_conn.c')
-rw-r--r-- | sock_conn.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sock_conn.c b/sock_conn.c index 37c8892..42cb3a6 100644 --- a/sock_conn.c +++ b/sock_conn.c @@ -81,10 +81,18 @@ int __irc_buf_drain_io(irc_buf *ib) return 0; } + //BUG + //here is hope that server will send 512/1024 bytes that will be terminated with "\r\n" + //but this could be false hope if someone gona abuse it, buffer will fill up and will + //not be able to give back new lines + //FIX + //just add more logic pal to handle this "special" case + + //lets from in buffer put as much as possible to out buffer i = ib->in_size-1; j = ib->out_size; - //PRINT("in_size=%d out_size=%d\n",ib->in_size, ib->out_size); + PRINT("in_size=%d out_size=%d\n",ib->in_size, ib->out_size); cnt = 0; while ((j<ib->max_out_size)&&(i>=0)) //buffers ar full or empty { @@ -93,7 +101,7 @@ int __irc_buf_drain_io(irc_buf *ib) { if (((ib->buf_out[j-3]=='\r')&&(ib->buf_out[j-2]=='\n')))//bufferunderflow { - //PRINT("READY\n"); + PRINT("READY\n"); ib->ready = 1; //PNL(); break; @@ -105,20 +113,20 @@ int __irc_buf_drain_io(irc_buf *ib) cnt++; } //update - //PRINT("Copied %d bytes\n", cnt); + PRINT("Copied %d bytes\n", cnt); ib->in_size = i+1; //i can end up as -1 ib->out_size = j; // - //PRINT("in_size=%d out_size=%d\n",ib->in_size, ib->out_size); + PRINT("in_size=%d out_size=%d\n",ib->in_size, ib->out_size); //if out buffer full and its doesnt have proper ending if (ib->out_size >= 2) if ((ib->buf_out[ib->out_size-1]=='\n')&&(ib->buf_out[ib->out_size-2]=='\r')) { - //PRINT("READY\n"); + PRINT("READY\n"); ib->ready = 1; return cnt; } - //PRINT("%d\n",cnt); + PRINT("%d\n",cnt); return cnt; } |