📝 Add detailed documentation for SVS* commands problem
⚠️ DOCUMENTAȚIE COMPLETĂ pentru problema SVS* commands! 📋 CONȚINUT: 1. PROBLEMA identificată: - SVS* commands returnează 'Unknown command' - Cod există dar NU e înregistrat în parse.c - Impact: Servicii IRC nefuncționale 2. CAUZA REALĂ: - ✅ Cod implementat în m_svs*.c - ✅ Fișiere compilate corect - ❌ NU sunt înregistrate în parse.c - ❌ Parser-ul nu știe de comenzi 3. SOLUȚIA COMPLETĂ: - Pas cu pas pentru activare - Verificare fișiere și Makefile - Adăugare în parse.c (cod exact) - Adăugare MSG_* defines în msg.h - Recompilare și testare 4. CHECKLIST activare: - 10 pași verificare - Comenzi exacte de rulat - Testing final 5. IMPACT detaliat: - Fără SVS*: Servicii limitate - Cu SVS*: Automatizare completă - Alternative temporare 6. PRIORITATE: - Efort: SCĂZUT (2-3 ore) - Impact: ÎNALT (critic pentru servicii) - Prioritate: MAXIMĂ 7. Pentru DEVELOPERI: - Structura unei comenzi SVS - Protocol P10 examples - Integration cu servicii 8. ROADMAP: - v2.0.2: Activare SVS* - v2.1.0: SVS* + SA* aliases 📊 COMENZI AFECTATE: ❌ SVSJOIN - Force join ❌ SVSPART - Force part ❌ SVSNICK - Force nick change ❌ SVSMODE - Force mode change ❌ SVSIDENT - Set ident ❌ SVSQUIT - Force quit ❌ SWHOIS - Special WHOIS line 🎯 PENTRU CINE: - Admini: Înțeleg de ce serviciile nu funcționează - Developeri: Pași exacți pentru fix - Users: Știu ce să aștepte - Support: Pot explica problema corect Status: ✅ DOCUMENTAȚIE COMPLETĂ Next: Implementare fix în v2.0.2/v2.1.0
This commit is contained in:
parent
1231500159
commit
00969b0d38
|
|
@ -0,0 +1,408 @@
|
|||
# ⚠️ PROBLEMA SVS* Commands - NEFUNCȚIONALE
|
||||
|
||||
**Data**: 24 Februarie 2026
|
||||
**Versiune Afectată**: u2.10.12.19+UnderChat(2.0.1)
|
||||
**Severitate**: 🔴 **ÎNALTĂ** (Impact pe servicii IRC)
|
||||
|
||||
---
|
||||
|
||||
## 🐛 PROBLEMA
|
||||
|
||||
Comenzile **SVS*** (SVSJOIN, SVSPART, SVSNICK, etc.) **NU FUNCȚIONEAZĂ** în versiunea curentă!
|
||||
|
||||
### Comenzi Afectate
|
||||
|
||||
- ❌ **SVSJOIN** - Force user join
|
||||
- ❌ **SVSPART** - Force user part
|
||||
- ❌ **SVSNICK** - Force nick change
|
||||
- ❌ **SVSMODE** - Force mode change
|
||||
- ❌ **SVSIDENT** - Set ident
|
||||
- ❌ **SVSQUIT** - Force quit
|
||||
- ❌ **SWHOIS** - Set special WHOIS line
|
||||
|
||||
### Simptome
|
||||
|
||||
```
|
||||
/SVSJOIN user #channel
|
||||
# Rezultat:
|
||||
Unknown command: SVSJOIN
|
||||
|
||||
/SVSPART user #channel
|
||||
# Rezultat:
|
||||
Unknown command: SVSPART
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 CAUZA REALĂ
|
||||
|
||||
### Ce există:
|
||||
|
||||
✅ **Cod complet implementat**:
|
||||
```bash
|
||||
ircd/m_svsjoin.c # SVSJOIN implementation
|
||||
ircd/m_svspart.c # SVSPART implementation
|
||||
ircd/m_svsnick.c # SVSNICK implementation
|
||||
ircd/m_svsmode.c # SVSMODE implementation
|
||||
ircd/m_svsident.c # SVSIDENT implementation
|
||||
ircd/m_svsquit.c # SVSQUIT implementation
|
||||
ircd/m_swhois.c # SWHOIS implementation
|
||||
```
|
||||
|
||||
✅ **Fișiere compilate**:
|
||||
```bash
|
||||
ls -la ircd/*.o | grep svs
|
||||
# Toate m_svs*.o sunt generate la compilare
|
||||
```
|
||||
|
||||
### Ce lipsește:
|
||||
|
||||
❌ **Înregistrare în parser** (`ircd/parse.c`):
|
||||
|
||||
```bash
|
||||
grep "MSG_SVSJOIN" ircd/parse.c
|
||||
# NU găsește nimic!
|
||||
|
||||
grep "SVSJOIN" ircd/parse.c
|
||||
# NU găsește nimic!
|
||||
```
|
||||
|
||||
**Parser-ul IRC NU ȘTIE de aceste comenzi!**
|
||||
|
||||
---
|
||||
|
||||
## 📊 EXPLICAȚIE TEHNICĂ
|
||||
|
||||
### Cum funcționează parser-ul IRC:
|
||||
|
||||
1. **User trimite comandă**: `/SVSJOIN user #channel`
|
||||
2. **Parser caută în tabel** (`parse.c`): Există `MSG_SVSJOIN`?
|
||||
3. **NU găsește** → Returnează: **"Unknown command"**
|
||||
4. **Funcția** `ms_svsjoin()` din `m_svsjoin.c` **NU este apelată niciodată**!
|
||||
|
||||
### Tabelul de comenzi (`parse.c`):
|
||||
|
||||
```c
|
||||
// EXEMPLE de comenzi FUNCȚIONALE:
|
||||
{ MSG_PRIVMSG, TOK_PRIVMSG, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_unregistered, m_privmsg, ms_privmsg, mo_privmsg, m_ignore
|
||||
}},
|
||||
|
||||
{ MSG_JOIN, TOK_JOIN, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_unregistered, m_join, ms_join, mo_join, m_ignore
|
||||
}},
|
||||
|
||||
// SVS* commands LIPSESC COMPLET din tabel!
|
||||
// Ar trebui să existe:
|
||||
{ MSG_SVSJOIN, TOK_SVSJOIN, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsjoin, m_ignore, m_ignore
|
||||
}},
|
||||
// DAR NU EXISTĂ!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 SOLUȚIA
|
||||
|
||||
### Pas 1: Verificare fișiere
|
||||
|
||||
```bash
|
||||
cd ~/ircu2/ircd
|
||||
|
||||
# Verifică că fișierele există:
|
||||
ls -la m_svs*.c m_swhois.c
|
||||
|
||||
# Output așteptat:
|
||||
# -rw-r--r-- m_svsjoin.c
|
||||
# -rw-r--r-- m_svspart.c
|
||||
# -rw-r--r-- m_svsnick.c
|
||||
# -rw-r--r-- m_svsmode.c
|
||||
# -rw-r--r-- m_svsident.c
|
||||
# -rw-r--r-- m_svsquit.c
|
||||
# -rw-r--r-- m_swhois.c
|
||||
```
|
||||
|
||||
### Pas 2: Verificare Makefile
|
||||
|
||||
```bash
|
||||
grep "m_svs" Makefile.in
|
||||
|
||||
# Ar trebui să apară în SOURCES:
|
||||
# SOURCES = ... m_svsjoin.c m_svspart.c ... etc
|
||||
```
|
||||
|
||||
### Pas 3: Verificare headers
|
||||
|
||||
```bash
|
||||
grep "ms_svsjoin\|ms_svspart" ../include/handlers.h
|
||||
|
||||
# Ar trebui să existe declarațiile:
|
||||
# extern int ms_svsjoin(struct Client*, struct Client*, int, char*[]);
|
||||
# extern int ms_svspart(struct Client*, struct Client*, int, char*[]);
|
||||
# etc.
|
||||
```
|
||||
|
||||
### Pas 4: Adăugare în parse.c
|
||||
|
||||
**Editează `ircd/parse.c`** și adaugă în tabelul `msgtab[]`:
|
||||
|
||||
```c
|
||||
// După comenzile existente (ex: după SQUIT), adaugă:
|
||||
|
||||
/*
|
||||
* SVS* commands - Services control commands
|
||||
* Used by IRC services (X, ChanServ, NickServ) to control users
|
||||
*/
|
||||
{ MSG_SVSJOIN, TOK_SVSJOIN, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsjoin, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SVSPART, TOK_SVSPART, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svspart, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SVSNICK, TOK_SVSNICK, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsnick, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SVSMODE, TOK_SVSMODE, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsmode, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SVSIDENT, TOK_SVSIDENT, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsident, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SVSQUIT, TOK_SVSQUIT, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_svsquit, m_ignore, m_ignore
|
||||
}},
|
||||
{ MSG_SWHOIS, TOK_SWHOIS, 0, MAXPARA, MFLG_SLOW, 0, {
|
||||
m_ignore, m_ignore, ms_swhois, m_ignore, m_ignore
|
||||
}},
|
||||
```
|
||||
|
||||
### Pas 5: Verificare MSG_* și TOK_* defines
|
||||
|
||||
**Editează `include/msg.h`** și adaugă:
|
||||
|
||||
```c
|
||||
// SVS* commands
|
||||
#define MSG_SVSJOIN "SVSJOIN"
|
||||
#define TOK_SVSJOIN "SJ"
|
||||
#define MSG_SVSPART "SVSPART"
|
||||
#define TOK_SVSPART "SP"
|
||||
#define MSG_SVSNICK "SVSNICK"
|
||||
#define TOK_SVSNICK "SN"
|
||||
#define MSG_SVSMODE "SVSMODE"
|
||||
#define TOK_SVSMODE "SM"
|
||||
#define MSG_SVSIDENT "SVSIDENT"
|
||||
#define TOK_SVSIDENT "SI"
|
||||
#define MSG_SVSQUIT "SVSQUIT"
|
||||
#define TOK_SVSQUIT "SQ"
|
||||
#define MSG_SWHOIS "SWHOIS"
|
||||
#define TOK_SWHOIS "SW"
|
||||
```
|
||||
|
||||
### Pas 6: Recompilare
|
||||
|
||||
```bash
|
||||
cd ~/ircu2
|
||||
make clean
|
||||
make
|
||||
make install
|
||||
|
||||
# Restart IRCd:
|
||||
killall -9 ircd
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
### Pas 7: Testare
|
||||
|
||||
```bash
|
||||
# În IRC ca oper:
|
||||
/SVSJOIN testuser #testchannel
|
||||
|
||||
# Ar trebui să funcționeze (sau să dea eroare specifică, nu "Unknown command")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 CHECKLIST ACTIVARE
|
||||
|
||||
- [ ] Verificat că fișierele `m_svs*.c` există
|
||||
- [ ] Verificat că sunt în `Makefile.in`
|
||||
- [ ] Verificat declarații în `include/handlers.h`
|
||||
- [ ] Adăugat `MSG_*` și `TOK_*` în `include/msg.h`
|
||||
- [ ] Adăugat entries în tabelul `msgtab[]` din `ircd/parse.c`
|
||||
- [ ] Recompilat cu `make clean && make`
|
||||
- [ ] Instalat cu `make install`
|
||||
- [ ] Restart IRCd
|
||||
- [ ] Testat comenzile SVS*
|
||||
- [ ] Verificat că serviciile IRC funcționează
|
||||
|
||||
---
|
||||
|
||||
## 🎭 IMPACT
|
||||
|
||||
### Fără SVS* commands:
|
||||
|
||||
❌ **Servicii IRC limitate**:
|
||||
- X (IRC services) **NU poate** force join users pe #CService
|
||||
- ChanServ **NU poate** auto-op/voice users
|
||||
- NickServ **NU poate** force nick change pentru nick enforcement
|
||||
- BotServ **NU poate** auto-join bots pe canale
|
||||
|
||||
❌ **Management manual**:
|
||||
- Operatorii trebuie să folosească manual `/OPMODE` pentru modes
|
||||
- NU există force join/part automat
|
||||
- Serviciile au funcționalitate LIMITATĂ
|
||||
|
||||
### Cu SVS* commands activate:
|
||||
|
||||
✅ **Servicii IRC complete**:
|
||||
- X poate gestiona complet users și canale
|
||||
- ChanServ auto-mode funcționează
|
||||
- NickServ enforcement funcționează
|
||||
- BotServ auto-join funcționează
|
||||
|
||||
✅ **Automatizare**:
|
||||
- Serviciile gestionează totul automat
|
||||
- Users primesc automat @ sau + când intră pe canale
|
||||
- Nick enforcement automat
|
||||
- Integration perfectă cu Anope/Atheme
|
||||
|
||||
---
|
||||
|
||||
## 🔧 ALTERNATIVE TEMPORARE
|
||||
|
||||
Până când SVS* sunt activate, poți folosi:
|
||||
|
||||
### În loc de SVSJOIN:
|
||||
```
|
||||
# Manual prin oper:
|
||||
/OPMODE #channel +o username
|
||||
```
|
||||
|
||||
### În loc de SVSPART:
|
||||
```
|
||||
/KICK #channel username :forced part
|
||||
```
|
||||
|
||||
### În loc de SVSNICK:
|
||||
```
|
||||
# Nu există alternativă directă
|
||||
# User trebuie să schimbe manual nickname-ul
|
||||
```
|
||||
|
||||
### În loc de SVSMODE:
|
||||
```
|
||||
/OPMODE #channel +o username
|
||||
/MODE username +x (pentru user modes)
|
||||
```
|
||||
|
||||
### În loc de SVSQUIT:
|
||||
```
|
||||
/KILL username :forced disconnect
|
||||
```
|
||||
|
||||
**Limitări**: Toate alternative sunt MANUALE și necesită intervenție oper!
|
||||
|
||||
---
|
||||
|
||||
## 📊 PRIORITATE DEZVOLTARE
|
||||
|
||||
### Efort vs Impact:
|
||||
|
||||
**Efort**: 🟢 **SCĂZUT** (2-3 ore)
|
||||
- Verificare declarații existente
|
||||
- Adăugare în parse.c și msg.h
|
||||
- Recompilare și testare
|
||||
|
||||
**Impact**: 🔴 **ÎNALT** (Critic pentru servicii)
|
||||
- Servicii IRC complet funcționale
|
||||
- Automatizare completă
|
||||
- Experience users mult îmbunătățit
|
||||
|
||||
**Prioritate**: 🔴 **MAXIMĂ**
|
||||
- Ar trebui implementat în v2.0.2 sau v2.1.0
|
||||
- Esențial pentru network-uri production cu servicii
|
||||
|
||||
---
|
||||
|
||||
## 📚 PENTRU DEVELOPERI
|
||||
|
||||
### Structura unei comenzi SVS:
|
||||
|
||||
```c
|
||||
// În m_svsjoin.c:
|
||||
int ms_svsjoin(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
|
||||
{
|
||||
// parv[0] = sender prefix
|
||||
// parv[1] = target nickname
|
||||
// parv[2] = channel
|
||||
|
||||
struct Client* acptr;
|
||||
struct Channel* chptr;
|
||||
|
||||
// Find target user
|
||||
if (!(acptr = FindUser(parv[1])))
|
||||
return 0; // User not found
|
||||
|
||||
// Find/create channel
|
||||
chptr = get_channel(acptr, parv[2], CGT_CREATE);
|
||||
|
||||
// Force join
|
||||
add_user_to_channel(chptr, acptr, 0);
|
||||
|
||||
// Send JOIN to network
|
||||
sendcmdto_channel_butserv_butone(acptr, CMD_JOIN, chptr, cptr, ...);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
### Protocol P10:
|
||||
|
||||
```
|
||||
# SVSJOIN în protocol P10:
|
||||
:ServiceNumeric SJ TargetNumeric #channel
|
||||
|
||||
# Exemplu:
|
||||
:ABCDE SJ FGHIJ #cservice
|
||||
# ABCDE = X (services)
|
||||
# FGHIJ = User target
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ CÂND VA FI FIXED?
|
||||
|
||||
### Roadmap propus:
|
||||
|
||||
**v2.0.2** (patch release):
|
||||
- Activare SVS* commands
|
||||
- Testing cu Anope services
|
||||
- Documentație actualizată
|
||||
|
||||
**v2.1.0** (minor release):
|
||||
- SVS* complete + optimizări
|
||||
- SA* aliases (SAJOIN, SAPART, etc.)
|
||||
- Integration testing complex
|
||||
|
||||
---
|
||||
|
||||
## 📞 RAPORTARE
|
||||
|
||||
Dacă observi probleme cu serviciile IRC (X, ChanServ nu funcționează corect):
|
||||
|
||||
1. Verifică dacă SVS* sunt active: `/SVSJOIN`
|
||||
2. Dacă primești "Unknown command" → **Confirmă problema**
|
||||
3. Urmărește acest document pentru fix
|
||||
4. Alternative temporare: Folosește OPMODE manual
|
||||
|
||||
---
|
||||
|
||||
**Creat de**: Senior Software Architect
|
||||
**Data**: 24 Februarie 2026
|
||||
**Status**: 🔴 **PROBLEMA IDENTIFICATĂ** - Fix în curs
|
||||
**Versiune Afectată**: u2.10.12.19+UnderChat(2.0.1)
|
||||
|
||||
---
|
||||
|
||||
**⚠️ SVS* COMMANDS NU FUNCȚIONEAZĂ! URMĂREȘTE ACEST DOC PENTRU FIX! 🔧**
|
||||
|
||||
Loading…
Reference in New Issue