3 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
35 int setcolor (unsigned char fg
, unsigned char bg
)
41 int proto_command (char *buffer
, unsigned len
)
45 if (buffer
[0] == ':') {
48 if (!strncmp (config
.server
, buffer
+1, config
.server_len
)) {
49 char *str
= strchr (buffer
+2+config
.server_len
, ':');
51 /* servername 353 - user list */
53 printf ("SERVER -> %s\n", str
? str
+1 : "!MESSAGE PARSE ERROR!\n");
58 char *str
= strchr (buffer
+2, '!');
64 char *str2
= strchr (str
+1, ' ');
67 printf ("ERROR -> unknown command from server\n");
72 if (!cstrcmp ("PRIVMSG", str2
+1)) {
73 char *msg
= strchr (str2
+10, ':');
79 /* cut of channel name */
84 //if (!strncmp (str2+9, config.channel, config.channel_len)) {
85 if (strncmp (msg
+1, "ACTION", 6)) {
87 printf ("> %s: %s\n", buffer
+1, msg
);
90 printf ("> ***%s %s\n", buffer
+1, msg
+8);
93 if (strncmp (msg+1, "ACTION", 6)) {
95 printf ("> (%s) %s: %s\n", str2+9, buffer+1, msg);
98 printf ("> (%s) ***%s %s\n", str2+9, buffer+1, msg+8);
104 } else if (!cstrcmp ("QUIT", str2
+1)) {
106 printf ("User %s was disconnected\n", buffer
+1);
115 if (!strncmp (buffer
, "PING", 4))
116 return net_send (pong_msg
, 10+(3*config
.server_len
));
119 printf (">> %s\n", buffer
);
129 while (i
< parser_len
) {
130 if (parser
[i
] == '\n') {
131 proto_command (parser
, i
);
135 //memcpy (parser+parser_len-len+i, buffer, len);
136 if (i
== parser_len
) {
139 //printf ("parser_len == i - NULL\n");
140 //memset (parser, 0, PROTO_BUFSIZE_PARSER);
143 //printf ("parser_len: %d / %d\n", i, parser_len);
159 int proto_handler (char *buffer
, unsigned len
)
161 if (parser_len
> (PROTO_BUFSIZE_PARSER
-len
)) {
162 printf ("ERROR -> receive buffer is full, this cause loss of last packets\n");
167 memcpy (parser
+parser_len
, buffer
, len
);
170 //printf ("proto_handler () - %d\n", len);
177 parser
= (char *) malloc (sizeof (char) * PROTO_BUFSIZE_PARSER
);
187 sprintf (str
, "USER %s blah blah :zexos irc client\nNICK %s\n", config
.nick
, config
.nick
);
189 net_send (str
, strlen (str
));
191 pong_msg
= (char *) malloc (sizeof (char) * (config
.server_len
*3 + 10));
197 memcpy (pong_msg
+1, config
.server
, config
.server_len
);
198 memcpy (pong_msg
+1+config
.server_len
, " PONG ", 6);
199 memcpy (pong_msg
+7+config
.server_len
, config
.server
, config
.server_len
);
200 memcpy (pong_msg
+7+(2*config
.server_len
), " :", 2);
201 memcpy (pong_msg
+9+(2*config
.server_len
), config
.server
, config
.server_len
);
202 pong_msg
[9+(3*config
.server_len
)] = '\n';