| | 506 | | int nick_match_msg(CHANNEL_REC *channel, const char *msg, const char *nick) |
| | 507 | | { |
| | 508 | | const char *msgstart, *orignick; |
| | 509 | | int len, fullmatch; |
| | 510 | | |
| | 511 | | g_return_val_if_fail(nick != NULL, FALSE);
|
| | 512 | | g_return_val_if_fail(msg != NULL, FALSE);
|
| | 513 | | |
| true | 514 | | if (channel != NULL && channel->server->nick_match_msg != NULL)
|
| | 515 | | return channel->server->nick_match_msg(msg, nick); |
| | 516 | | |
| | 517 | | |
| | 518 | | len = strlen(nick); |
| | 519 | | if (g_strncasecmp(msg, nick, len) == 0 && !isalnumhigh((int) msg[len]))
|
| | 520 | | return TRUE;
|
| | 521 | | |
| | 522 | | orignick = nick; |
| | 523 | | for (;;) { |
| | 524 | | nick = orignick; |
| | 525 | | msgstart = msg; |
| | 526 | | fullmatch = TRUE;
|
| | 527 | | |
| | 528 | | |
| | 529 | | while (*nick != '\0' && *msg != '\0') { |
| | 530 | | if (i_toupper(*nick) == i_toupper(*msg)) {
|
| | 531 | | |
| | 532 | | msg++; |
| | 533 | | } else if (i_isalnum(*msg) && !i_isalnum(*nick)) {
|
| | 534 | | |
| | 535 | | fullmatch = FALSE;
|
| | 536 | | } else |
| | 537 | | break; |
| | 538 | | |
| | 539 | | nick++; |
| | 540 | | } |
| | 541 | | |
| | 542 | | if (msg != msgstart && !isalnumhigh(*msg)) {
|
| | 543 | | |
| | 544 | | |
| | 545 | | |
| | 546 | | if (*nick != '\0') { |
| | 547 | | |
| | 548 | | |
| | 549 | | fullmatch = FALSE;
|
| | 550 | | while (*nick != '\0' && !i_isalnum(*nick))
|
| | 551 | | nick++; |
| | 552 | | } |
| | 553 | | |
| | 554 | | if (*nick == '\0') { |
| | 555 | | |
| | 556 | | break; |
| | 557 | | } |
| | 558 | | } |
| | 559 | | |
| | 560 | | |
| | 561 | | |
| | 562 | | while (*msg != '\0' && *msg != ' ' && *msg != ',') msg++; |
| | 563 | | |
| | 564 | | if (*msg != ',') { |
| | 565 | | nick = orignick; |
| | 566 | | break; |
| | 567 | | } |
| | 568 | | |
| | 569 | | msg++; |
| | 570 | | } |
| | 571 | | |
| | 572 | | if (*nick != '\0') |
| | 573 | | return FALSE;
|
| | 574 | | |
| | 575 | | if (fullmatch) |
| | 576 | | return TRUE;
|
| | 577 | | |
| | 578 | | |
| | 579 | | |