Changeset 257acdbfb3a4b0de7e3280e9f04d173e3016efbe
- Timestamp:
- 06/18/08 20:04:33
(7 months ago)
- Author:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
- git-committer:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1213805073 +0200
- git-parent:
[5488a6b91bdebd4dc2620f72c02d043cf5236dc3]
- git-author:
- Giuseppe Bilotta <giuseppe.bilotta@gmail.com> 1213804137 +0200
- Message:
rfc2812: fix MODE line parsing
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r73e8b72 |
r257acdb |
|
| 1446 | 1446 | who_wants_params = [] |
|---|
| 1447 | 1447 | |
|---|
| 1448 | | argv[1..-1].each { |arg| |
|---|
| 1449 | | setting = arg[0].chr |
|---|
| 1450 | | if "+-".include?(setting) |
|---|
| 1451 | | setting = setting == "+" ? :set : :reset |
|---|
| 1452 | | arg[1..-1].each_byte { |b| |
|---|
| 1453 | | m = b.chr.intern |
|---|
| 1454 | | if m == :+ |
|---|
| 1455 | | setting = :set |
|---|
| 1456 | | next |
|---|
| 1457 | | elsif m == :- |
|---|
| 1458 | | setting = :reset |
|---|
| 1459 | | next |
|---|
| 1460 | | end |
|---|
| 1461 | | data[:modes] << [setting, m] |
|---|
| 1462 | | case m |
|---|
| 1463 | | when *@server.supports[:chanmodes][:typea] |
|---|
| 1464 | | who_wants_params << data[:modes].length - 1 |
|---|
| 1465 | | when *@server.supports[:chanmodes][:typeb] |
|---|
| 1466 | | who_wants_params << data[:modes].length - 1 |
|---|
| 1467 | | when *@server.supports[:chanmodes][:typec] |
|---|
| 1468 | | if setting == :set |
|---|
| 1469 | | who_wants_params << data[:modes].length - 1 |
|---|
| 1470 | | end |
|---|
| 1471 | | when *@server.supports[:chanmodes][:typed] |
|---|
| 1472 | | # Nothing to do |
|---|
| 1473 | | when *@server.supports[:prefix][:modes] |
|---|
| 1474 | | who_wants_params << data[:modes].length - 1 |
|---|
| 1475 | | else |
|---|
| 1476 | | warning "Unknown mode #{m} in #{serverstring.inspect}" |
|---|
| 1477 | | end |
|---|
| 1478 | | } |
|---|
| 1479 | | else |
|---|
| | 1448 | modes = argv[1..-1].dup |
|---|
| | 1449 | debug modes |
|---|
| | 1450 | getting_args = false |
|---|
| | 1451 | while arg = modes.shift |
|---|
| | 1452 | debug arg |
|---|
| | 1453 | if getting_args |
|---|
| | 1454 | # getting args for previously set modes |
|---|
| 1480 | 1455 | idx = who_wants_params.shift |
|---|
| 1481 | 1456 | if idx.nil? |
|---|
| … | … | |
| 1484 | 1459 | end |
|---|
| 1485 | 1460 | data[:modes][idx] << arg |
|---|
| | 1461 | getting_args = false if who_wants_params.empty? |
|---|
| | 1462 | else |
|---|
| | 1463 | debug @server.supports[:chanmodes] |
|---|
| | 1464 | setting = :set |
|---|
| | 1465 | arg.each_char do |c| |
|---|
| | 1466 | m = c.intern |
|---|
| | 1467 | case m |
|---|
| | 1468 | when :+ |
|---|
| | 1469 | setting = :set |
|---|
| | 1470 | when :- |
|---|
| | 1471 | setting = :reset |
|---|
| | 1472 | else |
|---|
| | 1473 | data[:modes] << [setting, m] |
|---|
| | 1474 | case m |
|---|
| | 1475 | when *@server.supports[:chanmodes][:typea] |
|---|
| | 1476 | who_wants_params << data[:modes].length - 1 |
|---|
| | 1477 | when *@server.supports[:chanmodes][:typeb] |
|---|
| | 1478 | who_wants_params << data[:modes].length - 1 |
|---|
| | 1479 | when *@server.supports[:chanmodes][:typec] |
|---|
| | 1480 | if setting == :set |
|---|
| | 1481 | who_wants_params << data[:modes].length - 1 |
|---|
| | 1482 | end |
|---|
| | 1483 | when *@server.supports[:chanmodes][:typed] |
|---|
| | 1484 | # Nothing to do |
|---|
| | 1485 | when *@server.supports[:prefix][:modes] |
|---|
| | 1486 | who_wants_params << data[:modes].length - 1 |
|---|
| | 1487 | else |
|---|
| | 1488 | warning "Unknown mode #{m} in #{serverstring.inspect}" |
|---|
| | 1489 | end |
|---|
| | 1490 | end |
|---|
| | 1491 | end |
|---|
| | 1492 | getting_args = true unless who_wants_params.empty? |
|---|
| 1486 | 1493 | end |
|---|
| 1487 | | } |
|---|
| | 1494 | end |
|---|
| 1488 | 1495 | |
|---|
| 1489 | 1496 | data[:modes].each { |mode| |
|---|