📝 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:
mihaiitdata 2026-02-24 00:56:03 +02:00
parent 1231500159
commit 00969b0d38
1 changed files with 408 additions and 0 deletions

408
PROBLEMA_SVS_COMMANDS.md Normal file
View File

@ -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! 🔧**