1159 |
irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments) |
irc_cmd_recv_privmsg (t_irc_server *server, char *host, char *arguments) |
1160 |
{ |
{ |
1161 |
char *pos, *pos2, *host2; |
char *pos, *pos2, *host2; |
1162 |
char *pos_file, *pos_addr, *pos_port, *pos_size; /* for DCC */ |
char *pos_file, *pos_addr, *pos_port, *pos_size, *pos_start_resume; /* for DCC */ |
1163 |
t_irc_channel *ptr_channel; |
t_irc_channel *ptr_channel; |
1164 |
t_irc_nick *ptr_nick; |
t_irc_nick *ptr_nick; |
1165 |
struct utsname *buf; |
struct utsname *buf; |
1425 |
return 0; |
return 0; |
1426 |
} |
} |
1427 |
|
|
1428 |
|
/* incoming DCC RESUME (asked by receiver) */ |
1429 |
|
if (strncmp (pos, "\01DCC RESUME", 11) == 0) |
1430 |
|
{ |
1431 |
|
/* check if DCC RESUME is ok, i.e. with 0x01 at end */ |
1432 |
|
pos2 = strchr (pos + 1, '\01'); |
1433 |
|
if (!pos2) |
1434 |
|
{ |
1435 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1436 |
|
gui_printf_nolog (server->buffer, |
1437 |
|
_("%s cannot parse \"%s\" command\n"), |
1438 |
|
WEECHAT_ERROR, "privmsg"); |
1439 |
|
return -1; |
1440 |
|
} |
1441 |
|
pos2[0] = '\0'; |
1442 |
|
|
1443 |
|
/* DCC filename */ |
1444 |
|
pos_file = pos + 11; |
1445 |
|
while (pos_file[0] == ' ') |
1446 |
|
pos_file++; |
1447 |
|
|
1448 |
|
/* look for resume start position */ |
1449 |
|
pos_start_resume = strrchr (pos_file, ' '); |
1450 |
|
if (!pos_start_resume) |
1451 |
|
{ |
1452 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1453 |
|
gui_printf_nolog (server->buffer, |
1454 |
|
_("%s cannot parse \"%s\" command\n"), |
1455 |
|
WEECHAT_ERROR, "privmsg"); |
1456 |
|
return -1; |
1457 |
|
} |
1458 |
|
pos2 = pos_start_resume; |
1459 |
|
pos_start_resume++; |
1460 |
|
while (pos2[0] == ' ') |
1461 |
|
pos2--; |
1462 |
|
pos2[1] = '\0'; |
1463 |
|
|
1464 |
|
/* look for DCC port */ |
1465 |
|
pos_port = strrchr (pos_file, ' '); |
1466 |
|
if (!pos_port) |
1467 |
|
{ |
1468 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1469 |
|
gui_printf_nolog (server->buffer, |
1470 |
|
_("%s cannot parse \"%s\" command\n"), |
1471 |
|
WEECHAT_ERROR, "privmsg"); |
1472 |
|
return -1; |
1473 |
|
} |
1474 |
|
pos2 = pos_port; |
1475 |
|
pos_port++; |
1476 |
|
while (pos2[0] == ' ') |
1477 |
|
pos2--; |
1478 |
|
pos2[1] = '\0'; |
1479 |
|
|
1480 |
|
dcc_accept_resume (server, pos_file, atoi (pos_port), |
1481 |
|
(unsigned long) atol (pos_start_resume)); |
1482 |
|
return 0; |
1483 |
|
} |
1484 |
|
|
1485 |
|
/* incoming DCC ACCEPT (resume accepted by sender) */ |
1486 |
|
if (strncmp (pos, "\01DCC ACCEPT", 11) == 0) |
1487 |
|
{ |
1488 |
|
/* check if DCC ACCEPT is ok, i.e. with 0x01 at end */ |
1489 |
|
pos2 = strchr (pos + 1, '\01'); |
1490 |
|
if (!pos2) |
1491 |
|
{ |
1492 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1493 |
|
gui_printf_nolog (server->buffer, |
1494 |
|
_("%s cannot parse \"%s\" command\n"), |
1495 |
|
WEECHAT_ERROR, "privmsg"); |
1496 |
|
return -1; |
1497 |
|
} |
1498 |
|
pos2[0] = '\0'; |
1499 |
|
|
1500 |
|
/* DCC filename */ |
1501 |
|
pos_file = pos + 11; |
1502 |
|
while (pos_file[0] == ' ') |
1503 |
|
pos_file++; |
1504 |
|
|
1505 |
|
/* look for resume start position */ |
1506 |
|
pos_start_resume = strrchr (pos_file, ' '); |
1507 |
|
if (!pos_start_resume) |
1508 |
|
{ |
1509 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1510 |
|
gui_printf_nolog (server->buffer, |
1511 |
|
_("%s cannot parse \"%s\" command\n"), |
1512 |
|
WEECHAT_ERROR, "privmsg"); |
1513 |
|
return -1; |
1514 |
|
} |
1515 |
|
pos2 = pos_start_resume; |
1516 |
|
pos_start_resume++; |
1517 |
|
while (pos2[0] == ' ') |
1518 |
|
pos2--; |
1519 |
|
pos2[1] = '\0'; |
1520 |
|
|
1521 |
|
/* look for DCC port */ |
1522 |
|
pos_port = strrchr (pos_file, ' '); |
1523 |
|
if (!pos_port) |
1524 |
|
{ |
1525 |
|
irc_display_prefix (server->buffer, PREFIX_ERROR); |
1526 |
|
gui_printf_nolog (server->buffer, |
1527 |
|
_("%s cannot parse \"%s\" command\n"), |
1528 |
|
WEECHAT_ERROR, "privmsg"); |
1529 |
|
return -1; |
1530 |
|
} |
1531 |
|
pos2 = pos_port; |
1532 |
|
pos_port++; |
1533 |
|
while (pos2[0] == ' ') |
1534 |
|
pos2--; |
1535 |
|
pos2[1] = '\0'; |
1536 |
|
|
1537 |
|
dcc_start_resume (server, pos_file, atoi (pos_port), |
1538 |
|
(unsigned long) atol (pos_start_resume)); |
1539 |
|
return 0; |
1540 |
|
} |
1541 |
|
|
1542 |
/* incoming DCC CHAT */ |
/* incoming DCC CHAT */ |
1543 |
if (strncmp (pos, "\01DCC CHAT", 9) == 0) |
if (strncmp (pos, "\01DCC CHAT", 9) == 0) |
1544 |
{ |
{ |