477 |
server_msgq_add_msg (t_irc_server *server, char *msg) |
server_msgq_add_msg (t_irc_server *server, char *msg) |
478 |
{ |
{ |
479 |
t_irc_message *message; |
t_irc_message *message; |
480 |
|
|
481 |
|
if (!server->unterminated_message && !msg[0]) |
482 |
|
return; |
483 |
|
|
484 |
message = (t_irc_message *) malloc (sizeof (t_irc_message)); |
message = (t_irc_message *) malloc (sizeof (t_irc_message)); |
485 |
if (!message) |
if (!message) |
486 |
{ |
{ |
533 |
void |
void |
534 |
server_msgq_add_unterminated (t_irc_server *server, char *string) |
server_msgq_add_unterminated (t_irc_server *server, char *string) |
535 |
{ |
{ |
536 |
|
if (!string[0]) |
537 |
|
return; |
538 |
|
|
539 |
if (server->unterminated_message) |
if (server->unterminated_message) |
540 |
{ |
{ |
541 |
server->unterminated_message = |
server->unterminated_message = |
572 |
void |
void |
573 |
server_msgq_add_buffer (t_irc_server *server, char *buffer) |
server_msgq_add_buffer (t_irc_server *server, char *buffer) |
574 |
{ |
{ |
575 |
char *pos; |
char *pos_cr, *pos_lf; |
576 |
|
|
577 |
while (buffer[0]) |
while (buffer[0]) |
578 |
{ |
{ |
579 |
pos = strstr (buffer, "\r\n"); |
pos_cr = strchr (buffer, '\r'); |
580 |
if (pos) |
pos_lf = strchr (buffer, '\n'); |
581 |
{ |
|
582 |
pos[0] = '\0'; |
if (!pos_cr && !pos_lf) |
583 |
server_msgq_add_msg (server, buffer); |
{ |
584 |
buffer = pos + 2; |
/* no CR/LF found => add to unterminated and return */ |
585 |
|
server_msgq_add_unterminated (server, buffer); |
586 |
|
return; |
587 |
|
} |
588 |
|
|
589 |
|
if (pos_cr && ((!pos_lf) || (pos_lf > pos_cr))) |
590 |
|
{ |
591 |
|
/* found '\r' first => ignore this char */ |
592 |
|
pos_cr[0] = '\0'; |
593 |
|
server_msgq_add_unterminated (server, buffer); |
594 |
|
buffer = pos_cr + 1; |
595 |
} |
} |
596 |
else |
else |
597 |
{ |
{ |
598 |
pos = strstr (buffer, "\r"); |
/* found: '\n' first => terminate message */ |
599 |
if (pos && !pos[1]) |
pos_lf[0] = '\0'; |
600 |
{ |
server_msgq_add_msg (server, buffer); |
601 |
pos[0] = '\0'; |
buffer = pos_lf + 1; |
|
server_msgq_add_unterminated (server, buffer); |
|
|
return; |
|
|
} |
|
|
else |
|
|
{ |
|
|
pos = strstr (buffer, "\n"); |
|
|
if (pos) |
|
|
{ |
|
|
pos[0] = '\0'; |
|
|
server_msgq_add_msg (server, buffer); |
|
|
buffer = pos + 1; |
|
|
} |
|
|
else |
|
|
{ |
|
|
server_msgq_add_unterminated (server, buffer); |
|
|
return; |
|
|
} |
|
|
} |
|
602 |
} |
} |
603 |
} |
} |
604 |
} |
} |
628 |
while (ptr_data[0] == ' ') |
while (ptr_data[0] == ' ') |
629 |
ptr_data++; |
ptr_data++; |
630 |
|
|
631 |
if (ptr_data) |
if (ptr_data && ptr_data[0]) |
632 |
{ |
{ |
633 |
#ifdef DEBUG |
#ifdef DEBUG |
634 |
gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data); |
gui_printf (NULL, "[DEBUG] data received from server: %s\n", ptr_data); |
648 |
else |
else |
649 |
pos = ptr_data; |
pos = ptr_data; |
650 |
|
|
651 |
if (pos != NULL) |
if (pos && pos[0]) |
652 |
{ |
{ |
653 |
while (pos[0] == ' ') |
while (pos[0] == ' ') |
654 |
pos++; |
pos++; |
655 |
pos2 = strchr (pos, ' '); |
pos2 = strchr (pos, ' '); |
656 |
if (pos2 != NULL) |
if (pos2) |
657 |
{ |
{ |
658 |
pos2[0] = '\0'; |
pos2[0] = '\0'; |
659 |
command = strdup (pos); |
command = strdup (pos); |