- 1; =========================
- 2; ASN ISP / ASN ADDON
- 3; Build actual:
- 4; ASN_ULTRASAFE_BALANCEDSHED_ASNFAST_TRACE_DIRECT136_IPINFO_HTTPS_UTF8_2026_06_24
- 5;
- 6; =========================
- 7;
- 8; INDICE RAPIDO DE COMANDOS / ALIAS VISIBLES
- 9;
- 10; /barna -> Abre el panel grafico del addon.
- 11; /barna.init -> Inicializa/reasegura timers principales.
- 12; /barna.postupdate -> Limpia estado temporal de cambio de build y ejecuta /barna.init.
- 13; /barna.lagflush -> Limpieza anti-lag fuerte de temporales SIN tocar canales/ASN.
- 14; /barna.reload -> Alias de /barna.postupdate.
- 15; /barna.qstatus -> Estado de colas, ASN, WHOIP, SAQUIT, sockets y timers.
- 16; /barna.varstatus -> Conteo de variables internas del addon.
- 17; /barna.stats -> Muestra metricas rapidas: cache ASN/ISP, lookup, qry, WHOIP, sockets, pending, qstate y guardias.
- 18; /barna.whoiprescuestatus -> Estado del rescate ligero de WHOIP/lookup atascados.
- 19; /barna.whoiprescueclean -> Limpia marcas recientes del rescate WHOIP sin tocar canales/ASN.
- 20; /barna.autoscanstatus -> Estado del AUTONICKSCAN. En build 114 queda desactivado por politica JOINONLY.
- 21; /barna.autoscanclean -> Limpia marcas/posicion antiguas del AUTONICKSCAN sin tocar canales/ASN.
- 22; /barna.joindelayclean -> Limpia solo JOIN_DELAY pendiente si se queda acumulado, sin tocar canales/ASN.
- 23; /barna.useriprescuestatus -> Alias conservado por compatibilidad.
- 24; /barna.useriprescueclean -> Alias conservado por compatibilidad.
- 25; /barna.jguardstatus -> Estado del watchdog ligero de JOIN.
- 26; /barna.jguardclean -> Limpia estado temporal JOINGUARD.
- 27; /barna.seenguardstatus -> Estado del rescate ligero de nicks vistos sin consulta.
- 28; /barna.seenguardclean -> Limpia marcas recientes del SEENGUARD.
- 29; /barna.trace <nick> -> Traza de un nick: canales, IP, cache, cola, estado ASN y SEENGUARD.
- 30; /barna.recheck <nick> -> Fuerza nueva comprobacion WHOIP/ASN del nick.
- 31; /barna.userip <nick> -> Fuerza WHOIP manual del nick. Alias conservado por compatibilidad.
- 32; /asn <ip> -> Consulta ASN/ISP manual de una IP.
- 33; /asn.nick <nick> -> Consulta ASN/ISP manual a partir de un nick.
- 34; /barna.lagmode -> Aplica modo anti-lag equilibrado.
- 35; /barna.suave -> Aplica modo suave/conservador.
- 36; /barna.canalgrande -> Aplica modo para canales grandes.
- 37; /barna.joinfixgc.run -> Limpia restos JOINFIX.
- 38; /barna.joinfixgc.on -> Activa timer barna_joinfix_gc.
- 39; /barna.joinfixgc.off -> Desactiva timer barna_joinfix_gc.
- 40; /barna.ghostfix -> Limpia estado ASN fantasma ligero.
- 41; /barna.socktogc -> Apaga timers BarnaSockTO_* huerfanos.
- 42; /barna.sockvarclean -> Limpia variables sock/rx/asn_done antiguas si no hay sockets activos.
- 43; /barna.ipkeepclean -> Limpia cache ligera de IP por nick usada para trazas y Parseline2.
- 44; /barna.saquitfix -> Repara cola SAQUIT descuadrada.
- 45; /barna.saquitdrain -> Procesa un lote de SAQUIT vencidos sin congelar mIRC.
- 46; /barna.asnbackup -> Guarda backup persistente de canales activos y ASN por canal.
- 47; /barna.asnrestore -> Restaura canales activos y ASN por canal desde backup.
- 48; /barna.cachereset -> Borra cache ASN exacta por IP.
- 49; /barna.cacheclean -> Alias de /barna.cachereset.
- 50; /barna.cachecap117.status -> Muestra estado del cap ligero de cache ASN/ISP/TS.
- 51; /barna.cachecap117.run -> Ejecuta UN lote pequeño de recorte de cache, sin borrado masivo.
- 52; /barna.cachecap117.drain -> Activa drenaje por timer en lotes pequeños hasta volver bajo el limite.
- 53; /barna.cachecap117.off -> Desactiva solo el cap automatico 117 y su timer de drenaje.
- 54; /barna.pfxreset -> Borra prefijos malos badpfx2/badpfx3. Usar con cuidado.
- 55; /barna.pfxprune [#canal] -> Elimina prefijos sin ASN propietario activo; sin canal revisa todos.
- 56; /barna.pfxstatus [#canal] [IP] -> Muestra patrones, ASN propietarios activos y prueba coincidencia opcional.
- 57; /barna.qreset -> Limpieza fuerte de colas temporales. Usar con cuidado.
- 58; /barna.varclean -> Limpieza segura/amplia de variables voluminosas.
- 59; /barna.lagclean -> Limpieza de emergencia anti-lag sin tocar canales ni ASN.
- 60; /barna.treset -> Apaga timers del addon. Despues usar /barna.init.
- 61; /barna.fullreset -> Reset completo conservando canales/ASN configurados.
- 62; /barna.cleanstart -> Alias de /barna.fullreset.
- 63; /barna.asnkick <nick> -> Sancion manual/test sobre un nick. Usar con cuidado.
- 64;
- 65; Cambios build 63:
- 66; - Añadido /barna.stats.
- 67; - Añadido /barna.stats al help/cabecera inicial.
- 68; - No se toca flujo WHOIP/SEENGUARD/IPASNRESCUE/ASN.
- 69;
- 70; Comandos internos *barna**:
- 71; No ejecutarlos manualmente salvo indicacion expresa.
- 72;
- 73; Timers permanentes esperados:
- 74; BarnaCoreTick, BarnaASNPump, BarnaMaintenance, barna_joinfix_gc
- 75;
- 76; Timers temporales normales:
- 77; BarnaUserIPBatch, BarnaSAQUITPump, BarnaSockTO_*
- 78;
- 79; NOTAS IMPORTANTES:
- 80; - No usar /timers off global.
- 81; - El comando correcto de recheck es /barna.recheck <nick>.
- 82; - Build 32: anade /barna.asnbackup y /barna.asnrestore.
- 83; - Build 36: anade /barna.lagclean y GC automatico de badpfx/seen/SAQUIT pesado.
- 84; - Build 37: anade GC de %barna_last_ip.*, %barna_lookup_chans.*, %barna_lookup.*, %barna_qry.*, %barna_ipdone.* para evitar lag por joins masivos.
- 85; - Build 43: anade GC de %barna_sock_*, %barna_sock.*, %barna_rx.* y %barna_asn_done.* para evitar lag por restos de sockets ASN.
- 86; - Build 51: anade %barna_ip_keep.* para conservar IP por nick aunque LOOKCLEAN limpie last_ip. Se usa en /barna.trace y @Parseline2.
- 87; - Build 52: anade LOOKIDLEGC: si USERIP esta idle, limpia lookup/last_ip automaticamente conservando ip_keep.
- 88; - Build 53: acota ip_keep: TTL 600s y max 700 vars; GC automatico para evitar lag por IP persistente.
- 89; - Build 54: anade JOINGUARD ultraligero: reintenta USERIP una vez si un JOIN en canal activo no termina en lookup/IP/ASN. Capado para no crear lag.
- 90; - Build 55: JOINGUARD_RESCUEFIX: no considera USERIP enviado/lookup pendiente como resultado final; si queda sin IP/ASN, reencola una vez al expirar el guard.
- 91; - Build 56: JGUARDGC: limpia restos %barna_jguard* cuando items=0 y el timer esta apagado, sin tocar canales/ASN.
- 92; - Build 57: JGUARDWAKE: si hay items reales y el timer esta OFF, lo reactiva automaticamente.
- 93; - Build 58: JGUARDTRIM: limpia variables huerfanas de JOINGUARD conservando solo items reales.
- 94; - Build 59: JGUARDREBUILD: reconstruye JOINGUARD desde items reales si vars queda alto, sin tocar canales/ASN.
- 95; - Build 60: SEENGUARD_NOMISS: escaneo ligero de %barna_seen.* para rescatar nicks vistos sin consulta activa, sin crear cola masiva.
- 96; - Build 61: TRACE_SEENGUARD: /barna.trace <nick> incluye al final el estado de SEENGUARD, evitando ejecutar /barna.seenguardstatus aparte.
- 97; - Build 62: IPASNRESCUE_VOICEQUERY: si hay IP sin cache ASN, JOINGUARD/SEENGUARD/TRACE lanzan consulta ASN directa. VOICE no bloquea consulta, solo sancion.
- 98; - Build 63: STATS: anade /barna.stats para ver metricas rapidas sin tocar el flujo USERIP/ASN.
- 99; - Build 74: USERIPRESCUE_NOWHO: mantiene USERIP, no usa WHO, y rescata lookup/qry atascados sin IP reencolando USERIP de forma acotada.
- 100; - Build 75: WHOIP354_STABLE: cambia la obtencion de IP de USERIP/RAW340 a WHO <nick> n%ni/RAW354 con FIFO y capado selectivo 354/315 del addon.
- 101; - Build 76: WHOIP_LABELS: cambia solo textos visibles de USERIP a WHOIP/WHO; no renombra variables internas.
- 102; - Build 77: WHOIP_STRICTMAP: evita cruces nick/IP usando nick del RAW354 si viene, FIFO solo si hay una consulta pendiente, e inflight por nick.
- 103; - Build 78: WHOIP_SINGLEFIFO: mantiene 1 WHOIP inflight y limpia FIFO antes de cada WHO para evitar cruces sin descartar RAW354 validos.
- 104; - Build 79: WHOIP_CHAINED: mantiene 1 inflight anti-cruce, pero encadena el siguiente WHOIP al recibir RAW354/315/401 para que no salga con cuenta gotas.
- 105; - Build 80: WHOIP_FASTASN: si ya hay IP fresca sin cache ASN, lanza ASN directa inmediatamente sin esperar SEENGUARD/rescate lento.
- 106; - Build 81: POSTUPDATE: anade /barna.postupdate y /barna.reload para agrupar limpieza segura tras cambiar de build.
- 107; - Build 82: QUEUE250: sube limite WHOIP por defecto a 250 y shed_to a 180 para evitar drops en picos, manteniendo CHAINED+FASTASN y 1 inflight anti-cruce.
- 108; - Build 93: DIRECT_JOINFIFO_NOSCAN: consulta cada JOIN por FIFO directa, sin JOINGUARD/SEENGUARD/JOINFIX ni escaneos periodicos. Evita lag masivo manteniendo consulta por JOIN.
- 109; - Build 94: JOINFIFO_LIGHTVARS: reduce drasticamente variables por JOIN. La cola WHOIP solo guarda item+pending+chans; no usa q_slot/q_nick/token/fifo pesado. CoreTick no ejecuta GC con $var().
- 110; - Build 95: NOSCAN_NOSEEN: elimina %barna_seen.* por JOIN y usa $comchan solo bajo demanda; LAGFLUSH purga familias temporales antiguas y stats deja de contar configs sock_* como sockets.
- 111; - Build 96: QFASTCACHE: si una cola ASN pendiente ya tiene cache ASN/ISP, aplica cache, emite aviso y borra la cola fantasma sin esperar socket.
- 112; - Build 97: STATEPURGE: purga inmediata por ID/nick de sock/rx/asn_done/temp/asn_val al cerrar o terminar sockets; baja TTL de estados WHOIP/ASN y limpia q_item/q_chans cuando la cola queda idle para evitar miles de variables sin perder consultas por JOIN.
- 113; - Build 98: TTLSTATECAP: reduce TTL de estado sock/ASN, purga familias WHOIP/lookup/qry cuando no hay cola ni sockets, anade /barna.varfamilies para diagnostico evaluado y evita crecimiento a miles de variables.
- 114; - Build 99: STATECAP_HARDGC: purga familias postconsulta incoherentes cuando total_vars supera el limite: inflight sin WHO actual, q_pending/q_ip/q_chans/q_try sin q_items, lookup/qry/ip_keep/sock_state/echo_asn acumulados. No toca canales ni ASN configurados.
- 115; - Build 100: STATECAP_SAFEWHOIP: corrige regresion del 99; no bloquea WHOIP por current_ln ni purga inflight activos mientras hay cola WHOIP real; usa inflight capado para recuperar debug/ASN tras JOIN sin volver a crecimiento 98.
- 116; - Build 101: ECHOFAST: acelera la cola local de avisos ASN en canales; evita que se pierdan avisos por cola lenta tras rafagas de JOIN, manteniendo HARDGC/SAFEWHOIP.
- 117; - Build 102: WHOIP_USERIPFALLBACK: si WHO termina sin RAW354/IP, prueba USERIP como fallback; /barna.trace fuerza reencolado WHOIP inmediato cuando ve nick online sin IP/cache/cola.
- 118; - Build 103: ORPHANPENDINGFIX: corrige pending WHOIP huerfano (q_pending/sent_recent sin q_item/lookup/inflight) que bloqueaba el rescate de nicks como luuciaa.
- 119; - Build 104: ECHODEDUPE: refuerza dedupe del aviso ASN por canal+nick+IP+ASN y anade dedupe exacto en cola de eco para evitar doble aviso cuando WHOIP/cache/fallback resuelven casi a la vez.
- 120; - Build 105: ORPHANLOOKUPFIX: corrige lookup/qry vivos sin WHOIP real (sin q_item/inflight/qid/socket/IP) que bloqueaban nicks como agus14chileno; /barna.trace y WHOIPRESCUE limpian el estado huerfano y reencolan WHOIP.
- 121; - Build 106: ORPHANSTRICT_ECHODEDUPEFIX: rescate estricto de lookup/pending huerfanos aunque existan marcas fantasma; corrige set dinamico del dedupe ASN/cola para frenar duplicados exactos nick+IP+ASN.
- 122; - Build 107: TRACEFORCE_DIRECTWHO: /barna.trace y WHOIPRESCUE ya no reencolan por FIFO cuando detectan lookup/qry/pending fantasma; lanzan WHO directo con inflight/current reales para romper estados como hpdk/agus14chileno.
- 123; - Build 108: TRACEFORCE_WATCHDOG: tras un WHO directo de /barna.trace, programa una comprobacion corta; si no hay RAW354/IP ni trabajo real, fuerza USERIP fallback o limpia lookup/qry fantasma para que no quede repitiendo estado viejo.
- 124; - Build 109: TRACEFORCE_STALEWHO_GC: el watchdog de /barna.trace ya trata su propio WHO directo como stale si a los 8s no hay IP, aunque sigan current/inflight vivos; fuerza USERIP fallback y reprograma una segunda limpieza para evitar lookup/qry fantasma.
- 125; - Build 110: AUTOWHORESCUE: CoreTick vuelve a ejecutar WHOIPRESCUE ultraligero para que los nicks con lookup/qry fantasma se rescaten solos sin tener que lanzar /barna.trace; batch pequeno y ritmo corto para no crear lag.
- 126; - Build 111: AUTOSTALE_AUTONICKSCAN: ademas del rescate de lookup/qry fantasma, CoreTick hace un escaneo muy acotado de nicklist por canales activos para capturar nicks online que no dispararon JOIN o quedaron sin consulta; no guarda %barna_seen.* persistente y respeta limite de cola WHOIP.
- 127; - Build 112: EXCEPTIONSAFE_AUTONICKSCAN: centraliza las excepciones del ON JOIN; esos nicks no se escanean por AUTONICKSCAN/WHOIPRESCUE/TRACE/LOOKUP y no se sancionan aunque coincida ASN/cache/badnick.
- 128; - Build 113: PRIVSAFE_MODESTOP: nicks con @/+v/%/&/~ en canales activos no se escanean ni sancionan; al recibir OP/VOICE se cancelan timers WHOIP/ASN/SAQUIT y estado temporal del nick.
- 129; - Build 114: JOINONLY_DELAYSAFE: desactiva AUTONICKSCAN/nicklist rescan. Solo consulta por JOIN, con delay configurable para dar tiempo a +v/@; si lo recibe, se cancela todo para ese nick.
- 130; - Build 115: JOINDELAY_LIGHTGC: reduce variables por JOIN delay de 5 a 2, purga delay viejo y mantiene politica JOINONLY sin rescan.
- 131; - Build 116: WHOIP_AUTOWATCHDOG: cada WHO lanzado por JOIN programa watchdog automatico; si no llega RAW354/IP en 8s prueba USERIP fallback y, si tampoco hay IP, limpia lookup/qry/sent_recent para no depender de /barna.trace.
- 132; - Build 120: CACHECAP_ADAPTIVE: bloquea cache nueva cuando cacheASN supera hard y usa drenaje adaptativo.
- 133; - Build 120: CACHECAP_MARKGC: corrige drenaje lento/clavado usando marcado de expiracion por claves distintas.
- 134; - Build 121: TOTALPRESSURE_GC: si total_vars sigue alto, drena cache hasta target y limpia auxiliares seguros.
- 135; - Build 122: JOINWHOIP_UNBLOCK: corrige cuello de botella cuando entran muchos nicks y no sale debug ASN; JOIN_DELAY drena por presion, WHOIP turbo empieza antes y WHOIPRESCUE corre realmente rapido sin esperar 15s internos.
- 136; - Build 134: PREFIX_OWNER_GUARD: cada prefijo malo guarda su ASN propietario; al borrar un ASN se purgan sus patrones y toda sancion revalida que el ASN siga activo en el canal.
- 137; - Build 135: PREFIX_OWNER_STOREFIX: corrige almacenamiento dinamico de badpfx2/3, mantiene validacion por ASN propietario y añade /barna.pfxstatus.
- 138; - Build 136: IPINFO_HTTPS: cambia todas las consultas api.ipinfo.io de HTTP/80 a SSL/443 para evitar 301 sin JSON ASN.
- 139; - Build 83: FASTCACHE: si ya hay IP y cache ASN/ISP, aplica cache y emite aviso inmediato, limpiando lookup/qry sin esperar RAW354/SEENGUARD.
- 140; - Build 84: WHOIP_TOKENMAP: usa token WHOX unico en RAW354 para mapear nick/IP; no acepta IP por FIFO para evitar cruces.
- 141; - Build 85: WHOIP_NICKMAP: si el servidor no devuelve token WHOX, acepta solo RAW354 con nick+IP esperado y mapea por nick, nunca por FIFO.
- 142; - Build 86: WHOIP_RAW354IPNICK: adapta el parser al formato real de esta red: RAW354 = <mi_nick> <ip> <nick_consultado>. Mapea por nick consultado esperado, no por FIFO.
- 143; - Build 87: WHOIP_CLEANLABELS_RESCUE: cambia textos visibles heredados USERIP->WHOIP y reencola WHOIP desde /barna.trace solo si el nick sigue realmente online y el lookup quedo sin IP/inflight.
- 144; - Build 88: WHOIP_VARFIX: corrige extraccion literal de nombres %barna_lookup.* y %barna_seen.* en rescates; evita tratar "%barna_lookup.nick" como nick real y desbloquea limpiezas/consultas.
- 145; - Build 89: WHOIP_STRICTDEDUPE_CASEFIX: RAW354 solo se acepta si el nick esta realmente inflight/manual, no solo lookup/qry; el aviso ASN usa el case real del nick en canal y dedupe canonico por canal+nick.
- 146; - Build 90: WHOIP_DEDUPE180_CASEFIX: dedupe de avisos ASN por canal+nick durante minimo 180s para evitar duplicados por case/cache/rescate.
- 147; - Build 91: WHOIP_DEDUPE180_LIGHT: mantiene dedupe 180s, pero elimina el recorrido completo de nicklist por aviso que podia causar lag en canales grandes; usa cache ligera de case real.
- 148; - Build 92: WHOIP_ANTILAGCAP: limpieza anti-lag fuerte de temporales, SEENGUARD desactivado por defecto, dedupe 90s capado y limites bajos de variables para evitar retrasos extremos.
- 149; - Build 27: ASNECHO_DEDUPE_UTF8. El aviso concreto:
- 150; El usuario <nick> (IP:<ip>) pertenece al ISP: <isp> Con ASN: <asn>
- 151; se emite en todos los canales actuales donde este el nick y el addon
- 152; este activo. La sancion sigue dependiendo de la coincidencia ASN/canal.
- 153; - El mismo aviso no se repite dos veces en el mismo canal/nick durante la ventana de dedupe.
- 154; =========================
- 155
- 156; ------------------------------------------------------------
- 157; BLOQUE 1
- 158; ESTADO GENERAL POR DEFECTO
- 159; ------------------------------------------------------------
- 160
- 161set %barna_build ASN_ULTRASAFE_BALANCEDSHED_ASNFAST_TRACE_DIRECT136_IPINFO_HTTPS_UTF8_2026_06_24
- 162if (%barna_addon == $null) set %barna_addon 1
- 163if (%barna_debug == $null) set %barna_debug 0
- 164if (%barna_debug_verbose == $null) set %barna_debug_verbose 0
- 165if (%barna_debug_rx == $null) set %barna_debug_rx 0
- 166
- 167if (%barna_q_max_retries == $null) set %barna_q_max_retries 0
- 168if (%barna_q_delay == $null) set %barna_q_delay 2
- 169if (%barna_q_max_workers == $null) set %barna_q_max_workers 1
- 170if (%barna_q_stale_secs == $null) set %barna_q_stale_secs 180
- 171if (%barna_q_stale_secs > 180) set %barna_q_stale_secs 180
- 172if (%barna_q_low_delay == $null) set %barna_q_low_delay 20
- 173if (%barna_asn_pump_delay == $null) set %barna_asn_pump_delay 3
- 174if (%barna_asn_turbo_threshold == $null) set %barna_asn_turbo_threshold 30
- 175if (%barna_asn_turbo_workers == $null) set %barna_asn_turbo_workers 1
- 176
- 177if (%barna_userip_retry_max == $null) set %barna_userip_retry_max 0
- 178if (%barna_userip_retry_delay == $null) set %barna_userip_retry_delay 15
- 179if (%barna_userip_q_delay == $null) set %barna_userip_q_delay 1
- 180set %barna_userip_q_batch_max 2
- 181set %barna_userip_q_batch_delay 1
- 182set %barna_userip_turbo_threshold 10
- 183set %barna_userip_turbo_batch_max 3
- 184if (%barna_userip_turbo_delay == $null) set %barna_userip_turbo_delay 1
- 185set %barna_userip_emergency_threshold 30
- 186set %barna_userip_emergency_batch_max 3
- 187if (%barna_userip_emergency_delay == $null) set %barna_userip_emergency_delay 1
- 188set %barna_userip_q_max_pending 400
- 189set %barna_userip_q_shed_to 0
- 190set %barna_userip_no_shed 1
- 191set %barna_whoip_lightvars 1
- 192if (%barna_userip_drop_count == $null) set %barna_userip_drop_count 0
- 193if (%barna_userip_retry_backlog_limit == $null) set %barna_userip_retry_backlog_limit 8
- 194if (%barna_userip_state_ttl == $null) set %barna_userip_state_ttl 60
- 195if (%barna_userip_state_ttl > 60) set %barna_userip_state_ttl 60
- 196if (%barna_userip_state_ttl < 30) set %barna_userip_state_ttl 30
- 197if (%barna_userip_max_inflight == $null) set %barna_userip_max_inflight 0
- 198if (%barna_userip_slow_retry_max == $null) set %barna_userip_slow_retry_max 0
- 199if (%barna_userip_slow_retry_delay == $null) set %barna_userip_slow_retry_delay 60
- 200if (%barna_userip_retry_timer_mode == $null) set %barna_userip_retry_timer_mode 0
- 201if (%barna_userip_watchdog == $null) set %barna_userip_watchdog 0
- 202if (%barna_userip_watchdog_delay == $null) set %barna_userip_watchdog_delay 20
- 203if (%barna_userip_watchdog_batch == $null) set %barna_userip_watchdog_batch 20
- 204if (%barna_userip_watchdog_retry_max == $null) set %barna_userip_watchdog_retry_max 0
- 205set %barna_userip_stuck_rescue 1
- 206if (%barna_userip_stuck_rescue_secs == $null) set %barna_userip_stuck_rescue_secs 1
- 207if (%barna_userip_stuck_rescue_secs > 1) set %barna_userip_stuck_rescue_secs 1
- 208if (%barna_userip_stuck_rescue_batch == $null) set %barna_userip_stuck_rescue_batch 10
- 209if (%barna_userip_stuck_rescue_batch > 10) set %barna_userip_stuck_rescue_batch 10
- 210if (%barna_userip_stuck_rescue_recent_ttl == $null) set %barna_userip_stuck_rescue_recent_ttl 25
- 211if (%barna_userip_stuck_rescue_recent_ttl > 25) set %barna_userip_stuck_rescue_recent_ttl 25
- 212
- 213; Build 115: JOINDELAY_LIGHTGC. AUTONICKSCAN queda desactivado: no se recorre nicklist.
- 214; Solo se consultan nicks que disparan JOIN, despues de un delay para respetar +v/@.
- 215; El delay usa variables ligeras: chan+ts. No guarda nick/timer/chans por cada JOIN.
- 216set %barna_autonickscan 0
- 217if (%barna_join_delay_secs == $null) set %barna_join_delay_secs 2
- 218if (%barna_join_delay_secs < 1) set %barna_join_delay_secs 1
- 219if (%barna_join_delay_secs > 2) set %barna_join_delay_secs 2
- 220set %barna_join_delay_lightvars 1
- 221if (%barna_join_delay_gc_age == $null) set %barna_join_delay_gc_age 12
- 222if (%barna_join_delay_gc_age < 6) set %barna_join_delay_gc_age 6
- 223if (%barna_join_delay_gc_age > 30) set %barna_join_delay_gc_age 30
- 224if (%barna_join_delay_max_pending == $null) set %barna_join_delay_max_pending 70
- 225if (%barna_join_delay_max_pending < 40) set %barna_join_delay_max_pending 40
- 226if (%barna_join_delay_max_pending > 200) set %barna_join_delay_max_pending 200
- 227if (%barna_join_delay_fast_threshold == $null) set %barna_join_delay_fast_threshold 24
- 228if (%barna_join_delay_fast_threshold < 15) set %barna_join_delay_fast_threshold 15
- 229if (%barna_join_delay_fast_threshold > 80) set %barna_join_delay_fast_threshold 80
- 230if (%barna_join_delay_fast_batch == $null) set %barna_join_delay_fast_batch 10
- 231if (%barna_join_delay_fast_batch < 2) set %barna_join_delay_fast_batch 2
- 232if (%barna_join_delay_fast_batch > 18) set %barna_join_delay_fast_batch 18
- 233if (%barna_join_delay_fast_age == $null) set %barna_join_delay_fast_age 2
- 234if (%barna_join_delay_fast_age < 1) set %barna_join_delay_fast_age 1
- 235if (%barna_join_delay_fast_age > 4) set %barna_join_delay_fast_age 4
- 236if (%barna_whoip_watchdog_secs == $null) set %barna_whoip_watchdog_secs 8
- 237if (%barna_whoip_watchdog_secs < 5) set %barna_whoip_watchdog_secs 5
- 238if (%barna_whoip_watchdog_secs > 15) set %barna_whoip_watchdog_secs 15
- 239if (%barna_whoip_watchdog_fallback_secs == $null) set %barna_whoip_watchdog_fallback_secs 10
- 240if (%barna_whoip_watchdog_fallback_secs < 6) set %barna_whoip_watchdog_fallback_secs 6
- 241if (%barna_whoip_watchdog_fallback_secs > 20) set %barna_whoip_watchdog_fallback_secs 20
- 242if (%barna_autonickscan_secs == $null) set %barna_autonickscan_secs 6
- 243if (%barna_autonickscan_secs > 6) set %barna_autonickscan_secs 6
- 244if (%barna_autonickscan_batch == $null) set %barna_autonickscan_batch 12
- 245if (%barna_autonickscan_batch > 12) set %barna_autonickscan_batch 12
- 246if (%barna_autonickscan_recent_ttl == $null) set %barna_autonickscan_recent_ttl 90
- 247if (%barna_autonickscan_recent_ttl > 90) set %barna_autonickscan_recent_ttl 90
- 248if (%barna_autonickscan_q_limit == $null) set %barna_autonickscan_q_limit 60
- 249if (%barna_autonickscan_q_limit > 80) set %barna_autonickscan_q_limit 80
- 250
- 251; VARHYGIENE54: watchdog ultraligero de JOIN.
- 252; No es el watchdog antiguo pesado: usa una cola pequena con TTL corto.
- 253set %barna_join_guard 0
- 254if (%barna_join_guard_delay == $null) set %barna_join_guard_delay 7
- 255if (%barna_join_guard_ttl == $null) set %barna_join_guard_ttl 25
- 256if (%barna_join_guard_max == $null) set %barna_join_guard_max 60
- 257if (%barna_join_guard_batch == $null) set %barna_join_guard_batch 8
- 258if (%barna_asn_cache_ttl == $null) set %barna_asn_cache_ttl 1800
- 259; Build 118: cachecap ligero corregido. IMPORTANTE: no purga de golpe; recorta en lotes pequeños con unset dinamico real.
- 260if (%barna_cachecap117_enabled == $null) set %barna_cachecap117_enabled 1
- 261if (%barna_asn_cache_max_exact == $null) set %barna_asn_cache_max_exact 120
- 262if (%barna_asn_cache_max_exact < 80) set %barna_asn_cache_max_exact 80
- 263if (%barna_asn_cache_max_exact > 180) set %barna_asn_cache_max_exact 120
- 264if (%barna_asn_cache_hard_limit == $null) set %barna_asn_cache_hard_limit 180
- 265if (%barna_asn_cache_hard_limit < %barna_asn_cache_max_exact) set %barna_asn_cache_hard_limit $calc(%barna_asn_cache_max_exact + 40)
- 266if (%barna_asn_cache_hard_limit > 260) set %barna_asn_cache_hard_limit 180
- 267if (%barna_cachecap117_batch == $null) set %barna_cachecap117_batch 12
- 268if (%barna_cachecap117_batch < 3) set %barna_cachecap117_batch 3
- 269if (%barna_cachecap117_batch > 20) set %barna_cachecap117_batch 12
- 270if (%barna_cachecap117_interval == $null) set %barna_cachecap117_interval 3
- 271if (%barna_cachecap117_interval < 2) set %barna_cachecap117_interval 2
- 272if (%barna_cachecap117_interval > 30) set %barna_cachecap117_interval 3
- 273if (%barna_asn_echo_nonmatch == $null) set %barna_asn_echo_nonmatch 1
- 274if (%barna_echo_all_common_chans == $null) set %barna_echo_all_common_chans 1
- 275if (%barna_echo_queue == $null) set %barna_echo_queue 1
- 276if (%barna_echo_q_batch_max == $null) set %barna_echo_q_batch_max 6
- 277if (%barna_echo_q_batch_max < 6) set %barna_echo_q_batch_max 6
- 278if (%barna_echo_q_batch_max > 8) set %barna_echo_q_batch_max 8
- 279if (%barna_echo_q_delay == $null) set %barna_echo_q_delay 1
- 280if (%barna_echo_q_delay > 1) set %barna_echo_q_delay 1
- 281if (%barna_echo_q_max == $null) set %barna_echo_q_max 160
- 282if (%barna_echo_q_max < 160) set %barna_echo_q_max 160
- 283if (%barna_echo_q_max > 200) set %barna_echo_q_max 200
- 284if (%barna_echo_dedupe_secs == $null) set %barna_echo_dedupe_secs 90
- 285if (%barna_echo_dedupe_secs > 90) set %barna_echo_dedupe_secs 90
- 286if (%barna_echo_dedupe_secs < 45) set %barna_echo_dedupe_secs 45
- 287
- 288if (%barna_badpfx_ttl == $null) set %barna_badpfx_ttl 7200
- 289if (%barna_badnick_ttl == $null) set %barna_badnick_ttl 1800
- 290if (%barna_shun_time == $null) set %barna_shun_time 2h
- 291if (%barna_saquit_delay == $null) set %barna_saquit_delay 120
- 292if (%barna_saquit_check_delay == $null) set %barna_saquit_check_delay 20
- 293if (%barna_saquit_final_delay == $null) set %barna_saquit_final_delay 20
- 294if (%barna_sock_timeout_secs == $null) set %barna_sock_timeout_secs 20
- 295if (%barna_q_retry_base_secs == $null) set %barna_q_retry_base_secs 90
- 296if (%barna_q_retry_max_backoff == $null) set %barna_q_retry_max_backoff 300
- 297
- 298; VARHYGIENE36: limites anti-lag para variables pesadas.
- 299if (%barna_heavy_gc_secs == $null) set %barna_heavy_gc_secs 20
- 300if (%barna_sockvar_gc_secs == $null) set %barna_sockvar_gc_secs 10
- 301if (%barna_sockvar_max_vars == $null) set %barna_sockvar_max_vars 25
- 302if (%barna_sockvar_max_vars > 25) set %barna_sockvar_max_vars 25
- 303if (%barna_highflow_gc == $null) set %barna_highflow_gc 1
- 304if (%barna_total_max_vars == $null) set %barna_total_max_vars 900
- 305if (%barna_total_max_vars > 700) set %barna_total_max_vars 900
- 306if (%barna_badpfx_ttl == $null) set %barna_badpfx_ttl 900
- 307if (%barna_badpfx_ttl > 900) set %barna_badpfx_ttl 900
- 308if (%barna_badpfx2_max_vars == $null) set %barna_badpfx2_max_vars 40
- 309if (%barna_badpfx3_max_vars == $null) set %barna_badpfx3_max_vars 80
- 310if (%barna_seen_max_vars == $null) set %barna_seen_max_vars 220
- 311if (%barna_seen_max_vars > 220) set %barna_seen_max_vars 220
- 312if (%barna_echo_seen_max_vars == $null) set %barna_echo_seen_max_vars 60
- 313if (%barna_echo_seen_max_vars > 60) set %barna_echo_seen_max_vars 60
- 314if (%barna_echo_asn_seen_max_vars == $null) set %barna_echo_asn_seen_max_vars 120
- 315if (%barna_echo_asn_seen_max_vars < 120) set %barna_echo_asn_seen_max_vars 120
- 316if (%barna_echo_asn_seen_max_vars > 160) set %barna_echo_asn_seen_max_vars 160
- 317if (%barna_saquit_emergency_max_vars == $null) set %barna_saquit_emergency_max_vars 300
- 318if (%barna_saquit_emergency_max_queue == $null) set %barna_saquit_emergency_max_queue 50
- 319if (%barna_lookup_max_vars == $null) set %barna_lookup_max_vars 400
- 320if (%barna_lastip_max_vars == $null) set %barna_lastip_max_vars 400
- 321if (%barna_ip_keep_ttl == $null) set %barna_ip_keep_ttl 600
- 322if (%barna_ip_keep_ttl > 600) set %barna_ip_keep_ttl 600
- 323if (%barna_ip_keep_max_vars == $null) set %barna_ip_keep_max_vars 80
- 324if (%barna_ip_keep_max_vars > 80) set %barna_ip_keep_max_vars 80
- 325if (%barna_lookup_idle_total_max == $null) set %barna_lookup_idle_total_max 200
- 326if (%barna_lookup_total_max_vars == $null) set %barna_lookup_total_max_vars 160
- 327if (%barna_lookup_total_max_vars > 160) set %barna_lookup_total_max_vars 160
- 328if (%barna_badnick_ttl == $null) set %barna_badnick_ttl 900
- 329if (%barna_badnick_ttl > 900) set %barna_badnick_ttl 900
- 330if (%barna_badnick_max_vars == $null) set %barna_badnick_max_vars 300
- 331
- 332; ------------------------------------------------------------
- 333; BLOQUE 1.1
- 334; CONFIGURACION POR CANAL
- 335; ------------------------------------------------------------
- 336
- 337if (%barna_chan.barcelona == $null) set %barna_chan.barcelona 1
- 338if (%barna_chan.cataluna == $null) set %barna_chan.cataluna 1
- 339if (%barna_chan.espana == $null) set %barna_chan.espana 1
- 340if (%barna_chan.amistad == $null) set %barna_chan.amistad 1
- 341
- 342if (%barna_asn.barcelona == $null) set %barna_asn.barcelona AS12430,AS6739,AS35699
- 343if (%barna_asn.cataluna == $null) set %barna_asn.cataluna AS12430,AS6739,AS35699
- 344if (%barna_asn.espana == $null) set %barna_asn.espana AS12430,AS6739,AS35699
- 345if (%barna_asn.amistad == $null) set %barna_asn.amistad AS12430,AS6739,AS35699
- 346
- 347; ------------------------------------------------------------
- 348; BLOQUE 2
- 349; DEBUG
- 350; ------------------------------------------------------------
- 351
- 352alias _barna_debug_window {
- 353 if (!$window(@BarnaASNDebug)) window -a @BarnaASNDebug
- 354}
- 355
- 356alias _barna_debug_on {
- 357 set %barna_debug 1
- 358
- 359 if (%barna_debug_verbose == $null) set %barna_debug_verbose 0
- 360 if (%barna_debug_rx == $null) set %barna_debug_rx 0
- 361
- 362 _barna_debug_window
- 363 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Debug ACTIVADO
- 364}
- 365
- 366alias _barna_debug_off {
- 367 set %barna_debug 0
- 368
- 369 if ($window(@BarnaASNDebug)) window -c @BarnaASNDebug
- 370
- 371 echo -s [ASN] Debug DESACTIVADO
- 372}
- 373
- 374alias _barna_debug_verbose_on {
- 375 set %barna_debug_verbose 1
- 376 _barna_debug_on
- 377 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Debug detallado ACTIVADO
- 378}
- 379
- 380alias _barna_debug_verbose_off {
- 381 set %barna_debug_verbose 0
- 382 if (%barna_debug == 1) {
- 383 _barna_debug_window
- 384 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Debug detallado DESACTIVADO
- 385 }
- 386}
- 387
- 388alias _barna_debug_rx_on {
- 389 set %barna_debug_rx 1
- 390 _barna_debug_on
- 391 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Debug RX ACTIVADO
- 392}
- 393
- 394alias _barna_debug_rx_off {
- 395 set %barna_debug_rx 0
- 396 if (%barna_debug == 1) {
- 397 _barna_debug_window
- 398 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Debug RX DESACTIVADO
- 399 }
- 400}
- 401
- 402alias _barna_dbg_show {
- 403 if ($1- == $null) return 0
- 404
- 405 var %m = $lower($1-)
- 406
- 407 if ($regex(%m,/(join ok|raw340 recibido|raw354 recibido|ip encontrada|userip cola|whoip|userip queue|lookup start|lookup retry)/i)) return 1
- 408 if ($regex(%m,/(queue add|queue baja|queue consulta|queue retry diferido|queue reencolado diferido|queue fallo)/i)) return 1
- 409 if ($regex(%m,/(asn resuelto|asn match|badpfx|prefijo asn malo|rx limite)/i)) return 1
- 410 if ($regex(%m,/(saquit diferido programado|saquit diferido enviado|saquit diferido cancelado|saquit confirmado|saquit fallido)/i)) return 1
- 411 if ($regex(%m,/(saquit\/sapart|segundo saquit|sockopen error|timeout socket|sockclose prematuro|lookup sin ip agotado)/i)) return 1
- 412
- 413 return 0
- 414}
- 415
- 416alias _barna_dbg {
- 417 if (%barna_debug != 1) return
- 418
- 419 if (%barna_debug_verbose != 1) {
- 420 if (!$_barna_dbg_show($1-)) return
- 421 }
- 422
- 423 _barna_debug_window
- 424 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [BARNA-DBG] $chr(15) $+ $chr(32) $+ $1-
- 425}
- 426
- 427; ------------------------------------------------------------
- 428; BLOQUE 3
- 429; HELPERS GENERALES
- 430; ------------------------------------------------------------
- 431
- 432alias _barna_chan_key {
- 433 if ($1 == $null) return
- 434
- 435 var %k = $lower($1)
- 436
- 437 if ($left(%k,1) == $chr(35)) var %k = $right(%k,-1)
- 438 if ($left(%k,1) == $chr(33)) var %k = $right(%k,-1)
- 439 if ($left(%k,1) == $chr(64)) var %k = $right(%k,-1)
- 440 if ($left(%k,1) == $chr(43)) var %k = $right(%k,-1)
- 441 if ($left(%k,1) == $chr(38)) var %k = $right(%k,-1)
- 442
- 443 var %k = $replace(%k,á,a,à,a,ä,a,â,a,é,e,è,e,ë,e,ê,e,í,i,ì,i,ï,i,î,i,ó,o,ò,o,ö,o,ô,o,ú,u,ù,u,ü,u,û,u,ñ,n,ç,c)
- 444 return %k
- 445}
- 446
- 447alias _barna_getvar {
- 448 if ($1 == $null) return
- 449 return $($1,2)
- 450}
- 451
- 452; Normaliza nombre de canal quitando prefijos de estado (@, +, etc.)
- 453alias _barna_chan_name_clean {
- 454 if ($1 == $null) return
- 455
- 456 var %c = $1
- 457
- 458 while ($left(%c,1) isin !@+%&) {
- 459 var %c = $right(%c,-1)
- 460 }
- 461
- 462 return %c
- 463}
- 464
- 465; Normaliza ASN para comparaciones robustas.
- 466alias _barna_norm_asn {
- 467 if ($1 == $null) return
- 468
- 469 var %a = $upper($1)
- 470 var %a = $remove(%a,$chr(2),$chr(3),$chr(15),$chr(22),$chr(31),$chr(32),$chr(9),$chr(13),$chr(10))
- 471
- 472 if (%a == $null) return
- 473 if ($left(%a,2) != AS) {
- 474 if (%a isnum) var %a = $+(AS,%a)
- 475 }
- 476
- 477 return %a
- 478}
- 479
- 480alias _barna_is_ipv4 {
- 481 if ($1 == $null) return 0
- 482
- 483 if ($regex($1,/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])$/)) return 1
- 484
- 485 return 0
- 486}
- 487
- 488alias _barna_ip_pfx2 {
- 489 if ($1 == $null) return
- 490 return $gettok($1,1-2,46)
- 491}
- 492
- 493alias _barna_ip_pfx3 {
- 494 if ($1 == $null) return
- 495 return $gettok($1,1-3,46)
- 496}
- 497
- 498alias _barna_namekey {
- 499 if ($1 == $null) return
- 500 return $len($1) $+ $chr(126) $+ $1
- 501}
- 502
- 503alias _barna_sock_name {
- 504 if ($1 == $null) return
- 505
- 506 ; VARHYGIENE9:
- 507 ; Socket por ID con nombre simple alfanumerico: ipinfo<ID>
- 508 ; Evita posibles problemas de mIRC con '_' o '~' en nombres de socket.
- 509 if ($2 != $null) return ipinfo $+ $2
- 510
- 511 ; Compatibilidad con sockets antiguos basados en nick.
- 512 return ipinfo $+ $chr(126) $+ $_barna_namekey($1)
- 513}
- 514
- 515alias _barna_sock_to_id {
- 516 if ($1 == $null) return
- 517
- 518 ; Socket moderno VARHYGIENE9: ipinfo<ID>
- 519 if ($left($1,6) == ipinfo) {
- 520 if ($mid($1,7,1) != $chr(126)) {
- 521 if ($mid($1,7,1) != _) return $right($1,-6)
- 522 }
- 523 }
- 524
- 525 ; Compatibilidad VARHYGIENE7/8: ipinfo_ID
- 526 if ($left($1,7) == ipinfo_) return $right($1,-7)
- 527
- 528 ; Compatibilidad con socket intermedio: ipinfo~q~ID
- 529 if ($gettok($1,1,126) != ipinfo) return
- 530 if ($gettok($1,2,126) == q) return $gettok($1,3,126)
- 531}
- 532
- 533alias _barna_sock_to_nick {
- 534 if ($1 == $null) return
- 535
- 536 ; Socket moderno VARHYGIENE9: ipinfo<ID> -> nick guardado en mapa por ID.
- 537 if ($left($1,6) == ipinfo) {
- 538 if ($mid($1,7,1) != $chr(126)) {
- 539 if ($mid($1,7,1) != _) {
- 540 var %id9 = $right($1,-6)
- 541 return [ [ $+(%,barna_sock_nick.,%id9) ] ]
- 542 }
- 543 }
- 544 }
- 545
- 546 ; Compatibilidad VARHYGIENE7/8: ipinfo_ID -> nick guardado en mapa por ID.
- 547 if ($left($1,7) == ipinfo_) {
- 548 var %id0 = $right($1,-7)
- 549 return [ [ $+(%,barna_sock_nick.,%id0) ] ]
- 550 }
- 551
- 552 if ($gettok($1,1,126) != ipinfo) return
- 553
- 554 ; Compatibilidad con socket intermedio: ipinfo~q~ID.
- 555 if ($gettok($1,2,126) == q) {
- 556 var %id = $gettok($1,3,126)
- 557 return [ [ $+(%,barna_sock_nick.,%id) ] ]
- 558 }
- 559
- 560 ; Compatibilidad con sockets antiguos basados en nick.
- 561 return $gettok($1,3-,126)
- 562}
- 563
- 564alias _barna_lookup_timer_get {
- 565 if ($1 == $null) return
- 566
- 567 var %ln = $lower($1)
- 568 var %t = [ [ $+(%,barna_lookup_timer.,%ln) ] ]
- 569
- 570 if (%t == $null) {
- 571 var %t = BarnaLookup_ $+ $ticks $+ $rand(100,999)
- 572 set -u300 %barna_lookup_timer. $+ %ln %t
- 573 }
- 574
- 575 return %t
- 576}
- 577
- 578alias _barna_lookup_timer_off {
- 579 if ($1 == $null) return
- 580
- 581 var %ln = $lower($1)
- 582 var %t = [ [ $+(%,barna_lookup_timer.,%ln) ] ]
- 583
- 584 if (%t != $null) .timer $+ %t off
- 585
- 586 unset %barna_lookup_timer. $+ %ln
- 587}
- 588
- 589alias _barna_is_join_exception {
- 590 if ($1 == $null) return 0
- 591
- 592 ; Build 112:
- 593 ; Lista unica de excepciones heredada del ON JOIN. Estos nicks nunca deben
- 594 ; pasar por escaneo automatico ni recibir sancion ASN/badnick aunque coincida.
- 595 var %n = $lower($1)
- 596
- 597 if (%n == nazcar) return 1
- 598 if (%n == guest1498) return 1
- 599 if (%n == guest1499) return 1
- 600 if (%n == lunaclara) return 1
- 601 if (%n == elektra) return 1
- 602 if (%n == ani3) return 1
- 603 if (%n == ashia) return 1
- 604 if (%n == invitado-1996) return 1
- 605 if (one_one isin %n) return 1
- 606 if (%n == elsa97) return 1
- 607 if (%n == merchhe76) return 1
- 608 if (%n == isop) return 1
- 609 if (%n == isvoice) return 1
- 610 if (%n == estela_) return 1
- 611 if (%n == selva) return 1
- 612 if (%n == _pandora75) return 1
- 613 if (%n == eguard) return 1
- 614 if (%n == jacobo) return 1
- 615
- 616 return 0
- 617}
- 618
- 619alias _barna_exception_cleanup_nick {
- 620 if ($1 == $null) return
- 621
- 622 var %nick = $1
- 623 var %ln = $lower(%nick)
- 624 _barna_join_delay_cancel %nick EXCEPTION_SAFE
- 625 var %timer = [ [ $+(%,barna_saquit_timer.,%ln) ] ]
- 626
- 627 if (%timer != $null) .timer $+ %timer off
- 628
- 629 _barna_lookup_timer_off %nick
- 630 var %whoip_timer = BarnaWHOIPChk_ $+ $md5(%ln,0)
- 631 if ($timer(%whoip_timer) != $null) .timer $+ %whoip_timer off
- 632 _barna_userip_q_release %nick EXCEPTION_SAFE
- 633
- 634 unset %barna_lookup. $+ %ln
- 635 unset %barna_lookup_chans. $+ %ln
- 636 unset %barna_qry. $+ %ln
- 637 unset %barna_ipdone. $+ %ln
- 638 unset %barna_userip_retry. $+ %ln
- 639 unset %barna_userip_sent_recent. $+ %ln
- 640 unset %barna_userip_sent_ts. $+ %ln
- 641 unset %barna_userip_q_pending. $+ %ln
- 642 unset %barna_userip_q_chans. $+ %ln
- 643 unset %barna_userip_q_slot. $+ %ln
- 644 unset %barna_userip_inflight. $+ %ln
- 645 unset %barna_userip_stuck_rescue_recent. $+ %ln
- 646 unset %barna_autonickscan_recent. $+ %ln
- 647 unset %barna_seen_rescue_recent. $+ %ln
- 648 unset %barna_badnick. $+ %ln
- 649 unset %barna_badnick_ip. $+ %ln
- 650 unset %barna_badnick_chans. $+ %ln
- 651 unset %barna_hunted. $+ %ln
- 652 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 653 set -u2 $+(%,barna_saquit_ip.,%ln) 0
- 654 set -u2 $+(%,barna_saquit_chans.,%ln) 0
- 655 set -u2 $+(%,barna_saquit_msg.,%ln) 0
- 656 set -u2 $+(%,barna_saquit_showchans.,%ln) 0
- 657 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 658
- 659 _barna_dbg EXCEPTIONSAFE limpia estado temporal: nick= %nick
- 660}
- 661
- 662
- 663; ------------------------------------------------------------
- 664; BLOQUE 3.0B
- 665; PRIVSAFE: nicks con modo de confianza no se escanean ni se sancionan
- 666; ------------------------------------------------------------
- 667
- 668alias _barna_nick_has_safe_prefix {
- 669 if ($1 == $null) return 0
- 670
- 671 var %nick = $1
- 672 var %i = 1
- 673 var %total = $comchan(%nick,0)
- 674
- 675 while (%i <= %total) {
- 676 var %chan = $comchan(%nick,%i)
- 677 var %chan = $_barna_chan_name_clean(%chan)
- 678
- 679 if ((%chan != $null) && ($_barna_is_chan_enabled(%chan))) {
- 680 var %pnick = $nick(%chan,%nick).pnick
- 681 var %prefix = $left(%pnick,1)
- 682
- 683 ; @/+v y modos superiores/medios habituales: ~ & @ % +
- 684 if (%prefix == $chr(126)) return 1
- 685 if (%prefix == $chr(38)) return 1
- 686 if (%prefix == $chr(64)) return 1
- 687 if (%prefix == $chr(37)) return 1
- 688 if (%prefix == $chr(43)) return 1
- 689
- 690 ; Fallback por propiedades de mIRC si la red/tema no muestra prefijo normal.
- 691 if ($nick(%chan,%nick).owner == $true) return 1
- 692 if ($nick(%chan,%nick).protect == $true) return 1
- 693 if ($nick(%chan,%nick).op == $true) return 1
- 694 if ($nick(%chan,%nick).hop == $true) return 1
- 695 if ($nick(%chan,%nick).voice == $true) return 1
- 696 }
- 697
- 698 inc %i
- 699 }
- 700
- 701 return 0
- 702}
- 703
- 704alias _barna_is_privileged_nick {
- 705 if ($1 == $null) return 0
- 706
- 707 var %nick = $1
- 708 var %ln = $lower(%nick)
- 709
- 710 if ($_barna_is_join_exception(%nick)) return 1
- 711 if ([ [ $+(%,barna_privileged.,%ln) ] ] == 1) return 1
- 712 if ($_barna_nick_has_safe_prefix(%nick)) return 1
- 713
- 714 return 0
- 715}
- 716
- 717alias _barna_privileged_cleanup_nick {
- 718 if ($1 == $null) return
- 719
- 720 var %nick = $1
- 721 var %reason = $2-
- 722 var %ln = $lower(%nick)
- 723 _barna_join_delay_cancel %nick PRIVSAFE_MODE
- 724 var %actions = 0
- 725 var %haswho = 0
- 726 var %qid = $_barna_trace_queue_find(%nick)
- 727
- 728 set -u900 %barna_privileged. $+ %ln 1
- 729
- 730 var %timer = [ [ $+(%,barna_saquit_timer.,%ln) ] ]
- 731 if (%timer != $null) {
- 732 .timer $+ %timer off
- 733 inc %actions
- 734 }
- 735
- 736 var %trace_timer = BarnaTraceWHOChk_ $+ $md5(%ln,0)
- 737 if ($timer(%trace_timer) != $null) {
- 738 .timer $+ %trace_timer off
- 739 inc %actions
- 740 }
- 741
- 742 var %whoip_timer = BarnaWHOIPChk_ $+ $md5(%ln,0)
- 743 if ($timer(%whoip_timer) != $null) {
- 744 .timer $+ %whoip_timer off
- 745 inc %actions
- 746 }
- 747
- 748 var %slowt = [ [ $+(%,barna_userip_slow_timer.,%ln) ] ]
- 749 if (%slowt != $null) {
- 750 .timer $+ %slowt off
- 751 inc %actions
- 752 }
- 753
- 754 if ([ [ $+(%,barna_lookup.,%ln) ] ] == 1) var %haswho = 1
- 755 if ([ [ $+(%,barna_qry.,%ln) ] ] != $null) var %haswho = 1
- 756 if ([ [ $+(%,barna_userip_q_pending.,%ln) ] ] == 1) var %haswho = 1
- 757 if ([ [ $+(%,barna_userip_q_chans.,%ln) ] ] != $null) var %haswho = 1
- 758 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) var %haswho = 1
- 759 if ([ [ $+(%,barna_userip_sent_recent.,%ln) ] ] == 1) var %haswho = 1
- 760 if (%barna_whoip_current_ln == %ln) var %haswho = 1
- 761
- 762 if (%haswho == 1) {
- 763 _barna_lookup_timer_off %nick
- 764 _barna_userip_q_release %nick PRIVSAFE_MODE
- 765 inc %actions
- 766 }
- 767
- 768 if (%qid != $null) {
- 769 noop $_barna_q_remove_for_nick(%nick,PRIVSAFE_MODE)
- 770 inc %actions
- 771 }
- 772
- 773 var %pending = [ [ $+(%,barna_saquit_pending.,%ln) ] ]
- 774 var %hunted = [ [ $+(%,barna_hunted.,%ln) ] ]
- 775 var %bad = [ [ $+(%,barna_badnick.,%ln) ] ]
- 776 var %ip = [ [ $+(%,barna_saquit_ip.,%ln) ] ]
- 777 if (%ip == $null) var %ip = $_barna_ip_get(%nick)
- 778
- 779 if ([ [ $+(%,barna_saquit_ip.,%ln) ] ] != $null) inc %actions
- 780 if (%pending == 1) inc %actions
- 781 if (%hunted == 1) inc %actions
- 782 if (%bad == 1) inc %actions
- 783
- 784 ; Solo retirar SHUN si habia estado de sancion/cola/timer. Evita spam por autoscan.
- 785 if ((%ip != $null) && ((%pending == 1) || (%hunted == 1) || (%timer != $null) || (%qid != $null))) .quote SHUN $+(*!*@,%ip)
- 786 if ((%pending == 1) || (%hunted == 1) || (%timer != $null) || (%qid != $null)) .shun %nick
- 787
- 788 unset %barna_lookup. $+ %ln
- 789 unset %barna_lookup_chans. $+ %ln
- 790 unset %barna_qry. $+ %ln
- 791 unset %barna_ipdone. $+ %ln
- 792 unset %barna_userip_retry. $+ %ln
- 793 unset %barna_userip_sent_recent. $+ %ln
- 794 unset %barna_userip_sent_ts. $+ %ln
- 795 unset %barna_userip_watchtry. $+ %ln
- 796 unset %barna_userip_slow_retry. $+ %ln
- 797 unset %barna_userip_slow_timer. $+ %ln
- 798 unset %barna_userip_q_pending. $+ %ln
- 799 unset %barna_userip_q_chans. $+ %ln
- 800 unset %barna_userip_q_slot. $+ %ln
- 801 unset %barna_userip_q_nick. $+ %ln
- 802 unset %barna_userip_inflight. $+ %ln
- 803 unset %barna_userip_stuck_rescue_recent. $+ %ln
- 804 unset %barna_autonickscan_recent. $+ %ln
- 805 unset %barna_seen_rescue_recent. $+ %ln
- 806 unset %barna_whoip_sent. $+ %ln
- 807
- 808 if (%barna_whoip_current_ln == %ln) {
- 809 unset %barna_whoip_current_nick
- 810 unset %barna_whoip_current_ln
- 811 unset %barna_whoip_315_done_pending
- 812 }
- 813
- 814 unset %barna_badnick. $+ %ln
- 815 unset %barna_badnick_ip. $+ %ln
- 816 unset %barna_badnick_chans. $+ %ln
- 817 unset %barna_hunted. $+ %ln
- 818 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 819 set -u2 $+(%,barna_saquit_ip.,%ln) 0
- 820 set -u2 $+(%,barna_saquit_chans.,%ln) 0
- 821 set -u2 $+(%,barna_saquit_msg.,%ln) 0
- 822 set -u2 $+(%,barna_saquit_showchans.,%ln) 0
- 823 set -u2 $+(%,barna_saquit_sent.,%ln) 0
- 824 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 825
- 826 if (%actions > 0) _barna_dbg PRIVSAFE limpia/para temporales por @/+v: nick= %nick reason= %reason ip= %ip acciones= %actions
- 827}
- 828
- 829alias _barna_shun_nick {
- 830 if ($1 == $null) return
- 831
- 832 var %nick = $1
- 833 if ($_barna_is_join_exception(%nick)) {
- 834 _barna_dbg EXCEPTIONSAFE evita SHUN por nick: nick= %nick
- 835 _barna_exception_cleanup_nick %nick
- 836 return
- 837 }
- 838 if ($_barna_is_privileged_nick(%nick)) {
- 839 _barna_dbg PRIVSAFE evita SHUN por nick con @/+v: nick= %nick
- 840 _barna_privileged_cleanup_nick %nick SHUN_NICK
- 841 return
- 842 }
- 843 var %reason = $2-
- 844 var %dur = %barna_shun_time
- 845
- 846 if (%dur == $null) var %dur = 2h
- 847 if (%reason == $null) var %reason = Molestias en Canales (A)
- 848
- 849 _barna_dbg SHUN enviado por nick: nick= %nick dur= %dur reason= %reason
- 850
- 851 .quote SHUN %nick %dur $+(:,%reason)
- 852}
- 853
- 854alias _barna_shun_ip {
- 855 if ($1 == $null) return
- 856
- 857 var %ip = $1
- 858 var %reason = $2-
- 859 var %dur = %barna_shun_time
- 860
- 861 if (!$_barna_is_ipv4(%ip)) return
- 862 if (%dur == $null) var %dur = 2h
- 863 if (%reason == $null) var %reason = Molestias en Canales (A)
- 864
- 865 _barna_dbg SHUN enviado por IP: ip= %ip dur= %dur reason= %reason
- 866
- 867 .quote SHUN $+(*!*@,%ip) %dur $+(:,%reason)
- 868}
- 869
- 870alias _barna_mark_badnick {
- 871 if ($1 == $null) return
- 872
- 873 var %nick = $1
- 874 var %ip = $2
- 875 var %scope_in = $3-
- 876 var %ttl = %barna_badnick_ttl
- 877 var %ln = $lower(%nick)
- 878
- 879 if ($_barna_is_join_exception(%nick)) {
- 880 _barna_dbg EXCEPTIONSAFE no guarda BADNICK: nick= %nick ip= %ip
- 881 _barna_exception_cleanup_nick %nick
- 882 return
- 883 }
- 884
- 885 if ($_barna_is_privileged_nick(%nick)) {
- 886 _barna_dbg PRIVSAFE no guarda BADNICK por @/+v: nick= %nick ip= %ip
- 887 _barna_privileged_cleanup_nick %nick BADNICK
- 888 return
- 889 }
- 890
- 891 if (%ttl !isnum 60-) var %ttl = 1800
- 892
- 893 var %scope = $_barna_chan_list_clean_enabled(%scope_in)
- 894 if (%scope == $null) var %scope = $_barna_nick_enabled_chans(%nick)
- 895
- 896 ; VARHYGIENE49:
- 897 ; BADNICK deja de ser global. Solo se guarda si existe canal scope,
- 898 ; para evitar sanciones por patron en canales donde ese ASN no fue cazado.
- 899 if (%scope == $null) {
- 900 _barna_dbg BADNICK no guardado porque no hay canales scope: nick= %nick ip= %ip
- 901 return
- 902 }
- 903
- 904 set $+(-u,%ttl) %barna_badnick. $+ %ln 1
- 905 set $+(-u,%ttl) %barna_badnick_chans. $+ %ln %scope
- 906 if (%ip != $null) set $+(-u,%ttl) %barna_badnick_ip. $+ %ln %ip
- 907
- 908 _barna_dbg BADNICK guardado temporalmente: nick= %nick ip= %ip chans= %scope ttl= %ttl
- 909}
- 910
- 911; ------------------------------------------------------------
- 912; BLOQUE 3.1
- 913; HELPERS DE CANAL
- 914; ------------------------------------------------------------
- 915
- 916alias _barna_is_chan_enabled {
- 917 if ($1 == $null) return 0
- 918
- 919 var %key = $_barna_chan_key($1)
- 920 var %varname = $+(%,barna_chan.,%key)
- 921 var %val = $_barna_getvar(%varname)
- 922
- 923 if (%val == 1) return 1
- 924 return 0
- 925}
- 926
- 927alias _barna_chan_on {
- 928 if ($1 == $null) return
- 929
- 930 var %key = $_barna_chan_key($1)
- 931 set %barna_chan. $+ %key 1
- 932 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Canal activado: $chr(2) $+ $1 $+ $chr(15)
- 933}
- 934
- 935alias _barna_chan_off {
- 936 if ($1 == $null) return
- 937
- 938 var %key = $_barna_chan_key($1)
- 939 set %barna_chan. $+ %key 0
- 940 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Canal desactivado: $chr(2) $+ $1 $+ $chr(15)
- 941}
- 942
- 943alias _barna_chan_toggle {
- 944 if ($1 == $null) return
- 945
- 946 if ($_barna_is_chan_enabled($1)) {
- 947 _barna_chan_off $1
- 948 }
- 949 else {
- 950 _barna_chan_on $1
- 951 }
- 952}
- 953
- 954alias _barna_get_asn_list {
- 955 if ($1 == $null) return
- 956
- 957 var %key = $_barna_chan_key($1)
- 958 var %varname = $+(%,barna_asn.,%key)
- 959 return $_barna_getvar(%varname)
- 960}
- 961
- 962alias _barna_asn_in_chan {
- 963 if ($1 == $null) return 0
- 964 if ($2 == $null) return 0
- 965
- 966 var %list = $_barna_get_asn_list($1)
- 967 if (%list == $null) return 0
- 968
- 969 var %asn = $_barna_norm_asn($2)
- 970 if (%asn == $null) return 0
- 971
- 972 ; VARHYGIENE45:
- 973 ; Comparacion robusta token a token para evitar falsos negativos.
- 974 ; Acepta listas separadas por coma con espacios o formato accidental.
- 975 var %i = 1
- 976 while (%i <= $numtok(%list,44)) {
- 977 var %tok = $_barna_norm_asn($gettok(%list,%i,44))
- 978
- 979 if (%tok != $null) {
- 980 if (%tok == %asn) return 1
- 981 if ($remove(%tok,AS) == $remove(%asn,AS)) return 1
- 982 }
- 983
- 984 inc %i
- 985 }
- 986
- 987 return 0
- 988}
- 989
- 990alias _barna_asn_filter_active_chans {
- 991 if ($1 == $null) return
- 992 if ($2 == $null) return
- 993
- 994 var %asn = $_barna_norm_asn($1)
- 995 var %chans = $replace($2-,$chr(32),$chr(44))
- 996 var %out
- 997 var %i = 1
- 998
- 999 if (%asn == $null) return
- 1000
- 1001 while (%i <= $numtok(%chans,44)) {
- 1002 var %c = $_barna_chan_name_clean($gettok(%chans,%i,44))
- 1003
- 1004 if (%c != $null) {
- 1005 if ($_barna_is_chan_enabled(%c)) {
- 1006 if ($_barna_asn_in_chan(%c,%asn)) {
- 1007 if (%out == $null) var %out = %c
- 1008 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1009 }
- 1010 }
- 1011 }
- 1012
- 1013 inc %i
- 1014 }
- 1015
- 1016 return %out
- 1017}
- 1018
- 1019alias _barna_asn_match_chans_for_nick {
- 1020 if ($1 == $null) return
- 1021 if ($2 == $null) return
- 1022
- 1023 var %nick = $1
- 1024 var %asn = $_barna_norm_asn($2)
- 1025 var %input = $3-
- 1026 var %candidates
- 1027 var %out
- 1028 var %i = 1
- 1029
- 1030 ; VARHYGIENE45:
- 1031 ; Construimos candidatos mezclando canales vivos, input y seen.
- 1032 ; Esto evita que el eco multicanal informe pero la sancion no encuentre
- 1033 ; el canal configurado cuando una rama trae canales incompletos.
- 1034 var %live = $_barna_nick_enabled_chans(%nick)
- 1035 var %seen = $_barna_seen_get(%nick)
- 1036 var %echo = $_barna_echo_chans_for_nick(%nick,%input)
- 1037
- 1038 if (%echo != $null) var %candidates = %echo
- 1039 if (%live != $null) {
- 1040 var %j = 1
- 1041 while (%j <= $numtok(%live,44)) {
- 1042 var %lc = $_barna_chan_name_clean($gettok(%live,%j,44))
- 1043 if (%lc != $null) {
- 1044 if (%candidates == $null) var %candidates = %lc
- 1045 else if (!$istok(%candidates,%lc,44)) var %candidates = $addtok(%candidates,%lc,44)
- 1046 }
- 1047 inc %j
- 1048 }
- 1049 }
- 1050 if (%input != $null) {
- 1051 var %input = $replace(%input,$chr(32),$chr(44))
- 1052 var %j = 1
- 1053 while (%j <= $numtok(%input,44)) {
- 1054 var %ic = $_barna_chan_name_clean($gettok(%input,%j,44))
- 1055 if (%ic != $null) {
- 1056 if ($_barna_is_chan_enabled(%ic)) {
- 1057 if (%candidates == $null) var %candidates = %ic
- 1058 else if (!$istok(%candidates,%ic,44)) var %candidates = $addtok(%candidates,%ic,44)
- 1059 }
- 1060 }
- 1061 inc %j
- 1062 }
- 1063 }
- 1064 if (%seen != $null) {
- 1065 var %seen = $replace(%seen,$chr(32),$chr(44))
- 1066 var %j = 1
- 1067 while (%j <= $numtok(%seen,44)) {
- 1068 var %sc = $_barna_chan_name_clean($gettok(%seen,%j,44))
- 1069 if (%sc != $null) {
- 1070 if ($_barna_is_chan_enabled(%sc)) {
- 1071 if (%candidates == $null) var %candidates = %sc
- 1072 else if (!$istok(%candidates,%sc,44)) var %candidates = $addtok(%candidates,%sc,44)
- 1073 }
- 1074 }
- 1075 inc %j
- 1076 }
- 1077 }
- 1078
- 1079 if (%candidates == $null) return
- 1080
- 1081 while (%i <= $numtok(%candidates,44)) {
- 1082 var %c = $_barna_chan_name_clean($gettok(%candidates,%i,44))
- 1083
- 1084 if (%c != $null) {
- 1085 if ($_barna_asn_in_chan(%c,%asn)) {
- 1086 if (%out == $null) var %out = %c
- 1087 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1088 }
- 1089 }
- 1090
- 1091 inc %i
- 1092 }
- 1093
- 1094 return %out
- 1095}
- 1096
- 1097alias barna.asncheck {
- 1098 if ($1 == $null) || ($2 == $null) {
- 1099 echo -a [ASN] Uso: /barna.asncheck <#canal> <ASN>
- 1100 return
- 1101 }
- 1102
- 1103 echo -a [ASN] ASN check canal= $1 asn= $upper($2) match= $_barna_asn_in_chan($1,$2) lista= $_barna_get_asn_list($1)
- 1104}
- 1105
- 1106alias barna.asnchecknick {
- 1107 if ($1 == $null) || ($2 == $null) {
- 1108 echo -a [ASN] Uso: /barna.asnchecknick <nick> <ASN> [#canal,#canal]
- 1109 return
- 1110 }
- 1111
- 1112 var %nick = $1
- 1113 var %asn = $2
- 1114 var %chans = $3-
- 1115 var %match = $_barna_asn_match_chans_for_nick(%nick,%asn,%chans)
- 1116 echo -a [ASN] ASN check nick= %nick asn= $_barna_norm_asn(%asn) match_chans= %match live= $_barna_nick_enabled_chans(%nick) seen= $_barna_seen_get(%nick) input= %chans
- 1117}
- 1118
- 1119alias _barna_chan_add_asn {
- 1120 if ($1 == $null) return
- 1121 if ($2 == $null) return
- 1122
- 1123 var %chan = $1
- 1124 var %key = $_barna_chan_key(%chan)
- 1125 var %asn = $upper($2)
- 1126
- 1127 if (!$regex(%asn,/^AS\d+$/i)) {
- 1128 echo -a $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ ASN no válido: $chr(2) $+ %asn $+ $chr(15)
- 1129 return
- 1130 }
- 1131
- 1132 var %varname = $+(%,barna_asn.,%key)
- 1133 var %list = $_barna_getvar(%varname)
- 1134
- 1135 if (%list == $null) {
- 1136 set %barna_asn. $+ %key %asn
- 1137 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Añadido ASN $chr(2) $+ %asn $+ $chr(15) $+ al canal $chr(2) $+ %chan $+ $chr(15)
- 1138 return
- 1139 }
- 1140
- 1141 if ($istok(%list,%asn,44)) {
- 1142 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Ese ASN ya existe en $chr(2) $+ %chan $+ $chr(15)
- 1143 return
- 1144 }
- 1145
- 1146 set %barna_asn. $+ %key $addtok(%list,%asn,44)
- 1147 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Añadido ASN $chr(2) $+ %asn $+ $chr(15) $+ al canal $chr(2) $+ %chan $+ $chr(15)
- 1148}
- 1149
- 1150alias _barna_chan_del_asn {
- 1151 if ($1 == $null) return
- 1152 if ($2 == $null) return
- 1153
- 1154 var %chan = $1
- 1155 var %key = $_barna_chan_key(%chan)
- 1156 var %asn = $_barna_norm_asn($2)
- 1157 var %varname = $+(%,barna_asn.,%key)
- 1158 var %list = $_barna_getvar(%varname)
- 1159
- 1160 if (%asn == $null) return
- 1161
- 1162 if (%list == $null) {
- 1163 var %pfxclean = $_barna_bad_prefix_prune_channel(%chan)
- 1164 echo -a $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ El canal $chr(2) $+ %chan $+ $chr(15) $+ no tiene ASN configurados. Prefijos obsoletos limpiados: %pfxclean
- 1165 return
- 1166 }
- 1167
- 1168 if (!$istok(%list,%asn,44)) {
- 1169 var %pfxclean = $_barna_bad_prefix_prune_channel(%chan)
- 1170 echo -a $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ El ASN $chr(2) $+ %asn $+ $chr(15) $+ no existe en $chr(2) $+ %chan $+ $chr(15) $+ . Prefijos obsoletos limpiados: %pfxclean
- 1171 return
- 1172 }
- 1173
- 1174 var %new = $remtok(%list,%asn,1,44)
- 1175
- 1176 if (%new == $null) {
- 1177 unset %barna_asn. $+ %key
- 1178 }
- 1179 else {
- 1180 set %barna_asn. $+ %key %new
- 1181 }
- 1182
- 1183 var %pfxclean = $_barna_bad_prefix_prune_channel(%chan)
- 1184 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ Eliminado ASN $chr(2) $+ %asn $+ $chr(15) del canal $chr(2) $+ %chan $+ $chr(15) $+ . Prefijos actualizados/eliminados: %pfxclean
- 1185}
- 1186
- 1187alias _barna_chan_list_asn {
- 1188 if ($1 == $null) {
- 1189 echo -a $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ No se recibió canal.
- 1190 return
- 1191 }
- 1192
- 1193 var %chan = $1
- 1194 var %key = $_barna_chan_key(%chan)
- 1195 var %varname = $+(%,barna_asn.,%key)
- 1196 var %list = $_barna_getvar(%varname)
- 1197
- 1198 if (%list == $null) {
- 1199 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ ASN en $chr(2) $+ %chan $+ $chr(15) $+ : ninguno
- 1200 return
- 1201 }
- 1202
- 1203 echo -a $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ ASN en $chr(2) $+ %chan $+ $chr(15) $+ : %list
- 1204}
- 1205
- 1206alias _barna_chan_add_asn_input {
- 1207 if ($1 == $null) return
- 1208
- 1209 var %asn = $input(Escribe el ASN a añadir para $1,e,Barna ASN por canal)
- 1210 if (%asn == $null) return
- 1211
- 1212 _barna_chan_add_asn $1 %asn
- 1213}
- 1214
- 1215alias _barna_chan_del_asn_input {
- 1216 if ($1 == $null) return
- 1217
- 1218 var %asn = $input(Escribe el ASN a borrar de $1,e,Barna ASN por canal)
- 1219 if (%asn == $null) return
- 1220
- 1221 _barna_chan_del_asn $1 %asn
- 1222}
- 1223
- 1224; ------------------------------------------------------------
- 1225; BLOQUE 3.2
- 1226; SEGUIMIENTO DE CANALES POR NICK
- 1227; ------------------------------------------------------------
- 1228
- 1229alias _barna_seen_add {
- 1230 ; Build 95:
- 1231 ; No guardar %barna_seen.* por cada JOIN. Era una de las familias que
- 1232 ; crecia en canales grandes. La consulta por JOIN NO se pierde: el JOIN
- 1233 ; guarda sus canales en %barna_userip_q_chans.<nick> y, cuando hace falta,
- 1234 ; se usa $comchan mediante _barna_nick_enabled_chans.
- 1235 return
- 1236}
- 1237
- 1238alias _barna_seen_del {
- 1239 ; Compatibilidad: limpiar restos antiguos si existen.
- 1240 if ($1 == $null) return
- 1241 var %ln = $lower($1)
- 1242 unset %barna_seen. $+ %ln
- 1243 unset %barna_seen_display. $+ %ln
- 1244}
- 1245
- 1246alias _barna_seen_get {
- 1247 ; Build 95: sin cache seen persistente. Devolver canales activos reales.
- 1248 if ($1 == $null) return
- 1249 return $_barna_nick_enabled_chans($1)
- 1250}
- 1251
- 1252alias _barna_nick_enabled_chans {
- 1253 if ($1 == $null) return
- 1254
- 1255 var %nick = $1
- 1256 var %i = 1
- 1257 var %out
- 1258
- 1259 while (%i <= $comchan(%nick,0)) {
- 1260 var %c = $comchan(%nick,%i)
- 1261 var %c = $_barna_chan_name_clean(%c)
- 1262
- 1263 if (%c != $null) {
- 1264 if ($_barna_is_chan_enabled(%c)) {
- 1265 if (%out == $null) var %out = %c
- 1266 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1267 }
- 1268 }
- 1269
- 1270 inc %i
- 1271 }
- 1272
- 1273 return %out
- 1274}
- 1275
- 1276alias _barna_chan_list_clean_enabled {
- 1277 if ($1- == $null) return
- 1278
- 1279 var %input = $replace($1-,$chr(32),$chr(44))
- 1280 var %i = 1
- 1281 var %out
- 1282
- 1283 while (%i <= $numtok(%input,44)) {
- 1284 var %c = $_barna_chan_name_clean($gettok(%input,%i,44))
- 1285
- 1286 if (%c != $null) {
- 1287 if ($_barna_is_chan_enabled(%c)) {
- 1288 if (%out == $null) var %out = %c
- 1289 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1290 }
- 1291 }
- 1292
- 1293 inc %i
- 1294 }
- 1295
- 1296 return %out
- 1297}
- 1298
- 1299alias _barna_chan_list_intersect_enabled {
- 1300 if ($1 == $null) return
- 1301 if ($2 == $null) return
- 1302
- 1303 var %a = $_barna_chan_list_clean_enabled($1)
- 1304 var %b = $_barna_chan_list_clean_enabled($2)
- 1305 var %i = 1
- 1306 var %out
- 1307
- 1308 if (%a == $null) return
- 1309 if (%b == $null) return
- 1310
- 1311 while (%i <= $numtok(%a,44)) {
- 1312 var %c = $gettok(%a,%i,44)
- 1313
- 1314 if (%c != $null) {
- 1315 if ($istok(%b,%c,44)) {
- 1316 if (%out == $null) var %out = %c
- 1317 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1318 }
- 1319 }
- 1320
- 1321 inc %i
- 1322 }
- 1323
- 1324 return %out
- 1325}
- 1326
- 1327; Devuelve los canales donde el nick esta PRESENTE ahora mismo y el addon
- 1328; esta activo. Si $comchan no devuelve nada, usa los canales guardados
- 1329; como fallback para no perder el aviso si el nick acaba de salir.
- 1330alias _barna_echo_chans_for_nick {
- 1331 if ($1 == $null) return
- 1332
- 1333 var %nick = $1
- 1334 var %input = $2-
- 1335 var %out
- 1336 var %i = 1
- 1337
- 1338 if (%barna_echo_all_common_chans == 1) {
- 1339 var %live = $_barna_nick_enabled_chans(%nick)
- 1340 if (%live != $null) return %live
- 1341 }
- 1342
- 1343 if (%input != $null) var %input = $replace(%input,$chr(32),$chr(44))
- 1344
- 1345 while (%i <= $numtok(%input,44)) {
- 1346 var %c = $gettok(%input,%i,44)
- 1347
- 1348 if (%c != $null) {
- 1349 if ($_barna_is_chan_enabled(%c)) {
- 1350 if (%out == $null) var %out = %c
- 1351 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 1352 }
- 1353 }
- 1354
- 1355 inc %i
- 1356 }
- 1357
- 1358 return %out
- 1359}
- 1360
- 1361alias _barna_nick_has_lookup_work {
- 1362 if ($1 == $null) return 0
- 1363
- 1364 var %nick = $1
- 1365 var %ln = $lower(%nick)
- 1366
- 1367 ; Build 106:
- 1368 ; lookup/qry por si solos ya no cuentan como trabajo real. Si no hay cola WHOIP,
- 1369 ; inflight/current ni cola ASN asociada, son estado huerfano y no deben bloquear rescates.
- 1370 if ($_barna_whoip_has_real_work(%nick)) return 1
- 1371 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) return 1
- 1372 if ([ [ $+(%,barna_q_pending.,%ln) ] ] != $null) return 1
- 1373 if ([ [ $+(%,barna_q_active.,%ln) ] ] != $null) return 1
- 1374 if ($_barna_trace_queue_find(%nick) != $null) return 1
- 1375
- 1376 if ([ [ $+(%,barna_lookup.,%ln) ] ] == 1) return 0
- 1377 if ([ [ $+(%,barna_qry.,%ln) ] ] != $null) return 0
- 1378
- 1379 return 0
- 1380}
- 1381
- 1382alias _barna_joinfix_recheck_if_needed {
- 1383 if ($1 == $null) return 0
- 1384
- 1385 var %nick = $1
- 1386 var %reason = $2-
- 1387 var %ln = $lower(%nick)
- 1388
- 1389 if ($_barna_is_privileged_nick(%nick)) {
- 1390 _barna_dbg PRIVSAFE JOINFIX omite nick con @/+v: nick= %nick reason= %reason
- 1391 _barna_privileged_cleanup_nick %nick JOINFIX
- 1392 return 0
- 1393 }
- 1394
- 1395 if ($_barna_nick_has_lookup_work(%nick)) return 0
- 1396
- 1397 var %chans = $_barna_nick_enabled_chans(%nick)
- 1398 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 1399 if (%chans == $null) return 0
- 1400
- 1401 var %i = 1
- 1402 while (%i <= $numtok(%chans,44)) {
- 1403 var %c = $gettok(%chans,%i,44)
- 1404 if (%c != $null) _barna_seen_add %nick %c
- 1405 inc %i
- 1406 }
- 1407
- 1408 var %lastip = $_barna_ip_get(%nick)
- 1409 if (%lastip != $null) {
- 1410 if ($_barna_asn_cache_apply(%nick,%lastip,%chans)) {
- 1411 _barna_dbg JOINFIX usa cache ASN: nick= %nick ip= %lastip chans= %chans reason= %reason
- 1412 return 1
- 1413 }
- 1414 }
- 1415
- 1416 var %ttl = $_barna_userip_ttl
- 1417 set $+(-u,%ttl) %barna_qry. $+ %ln 1
- 1418 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 1419 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 1420 unset %barna_ipdone. $+ %ln
- 1421
- 1422 _barna_dbg JOINFIX reencola nick visto sin consulta activa: nick= %nick chans= %chans reason= %reason
- 1423 _barna_userip_q_add %nick
- 1424
- 1425 return 1
- 1426}
- 1427
- 1428
- 1429; ------------------------------------------------------------
- 1430; BLOQUE 4.6B
- 1431; JOINGUARD ULTRALIGERO PARA JOIN SIN CONSULTA
- 1432; ------------------------------------------------------------
- 1433
- 1434alias _barna_join_guard_count {
- 1435 if (%barna_jguard_items == $null) return 0
- 1436 return $numtok(%barna_jguard_items,44)
- 1437}
- 1438
- 1439alias _barna_join_guard_remove {
- 1440 if ($1 == $null) return 0
- 1441
- 1442 var %ln = $lower($1)
- 1443
- 1444 if (%barna_jguard_items != $null) {
- 1445 var %new = $remtok(%barna_jguard_items,%ln,1,44)
- 1446 if (%new == $null) unset %barna_jguard_items
- 1447 else set %barna_jguard_items %new
- 1448 }
- 1449
- 1450 unset %barna_jguard. $+ %ln
- 1451 unset %barna_jguard_ts. $+ %ln
- 1452 unset %barna_jguard_nick. $+ %ln
- 1453 return 1
- 1454}
- 1455
- 1456alias _barna_join_guard_has_result {
- 1457 if ($1 == $null) return 1
- 1458
- 1459 var %nick = $1
- 1460 var %ln = $lower(%nick)
- 1461
- 1462 ; Build 62:
- 1463 ; IP sola NO es resultado final. El guard solo se da por resuelto
- 1464 ; cuando ya existe ASN real/cache ASN para esa IP, o asn_done=1.
- 1465 if ([ [ $+(%,barna_asn_done.,%ln) ] ] == 1) return 1
- 1466
- 1467 var %ip = $_barna_ip_get(%nick)
- 1468 if (%ip != $null) {
- 1469 var %key = $_barna_asn_cache_key(%ip)
- 1470 if ($_barna_asn_cache_key_valid(%key)) return 1
- 1471 }
- 1472
- 1473 return 0
- 1474}
- 1475
- 1476alias _barna_join_guard_schedule {
- 1477 if (%barna_addon != 1) return
- 1478 if (%barna_join_guard != 1) return
- 1479 if (%barna_jguard_items == $null) return
- 1480 if ($timer(BarnaJoinGuard) != $null) return
- 1481
- 1482 var %delay = %barna_join_guard_delay
- 1483 if (%delay !isnum 3-) var %delay = 7
- 1484 .timerBarnaJoinGuard 1 %delay _barna_join_guard_process
- 1485}
- 1486
- 1487alias _barna_join_guard_add {
- 1488 if (%barna_addon != 1) return 0
- 1489 if (%barna_join_guard != 1) return 0
- 1490 if ($1 == $null) return 0
- 1491
- 1492 var %nick = $1
- 1493 var %ln = $lower(%nick)
- 1494 var %chans = $2-
- 1495
- 1496 if (%chans == $null) var %chans = $_barna_nick_enabled_chans(%nick)
- 1497 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 1498 if (%chans == $null) return 0
- 1499
- 1500 ; Si ya hay trabajo o IP/cache, no anadimos nada.
- 1501 if ($_barna_join_guard_has_result(%nick)) return 0
- 1502
- 1503 var %ttl = %barna_join_guard_ttl
- 1504 if (%ttl !isnum 10-) var %ttl = 25
- 1505
- 1506 set $+(-u,%ttl) %barna_jguard. $+ %ln %chans
- 1507 set $+(-u,%ttl) %barna_jguard_ts. $+ %ln $ctime
- 1508 set $+(-u,%ttl) %barna_jguard_nick. $+ %ln %nick
- 1509
- 1510 if (!$istok(%barna_jguard_items,%ln,44)) {
- 1511 if (%barna_jguard_items == $null) set $+(-u,%ttl) %barna_jguard_items %ln
- 1512 else set $+(-u,%ttl) %barna_jguard_items $addtok(%barna_jguard_items,%ln,44)
- 1513 }
- 1514
- 1515 ; Limite duro para que nunca crezca sin control en canales grandes.
- 1516 var %max = %barna_join_guard_max
- 1517 if (%max !isnum 20-) var %max = 60
- 1518 while (($numtok(%barna_jguard_items,44) > %max) && (%barna_jguard_items != $null)) {
- 1519 var %old = $gettok(%barna_jguard_items,1,44)
- 1520 noop $_barna_join_guard_remove(%old)
- 1521 }
- 1522
- 1523 _barna_join_guard_schedule
- 1524 return 1
- 1525}
- 1526
- 1527alias _barna_join_guard_process {
- 1528 if (%barna_addon != 1) {
- 1529 .timerBarnaJoinGuard off
- 1530 unset %barna_jguard_items
- 1531 unset %barna_jguard.*
- 1532 unset %barna_jguard_ts.*
- 1533 unset %barna_jguard_nick.*
- 1534 return 0
- 1535 }
- 1536
- 1537 unset %barna_jguard_scheduled
- 1538
- 1539 if (%barna_join_guard != 1) return 0
- 1540 if (%barna_jguard_items == $null) return 0
- 1541
- 1542 var %items = %barna_jguard_items
- 1543 var %now = $ctime
- 1544 var %delay = %barna_join_guard_delay
- 1545 if (%delay !isnum 3-) var %delay = 7
- 1546
- 1547 var %ttl = %barna_join_guard_ttl
- 1548 if (%ttl !isnum 10-) var %ttl = 25
- 1549
- 1550 var %batch = %barna_join_guard_batch
- 1551 if (%batch !isnum 1-) var %batch = 8
- 1552
- 1553 var %newitems
- 1554 var %i = 1
- 1555 var %done = 0
- 1556
- 1557 while (%i <= $numtok(%items,44)) {
- 1558 var %ln = $gettok(%items,%i,44)
- 1559 var %nick = [ [ $+(%,barna_jguard_nick.,%ln) ] ]
- 1560 var %chans = [ [ $+(%,barna_jguard.,%ln) ] ]
- 1561 var %ts = [ [ $+(%,barna_jguard_ts.,%ln) ] ]
- 1562
- 1563 if (%nick == $null) var %nick = %ln
- 1564
- 1565 if (%ts !isnum 1-) {
- 1566 noop $_barna_join_guard_remove(%ln)
- 1567 goto barna_jguard_next
- 1568 }
- 1569
- 1570 var %age = $calc(%now - %ts)
- 1571
- 1572 if (%age < %delay) {
- 1573 if (%newitems == $null) var %newitems = %ln
- 1574 else var %newitems = $addtok(%newitems,%ln,44)
- 1575 goto barna_jguard_next
- 1576 }
- 1577
- 1578 if (%done >= %batch) {
- 1579 if (%newitems == $null) var %newitems = %ln
- 1580 else var %newitems = $addtok(%newitems,%ln,44)
- 1581 goto barna_jguard_next
- 1582 }
- 1583
- 1584 inc %done
- 1585
- 1586 ; Si el nick ya no comparte canal, no hacemos USERIP.
- 1587 if ($comchan(%nick,0) == 0) {
- 1588 noop $_barna_join_guard_remove(%ln)
- 1589 goto barna_jguard_next
- 1590 }
- 1591
- 1592 var %livechans = $_barna_nick_enabled_chans(%nick)
- 1593 if (%livechans == $null) {
- 1594 noop $_barna_join_guard_remove(%ln)
- 1595 goto barna_jguard_next
- 1596 }
- 1597
- 1598 ; Build 55:
- 1599 ; Si ya existe IP/cache/ASN real, quitamos el guard.
- 1600 ; Si solo hay lookup/USERIP pendiente, lo mantenemos hasta el TTL.
- 1601 if ($_barna_join_guard_has_result(%nick)) {
- 1602 noop $_barna_join_guard_remove(%ln)
- 1603 goto barna_jguard_next
- 1604 }
- 1605
- 1606 if (($_barna_nick_has_lookup_work(%nick)) && (%age < %ttl)) {
- 1607 if (%newitems == $null) var %newitems = %ln
- 1608 else var %newitems = $addtok(%newitems,%ln,44)
- 1609 goto barna_jguard_next
- 1610 }
- 1611
- 1612 ; Build 62:
- 1613 ; Rescate unico. Si ya hay IP pero no cache ASN, no repetimos USERIP:
- 1614 ; lanzamos consulta ASN directa. Si no hay IP, pedimos USERIP.
- 1615 var %guard_ip = $_barna_ip_get(%nick)
- 1616
- 1617 if (%guard_ip != $null) {
- 1618 _barna_dbg JOINGUARD rescata IP sin ASN, lanzo consulta ASN directa: nick= %nick ip= %guard_ip chans= %livechans age= %age ttl= %ttl
- 1619 _barna_q_add %nick %guard_ip %livechans
- 1620 }
- 1621 else {
- 1622 set -u90 %barna_qry. $+ %ln 1
- 1623 set -u90 %barna_lookup. $+ %ln 1
- 1624 set -u90 %barna_lookup_chans. $+ %ln %livechans
- 1625 unset %barna_ipdone. $+ %ln
- 1626 unset %barna_userip_sent_recent. $+ %ln
- 1627
- 1628 _barna_dbg JOINGUARD rescata JOIN sin IP/ASN, lanzo WHOIP: nick= %nick chans= %livechans age= %age ttl= %ttl
- 1629 _barna_userip_q_add %nick
- 1630 }
- 1631
- 1632 noop $_barna_join_guard_remove(%ln)
- 1633
- 1634 :barna_jguard_next
- 1635 inc %i
- 1636 }
- 1637
- 1638 if (%newitems != $null) set $+(-u,%ttl) %barna_jguard_items %newitems
- 1639 else {
- 1640 unset %barna_jguard_items
- 1641 _barna_join_guard_gc
- 1642 }
- 1643
- 1644 if (%barna_jguard_items != $null) _barna_join_guard_schedule
- 1645 return %done
- 1646}
- 1647
- 1648alias _barna_join_guard_trim_orphans {
- 1649 ; Build 59:
- 1650 ; En lugar de intentar borrar huerfanas una por una, reconstruimos JOINGUARD
- 1651 ; desde los items reales. Es mas seguro en mSL y evita que vars quede alto.
- 1652 ; Solo toca %barna_jguard* y temporales %barna_tmp_jg_*.
- 1653 ; NO toca %barna_chan.* ni %barna_asn.*.
- 1654
- 1655 var %items = %barna_jguard_items
- 1656
- 1657 if (%items == $null) {
- 1658 if ($var(%barna_jguard*,0) > 0) {
- 1659 .timerBarnaJoinGuard off
- 1660 .unset %barna_jguard*
- 1661 return 1
- 1662 }
- 1663 return 0
- 1664 }
- 1665
- 1666 var %ttl = %barna_join_guard_ttl
- 1667 if (%ttl !isnum 10-) var %ttl = 25
- 1668
- 1669 ; Limpiar temporales previos por seguridad.
- 1670 .unset %barna_tmp_jg_*
- 1671
- 1672 var %saved
- 1673 var %i = 1
- 1674 while (%i <= $numtok(%items,44)) {
- 1675 var %ln = $gettok(%items,%i,44)
- 1676 var %nick = [ [ $+(%,barna_jguard_nick.,%ln) ] ]
- 1677 var %chans = [ [ $+(%,barna_jguard.,%ln) ] ]
- 1678 var %ts = [ [ $+(%,barna_jguard_ts.,%ln) ] ]
- 1679
- 1680 if (%nick == $null) var %nick = %ln
- 1681
- 1682 ; Conservamos solo items con datos minimos y nick aun presente.
- 1683 if ((%ln != $null) && (%chans != $null) && (%ts isnum 1-) && ($comchan(%nick,0) > 0)) {
- 1684 set -u5 %barna_tmp_jg_nick. $+ %ln %nick
- 1685 set -u5 %barna_tmp_jg_chans. $+ %ln %chans
- 1686 if (%saved == $null) var %saved = %ln
- 1687 else var %saved = $addtok(%saved,%ln,44)
- 1688 }
- 1689
- 1690 inc %i
- 1691 }
- 1692
- 1693 ; Borrado amplio de solo JOINGUARD. No toca canales/ASN ni otras colas.
- 1694 .timerBarnaJoinGuard off
- 1695 .unset %barna_jguard*
- 1696
- 1697 ; Restaurar un estado minimo y limpio solo para items reales conservados.
- 1698 if (%saved != $null) {
- 1699 var %i = 1
- 1700 while (%i <= $numtok(%saved,44)) {
- 1701 var %ln = $gettok(%saved,%i,44)
- 1702 var %nick = [ [ $+(%,barna_tmp_jg_nick.,%ln) ] ]
- 1703 var %chans = [ [ $+(%,barna_tmp_jg_chans.,%ln) ] ]
- 1704
- 1705 if ((%nick != $null) && (%chans != $null)) {
- 1706 ; Reusar el add normal para mantener TTL, limite y scheduling.
- 1707 _barna_join_guard_add %nick %chans
- 1708 }
- 1709
- 1710 inc %i
- 1711 }
- 1712 }
- 1713
- 1714 .unset %barna_tmp_jg_*
- 1715 return 1
- 1716}
- 1717alias _barna_join_guard_gc {
- 1718 var %cnt = $var(%barna_jguard*,0)
- 1719 if (%cnt == 0) return 0
- 1720
- 1721 var %items = $_barna_join_guard_count
- 1722 var %max = %barna_join_guard_max
- 1723 if (%max !isnum 20-) var %max = 60
- 1724
- 1725 ; Build 56:
- 1726 ; Si no quedan items reales, o el contador supera el limite,
- 1727 ; limpiamos todos los restos JOINGUARD de forma amplia.
- 1728 ; Esto evita casos items=0 vars>0 timer=OFF tras muchas horas.
- 1729 if ((%items == 0) || (%items > %max)) {
- 1730 .timerBarnaJoinGuard off
- 1731 .unset %barna_jguard*
- 1732 return 1
- 1733 }
- 1734
- 1735 ; Build 59:
- 1736 ; Si hay pocos items reales pero muchas vars residuales,
- 1737 ; reconstruimos JOINGUARD desde los items reales y limpiamos huerfanas.
- 1738 var %expected = $calc((%items * 3) + 6)
- 1739 if (%cnt > %expected) {
- 1740 noop $_barna_join_guard_trim_orphans
- 1741 }
- 1742
- 1743 ; Build 57:
- 1744 ; Si hay items reales pero el timer quedo apagado, lo despertamos.
- 1745 ; No crea variables nuevas ni toca canales/ASN; solo asegura que se procese
- 1746 ; el pequeno lote pendiente del JOINGUARD.
- 1747 if ((%items > 0) && ($timer(BarnaJoinGuard) == $null)) {
- 1748 _barna_join_guard_schedule
- 1749 return 0
- 1750 }
- 1751
- 1752 return 0
- 1753}
- 1754alias barna.jguardclean {
- 1755 .timerBarnaJoinGuard off
- 1756 .unset %barna_jguard*
- 1757 echo -s [ASN] JOINGUARD limpiado. Sin tocar canales/ASN.
- 1758}
- 1759
- 1760alias barna.jguardstatus {
- 1761 ; Build 57: el propio estado despierta el timer si hay items reales y quedo OFF.
- 1762 _barna_join_guard_gc
- 1763 echo -s [ASN] JOINGUARD enabled= %barna_join_guard items= $_barna_join_guard_count vars= $var(%barna_jguard*,0) timer= $iif($timer(BarnaJoinGuard),ON,OFF) delay= %barna_join_guard_delay ttl= %barna_join_guard_ttl max= %barna_join_guard_max batch= %barna_join_guard_batch
- 1764}
- 1765
- 1766
- 1767; ------------------------------------------------------------
- 1768; WHOIPRESCUE: rescate ligero de lookup/qry atascados
- 1769; Build 87: usa WHO/RAW354; no reencola nicks que ya no estan online.
- 1770; ------------------------------------------------------------
- 1771
- 1772alias _barna_userip_stuck_rescue_tick {
- 1773 if (%barna_addon != 1) return 0
- 1774 if (%barna_userip_stuck_rescue != 1) return 0
- 1775 if (%barna_userip_stuck_rescue_busy == 1) return 0
- 1776
- 1777 var %now = $ctime
- 1778 var %secs = %barna_userip_stuck_rescue_secs
- 1779 if (%secs !isnum 1-) var %secs = 1
- 1780
- 1781 if (%barna_userip_stuck_rescue_last != $null) {
- 1782 if ($calc(%now - %barna_userip_stuck_rescue_last) < %secs) return 0
- 1783 }
- 1784
- 1785 set -u8 %barna_userip_stuck_rescue_busy 1
- 1786 set %barna_userip_stuck_rescue_last %now
- 1787
- 1788 var %total = $var(%barna_lookup.*,0)
- 1789 if (%total <= 0) {
- 1790 unset %barna_userip_stuck_rescue_busy
- 1791 return 0
- 1792 }
- 1793
- 1794 var %batch = %barna_userip_stuck_rescue_batch
- 1795 if (%batch !isnum 1-) var %batch = 12
- 1796 if (%batch > 20) var %batch = 20
- 1797
- 1798 var %pos = %barna_userip_stuck_rescue_pos
- 1799 if (%pos !isnum 1-) var %pos = 1
- 1800 if (%pos > %total) var %pos = 1
- 1801
- 1802 var %done = 0
- 1803 var %rescued = 0
- 1804
- 1805 while ((%done < %batch) && (%total > 0)) {
- 1806 if (%pos > %total) var %pos = 1
- 1807
- 1808 var %var = $var(%barna_lookup.*,%pos)
- 1809 var %ln = $remove(%var,$+(%,barna_lookup.))
- 1810 var %nick = [ [ $+(%,barna_userip_q_nick.,%ln) ] ]
- 1811 if (%nick == $null) var %nick = %ln
- 1812
- 1813 if (%ln != $null) {
- 1814 var %livechans = $_barna_nick_enabled_chans(%nick)
- 1815 var %ip = $_barna_ip_get(%nick)
- 1816
- 1817 if ($_barna_is_join_exception(%nick)) {
- 1818 _barna_dbg EXCEPTIONSAFE WHOIPRESCUE omite nick exceptuado: nick= %nick
- 1819 _barna_exception_cleanup_nick %nick
- 1820 inc %done
- 1821 inc %pos
- 1822 continue
- 1823 }
- 1824
- 1825 if ($_barna_is_privileged_nick(%nick)) {
- 1826 _barna_dbg PRIVSAFE WHOIPRESCUE omite nick con @/+v: nick= %nick
- 1827 _barna_privileged_cleanup_nick %nick WHOIPRESCUE
- 1828 inc %done
- 1829 inc %pos
- 1830 continue
- 1831 }
- 1832
- 1833 ; Build 87:
- 1834 ; No usamos lookup_chans/seen como prueba de vida para reencolar WHOIP.
- 1835 ; Si el nick ya salio, esos datos pueden quedar unos segundos y provocar
- 1836 ; consultas inutiles tipo "isn't online". Solo se rescata si $comchan
- 1837 ; confirma que el nick sigue realmente en un canal activo.
- 1838 if (%livechans != $null) {
- 1839 if (%ip != $null) {
- 1840 if ($_barna_fast_asn_if_ip_ready(%nick,WHOIPRESCUE)) {
- 1841 inc %rescued
- 1842 }
- 1843 }
- 1844 else {
- 1845 ; Build 107:
- 1846 ; Si lookup/qry existen pero no hay trabajo WHOIP real, rompemos el estado
- 1847 ; y lanzamos WHO directo igual que /barna.trace. Reencolar por FIFO podia dejar
- 1848 ; de nuevo q_pending/sent_recent sin slot ni consulta viva.
- 1849 if (!$_barna_whoip_has_real_work(%nick)) {
- 1850 var %rttl = %barna_userip_stuck_rescue_recent_ttl
- 1851 if (%rttl !isnum 20-) var %rttl = 60
- 1852
- 1853 set $+(-u,%rttl) %barna_userip_stuck_rescue_recent. $+ %ln 1
- 1854 if ($_barna_trace_force_whoip(%nick,%livechans)) {
- 1855 _barna_dbg WHOIPRESCUE lookup/qry huerfano sin IP, WHO directo: nick= %nick chans= %livechans
- 1856 inc %rescued
- 1857 }
- 1858 }
- 1859 }
- 1860 }
- 1861 else {
- 1862 _barna_dbg WHOIPRESCUE limpia lookup de nick no online: nick= %nick
- 1863 _barna_userip_q_release %nick WHOIPRESCUE_OFFLINE
- 1864 unset %barna_lookup. $+ %ln
- 1865 unset %barna_lookup_chans. $+ %ln
- 1866 unset %barna_qry. $+ %ln
- 1867 unset %barna_ipdone. $+ %ln
- 1868 unset %barna_userip_stuck_rescue_recent. $+ %ln
- 1869 }
- 1870 }
- 1871
- 1872 inc %pos
- 1873 inc %done
- 1874 }
- 1875
- 1876 if (%pos > %total) var %pos = 1
- 1877 set %barna_userip_stuck_rescue_pos %pos
- 1878
- 1879 unset %barna_userip_stuck_rescue_busy
- 1880 return %rescued
- 1881}
- 1882
- 1883alias barna.useriprescuestatus {
- 1884 echo -s [ASN] WHOIPRESCUE enabled= %barna_userip_stuck_rescue lookup= $var(%barna_lookup.*,0) qry= $var(%barna_qry.*,0) recent= $var(%barna_userip_stuck_rescue_recent.*,0) pos= %barna_userip_stuck_rescue_pos secs= %barna_userip_stuck_rescue_secs batch= %barna_userip_stuck_rescue_batch timer= BarnaMaintenance autoscan= %barna_autonickscan scan_recent= $var(%barna_autonickscan_recent.*,0) scan_cpos= %barna_autonickscan_cpos scan_npos= %barna_autonickscan_npos scan_secs= %barna_autonickscan_secs scan_batch= %barna_autonickscan_batch qlimit= %barna_autonickscan_q_limit
- 1885}
- 1886
- 1887alias barna.useriprescueclean {
- 1888 unset %barna_userip_stuck_rescue_recent.*
- 1889 unset %barna_userip_stuck_rescue_pos
- 1890 unset %barna_userip_stuck_rescue_last
- 1891 unset %barna_userip_stuck_rescue_busy
- 1892 echo -s [ASN] WHOIPRESCUE limpiado. Sin tocar canales/ASN.
- 1893}
- 1894
- 1895alias barna.whoiprescuestatus {
- 1896 barna.useriprescuestatus
- 1897}
- 1898
- 1899alias barna.whoiprescueclean {
- 1900 barna.useriprescueclean
- 1901}
- 1902
- 1903alias barna.autoscanstatus {
- 1904 echo -s [ASN] AUTONICKSCAN enabled= %barna_autonickscan JOINONLY= 1 delay_join= %barna_join_delay_secs pending_delay= $_barna_join_delay_count delay_vars= $var(%barna_join_delay_*,0) lightvars= %barna_join_delay_lightvars recent_antiguo= $var(%barna_autonickscan_recent.*,0) whoip_q= $_barna_userip_q_count timer= OFF
- 1905}
- 1906
- 1907alias barna.autoscanclean {
- 1908 unset %barna_autonickscan_recent.*
- 1909 unset %barna_autonickscan_cpos
- 1910 unset %barna_autonickscan_npos
- 1911 unset %barna_autonickscan_last
- 1912 unset %barna_autonickscan_busy
- 1913 echo -s [ASN] AUTONICKSCAN limpiado. Sin tocar canales/ASN.
- 1914}
- 1915
- 1916alias barna.joindelayclean {
- 1917 .unset %barna_join_delay_*
- 1918 echo -s [ASN] JOIN_DELAY limpiado. Sin tocar canales/ASN ni cache ASN.
- 1919}
- 1920
- 1921; ------------------------------------------------------------
- 1922; BLOQUE 4.4C
- 1923; AUTONICKSCAN: rescate ultraligero de nicks online sin JOIN/lookup
- 1924; Build 111: escanea pocos nicks por CoreTick, sin %barna_seen.* persistente.
- 1925; ------------------------------------------------------------
- 1926
- 1927alias -l _barna_autonickscan_skip {
- 1928 if ($1 == $null) return 1
- 1929
- 1930 var %n = $1
- 1931
- 1932 if (%n == $me) return 1
- 1933 if ($_barna_is_join_exception(%n)) return 1
- 1934 if ($_barna_is_privileged_nick(%n)) return 1
- 1935
- 1936 return 0
- 1937}
- 1938
- 1939alias -l _barna_autonickscan_candidate {
- 1940 if ($1 == $null) return 0
- 1941
- 1942 var %nick = $1
- 1943 var %fromchan = $2
- 1944 var %ln = $lower(%nick)
- 1945 var %chans = $_barna_nick_enabled_chans(%nick)
- 1946
- 1947 if ($_barna_autonickscan_skip(%nick)) {
- 1948 if ($_barna_is_privileged_nick(%nick)) _barna_privileged_cleanup_nick %nick AUTONICKSCAN
- 1949 return 0
- 1950 }
- 1951 if (%chans == $null) return 0
- 1952
- 1953 ; Si ya hay IP, no repetir WHOIP: aplicar cache o lanzar ASN directa si falta cache.
- 1954 var %ip = $_barna_ip_get(%nick)
- 1955 if (%ip != $null) {
- 1956 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 1957 _barna_dbg AUTONICKSCAN aplica cache ASN: nick= %nick ip= %ip chans= %chans from= %fromchan
- 1958 return 1
- 1959 }
- 1960
- 1961 if (($_barna_trace_queue_find(%nick) == $null) && (!$_barna_nick_has_lookup_work(%nick))) {
- 1962 if ([ [ $+(%,barna_autonickscan_recent.,%ln) ] ] == 1) return 0
- 1963
- 1964 var %ttl_ip = %barna_autonickscan_recent_ttl
- 1965 if (%ttl_ip !isnum 30-) var %ttl_ip = 90
- 1966
- 1967 set $+(-u,%ttl_ip) %barna_autonickscan_recent. $+ %ln 1
- 1968 _barna_dbg AUTONICKSCAN IP sin cache, lanza ASN directa: nick= %nick ip= %ip chans= %chans from= %fromchan
- 1969 _barna_q_add %nick %ip %chans
- 1970 _barna_q_process
- 1971 _barna_asn_pump_start_if_needed
- 1972 return 1
- 1973 }
- 1974
- 1975 return 0
- 1976 }
- 1977
- 1978 ; Si no hay IP y no hay trabajo real, reencolar WHOIP limpio.
- 1979 ; No respetamos sent_recent fantasma: el propio AUTONICKSCAN tiene TTL reciente.
- 1980 if ($_barna_nick_has_lookup_work(%nick)) return 0
- 1981 if ($_barna_trace_queue_find(%nick) != $null) return 0
- 1982 if ([ [ $+(%,barna_autonickscan_recent.,%ln) ] ] == 1) return 0
- 1983
- 1984 var %ttl = %barna_autonickscan_recent_ttl
- 1985 if (%ttl !isnum 30-) var %ttl = 90
- 1986
- 1987 set $+(-u,%ttl) %barna_autonickscan_recent. $+ %ln 1
- 1988
- 1989 ; Romper marcas fantasma antes de llamar a _barna_lookup_start, porque
- 1990 ; _barna_userip_q_add no encola si ve sent_recent=1.
- 1991 unset %barna_userip_sent_recent. $+ %ln
- 1992 unset %barna_userip_sent_ts. $+ %ln
- 1993 unset %barna_userip_q_pending. $+ %ln
- 1994 unset %barna_userip_q_chans. $+ %ln
- 1995 unset %barna_ipdone. $+ %ln
- 1996
- 1997 _barna_dbg AUTONICKSCAN reencola WHOIP nick online sin consulta real: nick= %nick chans= %chans from= %fromchan
- 1998 _barna_lookup_start %nick
- 1999
- 2000 return 1
- 2001}
- 2002
- 2003alias -l _barna_autonickscan_tick {
- 2004 if (%barna_addon != 1) return 0
- 2005 if (%barna_autonickscan != 1) return 0
- 2006 if (%barna_autonickscan_busy == 1) return 0
- 2007
- 2008 var %now = $ctime
- 2009 var %secs = %barna_autonickscan_secs
- 2010 if (%secs !isnum 3-) var %secs = 6
- 2011
- 2012 if (%barna_autonickscan_last != $null) {
- 2013 if ($calc(%now - %barna_autonickscan_last) < %secs) return 0
- 2014 }
- 2015
- 2016 var %qlimit = %barna_autonickscan_q_limit
- 2017 if (%qlimit !isnum 10-) var %qlimit = 60
- 2018 if ($_barna_userip_q_count >= %qlimit) return 0
- 2019
- 2020 var %chan_total = $chan(0)
- 2021 if (%chan_total <= 0) return 0
- 2022
- 2023 set -u10 %barna_autonickscan_busy 1
- 2024 set %barna_autonickscan_last %now
- 2025
- 2026 var %batch = %barna_autonickscan_batch
- 2027 if (%batch !isnum 1-) var %batch = 12
- 2028 if (%batch > 12) var %batch = 12
- 2029
- 2030 var %cpos = %barna_autonickscan_cpos
- 2031 var %npos = %barna_autonickscan_npos
- 2032 if (%cpos !isnum 1-) var %cpos = 1
- 2033 if (%npos !isnum 1-) var %npos = 1
- 2034 if (%cpos > %chan_total) var %cpos = 1
- 2035
- 2036 var %done = 0
- 2037 var %rescued = 0
- 2038 var %safety = 0
- 2039 var %safetymax = $calc((%chan_total * 3) + %batch + 10)
- 2040
- 2041 while ((%done < %batch) && (%safety < %safetymax)) {
- 2042 inc %safety
- 2043
- 2044 if ($_barna_userip_q_count >= %qlimit) {
- 2045 var %done = %batch
- 2046 }
- 2047 else {
- 2048 if (%cpos > %chan_total) var %cpos = 1
- 2049
- 2050 var %chan = $chan(%cpos)
- 2051 var %chan = $_barna_chan_name_clean(%chan)
- 2052
- 2053 if ((%chan != $null) && ($_barna_is_chan_enabled(%chan))) {
- 2054 var %ntotal = $nick(%chan,0)
- 2055
- 2056 if (%ntotal > 0) {
- 2057 if (%npos < 1) var %npos = 1
- 2058
- 2059 if (%npos <= %ntotal) {
- 2060 var %nick = $nick(%chan,%npos)
- 2061 inc %npos
- 2062 inc %done
- 2063
- 2064 if (%nick != $null) {
- 2065 if ($_barna_autonickscan_candidate(%nick,%chan)) inc %rescued
- 2066 }
- 2067 }
- 2068 else {
- 2069 inc %cpos
- 2070 var %npos = 1
- 2071 }
- 2072 }
- 2073 else {
- 2074 inc %cpos
- 2075 var %npos = 1
- 2076 }
- 2077 }
- 2078 else {
- 2079 inc %cpos
- 2080 var %npos = 1
- 2081 }
- 2082 }
- 2083 }
- 2084
- 2085 if (%cpos > %chan_total) var %cpos = 1
- 2086 if (%npos < 1) var %npos = 1
- 2087
- 2088 set %barna_autonickscan_cpos %cpos
- 2089 set %barna_autonickscan_npos %npos
- 2090
- 2091 unset %barna_autonickscan_busy
- 2092 return %rescued
- 2093}
- 2094
- 2095; ------------------------------------------------------------
- 2096; SEENGUARD: rescate ligero de nicks vistos sin consulta activa
- 2097; ------------------------------------------------------------
- 2098
- 2099alias _barna_seen_rescue_has_result {
- 2100 if ($1 == $null) return 1
- 2101
- 2102 var %nick = $1
- 2103 var %ln = $lower(%nick)
- 2104
- 2105 ; Build 62:
- 2106 ; IP sola NO basta. Si hay IP pero no cache ASN ni asn_done,
- 2107 ; SEENGUARD debe lanzar consulta ASN directa, no pedir WHOIP de nuevo.
- 2108 if ([ [ $+(%,barna_asn_done.,%ln) ] ] == 1) return 1
- 2109
- 2110 var %ip = $_barna_ip_get(%nick)
- 2111 if (%ip != $null) {
- 2112 var %key = $_barna_asn_cache_key(%ip)
- 2113 if ($_barna_asn_cache_key_valid(%key)) return 1
- 2114 }
- 2115
- 2116 return 0
- 2117}
- 2118
- 2119alias _barna_seen_rescue_tick {
- 2120 ; Build 60:
- 2121 ; Rescate de seguridad para casos tipo "visto_sin_consulta_activa".
- 2122 ; Escanea pocos %barna_seen.* por ciclo y reencola WHOIP una sola vez si:
- 2123 ; - el nick sigue en canal activo comun
- 2124 ; - no tiene IP/cache/ASN real
- 2125 ; - no tiene lookup/USERIP/ASN en curso
- 2126 ; - no fue rescatado recientemente
- 2127 ; No toca %barna_chan.* ni %barna_asn.*.
- 2128
- 2129 if (%barna_addon != 1) return 0
- 2130 if (%barna_seen_rescue != 1) return 0
- 2131 if (%barna_seen_rescue_busy == 1) return 0
- 2132
- 2133 var %now = $ctime
- 2134 var %secs = %barna_seen_rescue_secs
- 2135 if (%secs !isnum 5-) var %secs = 10
- 2136
- 2137 if (%barna_seen_rescue_last != $null) {
- 2138 if ($calc(%now - %barna_seen_rescue_last) < %secs) return 0
- 2139 }
- 2140
- 2141 set -u8 %barna_seen_rescue_busy 1
- 2142 set %barna_seen_rescue_last %now
- 2143
- 2144 var %total = $var(%barna_seen.*,0)
- 2145 if (%total <= 0) {
- 2146 unset %barna_seen_rescue_busy
- 2147 return 0
- 2148 }
- 2149
- 2150 var %batch = %barna_seen_rescue_batch
- 2151 if (%batch !isnum 1-) var %batch = 20
- 2152 if (%batch > 30) var %batch = 30
- 2153
- 2154 var %pos = %barna_seen_rescue_pos
- 2155 if (%pos !isnum 1-) var %pos = 1
- 2156 if (%pos > %total) var %pos = 1
- 2157
- 2158 var %done = 0
- 2159 var %rescued = 0
- 2160
- 2161 while ((%done < %batch) && (%total > 0)) {
- 2162 if (%pos > %total) var %pos = 1
- 2163
- 2164 var %var = $var(%barna_seen.*,%pos)
- 2165 var %ln = $remove(%var,$+(%,barna_seen.))
- 2166 var %nick = %ln
- 2167
- 2168 if (%ln != $null) {
- 2169 var %livechans = $_barna_nick_enabled_chans(%nick)
- 2170
- 2171 if (%livechans != $null) {
- 2172 ; Mantener seen sincronizado con canales vivos.
- 2173 _barna_seen_add %nick $gettok(%livechans,1,44)
- 2174
- 2175 if (!$_barna_seen_rescue_has_result(%nick)) {
- 2176 if (!$_barna_nick_has_lookup_work(%nick)) {
- 2177 if ([ [ $+(%,barna_seen_rescue_recent.,%ln) ] ] != 1) {
- 2178 set -u120 %barna_seen_rescue_recent. $+ %ln 1
- 2179 var %rescue_ip = $_barna_ip_get(%nick)
- 2180
- 2181 if (%rescue_ip != $null) {
- 2182 _barna_dbg SEENGUARD rescata IP sin ASN, lanzo consulta ASN directa: nick= %nick ip= %rescue_ip chans= %livechans
- 2183 _barna_q_add %nick %rescue_ip %livechans
- 2184 }
- 2185 else {
- 2186 set -u90 %barna_lookup. $+ %ln 1
- 2187 set -u90 %barna_lookup_chans. $+ %ln %livechans
- 2188 set -u90 %barna_qry. $+ %ln 1
- 2189 unset %barna_ipdone. $+ %ln
- 2190 unset %barna_userip_sent_recent. $+ %ln
- 2191
- 2192 _barna_dbg SEENGUARD rescata nick visto sin IP/ASN, lanzo WHOIP: nick= %nick chans= %livechans
- 2193 _barna_userip_q_add %nick
- 2194 }
- 2195
- 2196 inc %rescued
- 2197 }
- 2198 }
- 2199 }
- 2200 }
- 2201 }
- 2202
- 2203 inc %pos
- 2204 inc %done
- 2205 }
- 2206
- 2207 if (%pos > %total) var %pos = 1
- 2208 set %barna_seen_rescue_pos %pos
- 2209
- 2210 unset %barna_seen_rescue_busy
- 2211 return %rescued
- 2212}
- 2213
- 2214alias barna.seenguardstatus {
- 2215 echo -s [ASN] SEENGUARD enabled= %barna_seen_rescue seen= $var(%barna_seen.*,0) recent= $var(%barna_seen_rescue_recent.*,0) pos= %barna_seen_rescue_pos secs= %barna_seen_rescue_secs batch= %barna_seen_rescue_batch timer= CoreTick
- 2216}
- 2217
- 2218alias barna.seenguardclean {
- 2219 unset %barna_seen_rescue_recent.*
- 2220 unset %barna_seen_rescue_pos
- 2221 unset %barna_seen_rescue_last
- 2222 unset %barna_seen_rescue_busy
- 2223 echo -s [ASN] SEENGUARD limpiado. Sin tocar canales/ASN ni seen.
- 2224}
- 2225
- 2226alias _barna_joinfix_q_count {
- 2227 var %n = %barna_joinfix_q_count_real
- 2228 if (%n !isnum 1-) return 0
- 2229 return %n
- 2230}
- 2231
- 2232alias _barna_joinfix_q_count_inc {
- 2233 var %n = %barna_joinfix_q_count_real
- 2234 if (%n == $null) var %n = 0
- 2235 inc %n
- 2236 set -u120 %barna_joinfix_q_count_real %n
- 2237}
- 2238
- 2239alias _barna_joinfix_q_count_dec {
- 2240 var %n = %barna_joinfix_q_count_real
- 2241 if (%n == $null) var %n = 0
- 2242 dec %n
- 2243 if (%n < 0) var %n = 0
- 2244 if (%n == 0) unset %barna_joinfix_q_count_real
- 2245 else set -u120 %barna_joinfix_q_count_real %n
- 2246}
- 2247
- 2248alias _barna_joinfix_q_drop_oldest_one {
- 2249 var %head = %barna_joinfix_q_head
- 2250 var %tail = %barna_joinfix_q_tail
- 2251 var %guard = 0
- 2252
- 2253 if ((%head == $null) || (%tail == $null)) return 0
- 2254
- 2255 while ((%head <= %tail) && (%guard < 100)) {
- 2256 inc %guard
- 2257 var %ln = [ [ $+(%,barna_joinfix_q_item.,%head) ] ]
- 2258 unset %barna_joinfix_q_item. $+ %head
- 2259 set %barna_joinfix_q_head $calc(%head + 1)
- 2260
- 2261 if (%ln != $null) {
- 2262 unset %barna_joinfix_q_slot. $+ %ln
- 2263 unset %barna_joinfix_q_pending. $+ %ln
- 2264 unset %barna_joinfix_q_nick. $+ %ln
- 2265 unset %barna_joinfix_q_chans. $+ %ln
- 2266 unset %barna_joinfix_q_ts. $+ %ln
- 2267 _barna_joinfix_q_count_dec
- 2268 return 1
- 2269 }
- 2270
- 2271 var %head = %barna_joinfix_q_head
- 2272 }
- 2273
- 2274 return 0
- 2275}
- 2276
- 2277alias _barna_joinfix_q_shed_if_needed {
- 2278 var %max = %barna_joinfix_q_max_pending
- 2279 var %to = %barna_joinfix_q_shed_to
- 2280 var %cnt = $_barna_joinfix_q_count
- 2281 var %guard = 0
- 2282
- 2283 if (%max !isnum 20-) var %max = 80
- 2284 if (%to !isnum 5-) var %to = 40
- 2285 if (%to >= %max) var %to = $calc(%max - 10)
- 2286 if (%to < 1) var %to = 1
- 2287
- 2288 if (%cnt <= %max) return 0
- 2289
- 2290 while ((%cnt > %to) && (%guard < 200)) {
- 2291 inc %guard
- 2292 if (!$_barna_joinfix_q_drop_oldest_one) break
- 2293 var %cnt = $_barna_joinfix_q_count
- 2294 }
- 2295
- 2296 return 1
- 2297}
- 2298
- 2299alias _barna_joinfix_q_add {
- 2300 if ($1 == $null) return
- 2301
- 2302 var %nick = $1
- 2303 var %ln = $lower(%nick)
- 2304 var %chans = $2-
- 2305
- 2306 if (%chans == $null) var %chans = $_barna_nick_enabled_chans(%nick)
- 2307 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 2308 if (%chans == $null) return
- 2309
- 2310 if ([ [ $+(%,barna_joinfix_q_pending.,%ln) ] ] == 1) {
- 2311 set -u90 %barna_joinfix_q_chans. $+ %ln %chans
- 2312 set -u90 %barna_joinfix_q_nick. $+ %ln %nick
- 2313 return
- 2314 }
- 2315
- 2316 noop $_barna_joinfix_q_shed_if_needed
- 2317
- 2318 var %tail = %barna_joinfix_q_tail
- 2319 if (%tail !isnum) var %tail = 0
- 2320 inc %tail
- 2321
- 2322 set %barna_joinfix_q_tail %tail
- 2323 if (%barna_joinfix_q_head == $null) set %barna_joinfix_q_head %tail
- 2324
- 2325 set -u90 %barna_joinfix_q_item. $+ %tail %ln
- 2326 set -u90 %barna_joinfix_q_slot. $+ %ln %tail
- 2327 set -u90 %barna_joinfix_q_pending. $+ %ln 1
- 2328 set -u90 %barna_joinfix_q_nick. $+ %ln %nick
- 2329 set -u90 %barna_joinfix_q_chans. $+ %ln %chans
- 2330 set -u90 %barna_joinfix_q_ts. $+ %ln $ctime
- 2331 _barna_joinfix_q_count_inc
- 2332 _barna_core_start
- 2333}
- 2334
- 2335alias _barna_joinfix_q_process {
- 2336 if (%barna_addon != 1) return 0
- 2337
- 2338 var %head = %barna_joinfix_q_head
- 2339 var %tail = %barna_joinfix_q_tail
- 2340 var %batch = %barna_joinfix_q_batch
- 2341 var %done = 0
- 2342 var %guard = 0
- 2343
- 2344 if (%batch !isnum 1-) var %batch = 3
- 2345 if ((%head == $null) || (%tail == $null)) return 0
- 2346
- 2347 while ((%head <= %tail) && (%done < %batch) && (%guard < 200)) {
- 2348 inc %guard
- 2349
- 2350 var %ln = [ [ $+(%,barna_joinfix_q_item.,%head) ] ]
- 2351 unset %barna_joinfix_q_item. $+ %head
- 2352 set %barna_joinfix_q_head $calc(%head + 1)
- 2353
- 2354 if (%ln == $null) {
- 2355 var %head = %barna_joinfix_q_head
- 2356 continue
- 2357 }
- 2358
- 2359 var %nick = [ [ $+(%,barna_joinfix_q_nick.,%ln) ] ]
- 2360 var %chans = [ [ $+(%,barna_joinfix_q_chans.,%ln) ] ]
- 2361 var %ts = [ [ $+(%,barna_joinfix_q_ts.,%ln) ] ]
- 2362
- 2363 unset %barna_joinfix_q_slot. $+ %ln
- 2364 unset %barna_joinfix_q_pending. $+ %ln
- 2365 unset %barna_joinfix_q_nick. $+ %ln
- 2366 unset %barna_joinfix_q_chans. $+ %ln
- 2367 unset %barna_joinfix_q_ts. $+ %ln
- 2368 _barna_joinfix_q_count_dec
- 2369
- 2370 if (%nick == $null) var %nick = %ln
- 2371 if (%ts == $null) var %ts = $ctime
- 2372
- 2373 ; Espera minima para dejar que el JOIN normal y RAW340 hagan su trabajo.
- 2374 if ($calc($ctime - %ts) < 12) {
- 2375 _barna_joinfix_q_add %nick %chans
- 2376 var %head = %barna_joinfix_q_head
- 2377 continue
- 2378 }
- 2379
- 2380 if (%chans == $null) var %chans = $_barna_nick_enabled_chans(%nick)
- 2381 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 2382 if (%chans == $null) {
- 2383 var %head = %barna_joinfix_q_head
- 2384 inc %done
- 2385 continue
- 2386 }
- 2387
- 2388 if ($_barna_nick_has_lookup_work(%nick)) {
- 2389 ; JOINFIX2:
- 2390 ; Si el nick sigue en USERIP/RAW340/ASN, NO lo damos por resuelto.
- 2391 ; Lo volvemos a vigilar unas cuantas vueltas para detectar el caso:
- 2392 ; USERIP en cola -> no llega RAW340 -> expira lookup -> queda visto_sin_consulta_activa.
- 2393 var %watchtry = [ [ $+(%,barna_joinfix_watchtry.,%ln) ] ]
- 2394 if (%watchtry == $null) var %watchtry = 0
- 2395 inc %watchtry
- 2396
- 2397 var %watchmax = %barna_joinfix_watch_max
- 2398 if (%watchmax !isnum 1-) var %watchmax = 8
- 2399
- 2400 if (%watchtry <= %watchmax) {
- 2401 set -u300 %barna_joinfix_watchtry. $+ %ln %watchtry
- 2402 _barna_joinfix_q_add %nick %chans
- 2403 _barna_dbg JOINFIX mantiene vigilancia: nick= %nick try= %watchtry max= %watchmax chans= %chans
- 2404 }
- 2405 else {
- 2406 unset %barna_joinfix_watchtry. $+ %ln
- 2407 _barna_dbg JOINFIX deja vigilancia por limite: nick= %nick max= %watchmax chans= %chans
- 2408 }
- 2409
- 2410 var %head = %barna_joinfix_q_head
- 2411 inc %done
- 2412 continue
- 2413 }
- 2414
- 2415 unset %barna_joinfix_watchtry. $+ %ln
- 2416
- 2417 if ([ [ $+(%,barna_ipdone.,%ln) ] ] == 1) unset %barna_ipdone. $+ %ln
- 2418
- 2419 noop $_barna_joinfix_recheck_if_needed(%nick,JOINFIX_ORPHAN)
- 2420
- 2421 var %head = %barna_joinfix_q_head
- 2422 inc %done
- 2423 }
- 2424
- 2425 if (%barna_joinfix_q_head > %barna_joinfix_q_tail) {
- 2426 unset %barna_joinfix_q_head
- 2427 unset %barna_joinfix_q_tail
- 2428 unset %barna_joinfix_q_count_real
- 2429 }
- 2430
- 2431 return %done
- 2432}
- 2433
- 2434
- 2435alias _barna_nick_in_seen {
- 2436 if ($1 == $null) return 0
- 2437 if ($2 == $null) return 0
- 2438
- 2439 var %nick = $1
- 2440 var %seen = $2
- 2441 var %i = 1
- 2442
- 2443 while (%i <= $numtok(%seen,44)) {
- 2444 var %c = $gettok(%seen,%i,44)
- 2445
- 2446 if (%c != $null) {
- 2447 if ($me ison %c) {
- 2448 if (%nick ison %c) return 1
- 2449 }
- 2450 }
- 2451
- 2452 inc %i
- 2453 }
- 2454
- 2455 return 0
- 2456}
- 2457
- 2458; ------------------------------------------------------------
- 2459; BLOQUE 3.3
- 2460; CACHE DE PREFIJOS ASN MALOS
- 2461; ------------------------------------------------------------
- 2462
- 2463alias _barna_bad_prefix_active_owners {
- 2464 if ($1 == $null) return
- 2465 if ($2 == $null) return
- 2466
- 2467 var %chan = $1
- 2468 var %owners = $replace($2-,$chr(32),$chr(44))
- 2469 var %out
- 2470 var %i = 1
- 2471
- 2472 ; Builds anteriores guardaban solo valor 1, sin ASN propietario.
- 2473 ; No es seguro sancionar con esas entradas: se consideran obsoletas.
- 2474 if (%owners == 1) return
- 2475
- 2476 while (%i <= $numtok(%owners,44)) {
- 2477 var %asn = $_barna_norm_asn($gettok(%owners,%i,44))
- 2478
- 2479 if ($regex(%asn,/^AS\d+$/i)) {
- 2480 if ($_barna_asn_in_chan(%chan,%asn)) {
- 2481 if (%out == $null) var %out = %asn
- 2482 else if (!$istok(%out,%asn,44)) var %out = $addtok(%out,%asn,44)
- 2483 }
- 2484 }
- 2485
- 2486 inc %i
- 2487 }
- 2488
- 2489 return %out
- 2490}
- 2491
- 2492alias _barna_bad_prefix_prune_channel {
- 2493 if ($1 == $null) return 0
- 2494
- 2495 var %chan = $_barna_chan_name_clean($1)
- 2496 var %key = $_barna_chan_key(%chan)
- 2497 var %ttl = %barna_badpfx_ttl
- 2498 var %changed = 0
- 2499 var %i
- 2500
- 2501 if (%key == $null) return 0
- 2502 if (%ttl !isnum 60-) var %ttl = 7200
- 2503
- 2504 var %i = $var($+(%,barna_badpfx2.,%key,.*),0)
- 2505 while (%i > 0) {
- 2506 var %full = $var($+(%,barna_badpfx2.,%key,.*),%i)
- 2507 var %owners = $var($+(%,barna_badpfx2.,%key,.*),%i).value
- 2508 var %valid = $_barna_bad_prefix_active_owners(%chan,%owners)
- 2509 var %suffix = $remove(%full,$+(%,barna_badpfx2.,%key,.))
- 2510
- 2511 if (%valid == $null) {
- 2512 unset %barna_badpfx2. $+ %key $+ . $+ %suffix
- 2513 inc %changed
- 2514 }
- 2515 else if (%valid != %owners) {
- 2516 set $+(-u,%ttl) %barna_badpfx2. $+ %key $+ . $+ %suffix %valid
- 2517 inc %changed
- 2518 }
- 2519
- 2520 dec %i
- 2521 }
- 2522
- 2523 var %i = $var($+(%,barna_badpfx3.,%key,.*),0)
- 2524 while (%i > 0) {
- 2525 var %full = $var($+(%,barna_badpfx3.,%key,.*),%i)
- 2526 var %owners = $var($+(%,barna_badpfx3.,%key,.*),%i).value
- 2527 var %valid = $_barna_bad_prefix_active_owners(%chan,%owners)
- 2528 var %suffix = $remove(%full,$+(%,barna_badpfx3.,%key,.))
- 2529
- 2530 if (%valid == $null) {
- 2531 unset %barna_badpfx3. $+ %key $+ . $+ %suffix
- 2532 inc %changed
- 2533 }
- 2534 else if (%valid != %owners) {
- 2535 set $+(-u,%ttl) %barna_badpfx3. $+ %key $+ . $+ %suffix %valid
- 2536 inc %changed
- 2537 }
- 2538
- 2539 dec %i
- 2540 }
- 2541
- 2542 return %changed
- 2543}
- 2544
- 2545alias barna.pfxprune {
- 2546 if ($1 != $null) {
- 2547 var %done = $_barna_bad_prefix_prune_channel($1)
- 2548 echo -a [ASN] Prefijos obsoletos revisados en $1 $+ : actualizados/eliminados= %done
- 2549 return
- 2550 }
- 2551
- 2552 var %total = 0
- 2553 var %channels = 0
- 2554 var %i = $var(%barna_chan.*,0)
- 2555
- 2556 while (%i > 0) {
- 2557 var %v = $var(%barna_chan.*,%i)
- 2558 var %key = $remove(%v,$+(%,barna_chan.))
- 2559
- 2560 if (%key != $null) {
- 2561 var %chan = $+($chr(35),%key)
- 2562 var %done = $_barna_bad_prefix_prune_channel(%chan)
- 2563 inc %total %done
- 2564 inc %channels
- 2565 }
- 2566
- 2567 dec %i
- 2568 }
- 2569
- 2570 echo -a [ASN] Prefijos obsoletos revisados en todos los canales: canales= %channels actualizados/eliminados= %total
- 2571}
- 2572
- 2573alias barna.pfxstatus {
- 2574 if ($1 == $null) {
- 2575 echo -a [ASN] PFXSTATUS global: badpfx2= $var(%barna_badpfx2.*,0) badpfx3= $var(%barna_badpfx3.*,0) ttl= %barna_badpfx_ttl
- 2576 echo -a [ASN] Uso: /barna.pfxstatus <#canal> [IP]
- 2577 return
- 2578 }
- 2579
- 2580 var %chan = $_barna_chan_name_clean($1)
- 2581 var %key = $_barna_chan_key(%chan)
- 2582 var %p2n = $var($+(%,barna_badpfx2.,%key,.*),0)
- 2583 var %p3n = $var($+(%,barna_badpfx3.,%key,.*),0)
- 2584 var %ip = $2
- 2585
- 2586 echo -a [ASN] PFXSTATUS canal= %chan key= %key badpfx2= %p2n badpfx3= %p3n ASN_activos= $_barna_get_asn_list(%chan)
- 2587
- 2588 var %i = %p2n
- 2589 while (%i > 0) {
- 2590 var %name = $var($+(%,barna_badpfx2.,%key,.*),%i)
- 2591 var %owners = $var($+(%,barna_badpfx2.,%key,.*),%i).value
- 2592 echo -a [ASN] PFX2 variable= %name owners= %owners owners_activos= $_barna_bad_prefix_active_owners(%chan,%owners)
- 2593 dec %i
- 2594 }
- 2595
- 2596 var %i = %p3n
- 2597 while (%i > 0) {
- 2598 var %name = $var($+(%,barna_badpfx3.,%key,.*),%i)
- 2599 var %owners = $var($+(%,barna_badpfx3.,%key,.*),%i).value
- 2600 echo -a [ASN] PFX3 variable= %name owners= %owners owners_activos= $_barna_bad_prefix_active_owners(%chan,%owners)
- 2601 dec %i
- 2602 }
- 2603
- 2604 if (%ip != $null) {
- 2605 echo -a [ASN] PFXSTATUS prueba IP= %ip pfx2= $_barna_ip_pfx2(%ip) pfx3= $_barna_ip_pfx3(%ip) match_canales= $_barna_bad_prefix_match_chans(%ip,%chan)
- 2606 }
- 2607}
- 2608
- 2609alias _barna_bad_prefix_store {
- 2610 if ($1 == $null) return
- 2611 if ($2 == $null) return
- 2612 if ($3 == $null) return
- 2613
- 2614 var %ip = $1
- 2615 var %asn = $_barna_norm_asn($2)
- 2616 var %chans = $3-
- 2617 var %pfx2 = $_barna_ip_pfx2(%ip)
- 2618 var %pfx3 = $_barna_ip_pfx3(%ip)
- 2619 var %ttl = %barna_badpfx_ttl
- 2620 var %i = 1
- 2621
- 2622 if (!$regex(%asn,/^AS\d+$/i)) return
- 2623 if (%ttl !isnum 60-) var %ttl = 7200
- 2624 if (%chans == $null) return
- 2625
- 2626 var %chans = $replace(%chans,$chr(32),$chr(44))
- 2627
- 2628 while (%i <= $numtok(%chans,44)) {
- 2629 var %c = $_barna_chan_name_clean($gettok(%chans,%i,44))
- 2630 var %key = $_barna_chan_key(%c)
- 2631
- 2632 ; Defensa final: no crear patrones si el ASN ya fue retirado del canal.
- 2633 if ((%key != $null) && ($_barna_asn_in_chan(%c,%asn))) {
- 2634 if (%pfx2 != $null) {
- 2635 var %owners2 = [ [ $+(%,barna_badpfx2.,%key,.,$replace(%pfx2,.,_)) ] ]
- 2636 var %owners2 = $_barna_bad_prefix_active_owners(%c,%owners2)
- 2637 if (%owners2 == $null) var %owners2 = %asn
- 2638 else if (!$istok(%owners2,%asn,44)) var %owners2 = $addtok(%owners2,%asn,44)
- 2639 set $+(-u,%ttl) %barna_badpfx2. $+ %key $+ . $+ $replace(%pfx2,.,_) %owners2
- 2640 _barna_dbg BADPFX guardado por canal/ASN: canal= %c asn= %asn pfx2= %pfx2 owners= %owners2 ttl= %ttl
- 2641 }
- 2642
- 2643 if (%pfx3 != $null) {
- 2644 var %owners3 = [ [ $+(%,barna_badpfx3.,%key,.,$replace(%pfx3,.,_)) ] ]
- 2645 var %owners3 = $_barna_bad_prefix_active_owners(%c,%owners3)
- 2646 if (%owners3 == $null) var %owners3 = %asn
- 2647 else if (!$istok(%owners3,%asn,44)) var %owners3 = $addtok(%owners3,%asn,44)
- 2648 set $+(-u,%ttl) %barna_badpfx3. $+ %key $+ . $+ $replace(%pfx3,.,_) %owners3
- 2649 _barna_dbg BADPFX guardado por canal/ASN: canal= %c asn= %asn pfx3= %pfx3 owners= %owners3 ttl= %ttl
- 2650 }
- 2651 }
- 2652
- 2653 inc %i
- 2654 }
- 2655}
- 2656
- 2657alias _barna_bad_prefix_match_chans {
- 2658 if ($1 == $null) return
- 2659 if ($2 == $null) return
- 2660
- 2661 var %ip = $1
- 2662 var %chans = $2-
- 2663 var %pfx2 = $_barna_ip_pfx2(%ip)
- 2664 var %pfx3 = $_barna_ip_pfx3(%ip)
- 2665 var %ttl = %barna_badpfx_ttl
- 2666 var %out = $null
- 2667 var %i = 1
- 2668
- 2669 if (%ttl !isnum 60-) var %ttl = 7200
- 2670 var %chans = $replace(%chans,$chr(32),$chr(44))
- 2671
- 2672 while (%i <= $numtok(%chans,44)) {
- 2673 var %c = $_barna_chan_name_clean($gettok(%chans,%i,44))
- 2674 var %key = $_barna_chan_key(%c)
- 2675 var %hit = 0
- 2676
- 2677 if (%key != $null) {
- 2678 if (%pfx3 != $null) {
- 2679 var %owners3 = [ [ $+(%,barna_badpfx3.,%key,.,$replace(%pfx3,.,_)) ] ]
- 2680 var %valid3 = $_barna_bad_prefix_active_owners(%c,%owners3)
- 2681
- 2682 if (%valid3 != $null) {
- 2683 var %hit = 1
- 2684 if (%valid3 != %owners3) set $+(-u,%ttl) %barna_badpfx3. $+ %key $+ . $+ $replace(%pfx3,.,_) %valid3
- 2685 }
- 2686 else if (%owners3 != $null) {
- 2687 unset %barna_badpfx3. $+ %key $+ . $+ $replace(%pfx3,.,_)
- 2688 }
- 2689 }
- 2690
- 2691 if (%pfx2 != $null) {
- 2692 var %owners2 = [ [ $+(%,barna_badpfx2.,%key,.,$replace(%pfx2,.,_)) ] ]
- 2693 var %valid2 = $_barna_bad_prefix_active_owners(%c,%owners2)
- 2694
- 2695 if (%valid2 != $null) {
- 2696 var %hit = 1
- 2697 if (%valid2 != %owners2) set $+(-u,%ttl) %barna_badpfx2. $+ %key $+ . $+ $replace(%pfx2,.,_) %valid2
- 2698 }
- 2699 else if (%owners2 != $null) {
- 2700 unset %barna_badpfx2. $+ %key $+ . $+ $replace(%pfx2,.,_)
- 2701 }
- 2702 }
- 2703
- 2704 if (%hit == 1) {
- 2705 if (%out == $null) var %out = %c
- 2706 else if (!$istok(%out,%c,44)) var %out = $addtok(%out,%c,44)
- 2707 }
- 2708 }
- 2709
- 2710 inc %i
- 2711 }
- 2712
- 2713 return %out
- 2714}
- 2715
- 2716alias _barna_ip_known_bad_prefix {
- 2717 if ($1 == $null) return 0
- 2718 if ($2 == $null) return 0
- 2719
- 2720 if ($_barna_bad_prefix_match_chans($1,$2-) != $null) return 1
- 2721
- 2722 return 0
- 2723}
- 2724
- 2725alias _barna_bad_prefix_punish {
- 2726 if ($1 == $null) return
- 2727 if ($2 == $null) return
- 2728
- 2729 var %nick = $1
- 2730 var %ip = $2
- 2731 var %src = $3
- 2732 var %inputchans = $4-
- 2733 var %ln = $lower(%nick)
- 2734 var %chans
- 2735 var %showchans
- 2736
- 2737 if ($_barna_is_privileged_nick(%nick)) {
- 2738 _barna_dbg PRIVSAFE BADPFX ignorado por @/+v: nick= %nick ip= %ip src= %src
- 2739 _barna_privileged_cleanup_nick %nick BADPFX
- 2740 return
- 2741 }
- 2742
- 2743 if (%inputchans == $null) var %inputchans = $_barna_seen_get(%nick)
- 2744
- 2745 var %allchans = $_barna_echo_chans_for_nick(%nick,%inputchans)
- 2746 if (%allchans != $null) var %inputchans = %allchans
- 2747
- 2748 var %chans = $_barna_bad_prefix_match_chans(%ip,%inputchans)
- 2749
- 2750 if (%chans == $null) {
- 2751 _barna_dbg BADPFX ignorado, prefijo no corresponde a este canal: nick= %nick ip= %ip src= %src chans= %inputchans
- 2752 return
- 2753 }
- 2754
- 2755 _barna_dbg RAW340 prefijo ASN malo conocido por canal, SHUN por nick y SAQUIT diferido: nick= %nick ip= %ip src= %src chans= %chans
- 2756
- 2757 var %showchans = $replace(%chans,$chr(44),$+(,$chr(32)))
- 2758
- 2759 var %msg = El usuario $chr(2) $+ %nick $+ $chr(15) (IP: $+ $chr(2) $+ %ip $+ $chr(15) $+ ) coincide con prefijo ASN malo conocido en este canal
- 2760
- 2761 var %ei = 1
- 2762 while (%ei <= $numtok(%inputchans,44)) {
- 2763 var %ec = $gettok(%inputchans,%ei,44)
- 2764
- 2765 if (%ec != $null) {
- 2766 _barna_channel_echo %ec %msg
- 2767 }
- 2768
- 2769 inc %ei
- 2770 }
- 2771
- 2772 set -u900 %barna_saquit_showchans. $+ %ln %showchans
- 2773 set -u900 %barna_saquit_msg. $+ %ln %msg
- 2774
- 2775 _barna_dbg Parseline2 pendiente hasta QUIT por SAQUIT: nick= %nick ip= %ip src= %src chans= %chans
- 2776
- 2777 _barna_mark_badnick %nick %ip %chans
- 2778 _barna_shun_ip %ip Molestias en Canales (A)
- 2779 _barna_shun_nick %nick Molestias en Canales (A)
- 2780 _barna_schedule_delayed_saquit %nick %ip %chans
- 2781}
- 2782
- 2783; ------------------------------------------------------------
- 2784; BLOQUE 4
- 2785; DIALOGO ORIGINAL
- 2786; ------------------------------------------------------------
- 2787
- 2788dialog barna_ctl {
- 2789 title "Addon [ASN] (ISP/ASN)"
- 2790 size -1 -1 170 72
- 2791 option dbu
- 2792 text "Estado:", 1, 8 10 28 10
- 2793 edit "", 2, 40 9 120 12, read autohs
- 2794 button "Encender", 3, 8 30 60 14
- 2795 button "Apagar", 4, 76 30 60 14
- 2796 button "Cerrar", 6, 56 50 56 14, ok
- 2797}
- 2798
- 2799alias barna {
- 2800 if (!$dialog(barna_ctl)) dialog -m barna_ctl barna_ctl
- 2801}
- 2802
- 2803alias _barna_refresh {
- 2804 if ($dialog(barna_ctl)) {
- 2805 if (%barna_addon == 1) {
- 2806 dialog -t barna_ctl Addon [ASN] (ISP/ASN) - ACTIVADO
- 2807 did -ra barna_ctl 2 ACTIVADO
- 2808 did -b barna_ctl 3
- 2809 did -e barna_ctl 4
- 2810 }
- 2811 else {
- 2812 dialog -t barna_ctl Addon [ASN] (ISP/ASN) - DESACTIVADO
- 2813 did -ra barna_ctl 2 DESACTIVADO
- 2814 did -e barna_ctl 3
- 2815 did -b barna_ctl 4
- 2816 }
- 2817 }
- 2818}
- 2819
- 2820on *:DIALOG:barna_ctl:init:*:{
- 2821 _barna_refresh
- 2822}
- 2823
- 2824on *:DIALOG:barna_ctl:sclick:3:{
- 2825 set %barna_addon 1
- 2826 _barna_autostart manual
- 2827 echo -s [ASN] Addon ACTIVADO
- 2828 _barna_refresh
- 2829}
- 2830
- 2831on *:DIALOG:barna_ctl:sclick:4:{
- 2832 set %barna_addon 0
- 2833 _barna_core_stop_timers
- 2834 echo -s [ASN] Addon DESACTIVADO
- 2835 _barna_refresh
- 2836}
- 2837
- 2838alias _barna_toggle {
- 2839 if (%barna_addon == 1) {
- 2840 set %barna_addon 0
- 2841 _barna_core_stop_timers
- 2842 echo -s [ASN] Addon DESACTIVADO
- 2843 }
- 2844 else {
- 2845 set %barna_addon 1
- 2846 _barna_autostart manual
- 2847 echo -s [ASN] Addon ACTIVADO
- 2848 }
- 2849 _barna_refresh
- 2850}
- 2851
- 2852; ------------------------------------------------------------
- 2853; BLOQUE 5
- 2854; POPUPS Y MENUS
- 2855; ------------------------------------------------------------
- 2856
- 2857menu status {
- 2858 -
- 2859 Addon ISP / ASN
- 2860 .Abrir panel:/barna
- 2861 .Toggle global:/_barna_toggle
- 2862 -
- 2863 Debug
- 2864 .Activar Debug:/_barna_debug_on
- 2865 .Desactivar Debug:/_barna_debug_off
- 2866 .Activar Debug detallado:/_barna_debug_verbose_on
- 2867 .Desactivar Debug detallado:/_barna_debug_verbose_off
- 2868 .Activar Debug RX:/_barna_debug_rx_on
- 2869 .Desactivar Debug RX:/_barna_debug_rx_off
- 2870 -
- 2871}
- 2872
- 2873menu channel {
- 2874 -
- 2875 Addon ISP / ASN
- 2876 .Abrir panel:/barna
- 2877 .Toggle global:/_barna_toggle
- 2878 .-
- 2879 .Este canal
- 2880 ..Activar canal:/_barna_chan_on $active
- 2881 ..Desactivar canal:/_barna_chan_off $active
- 2882 ..Toggle canal:/_barna_chan_toggle $active
- 2883 ..Ver ASN del canal:/_barna_chan_list_asn $active
- 2884 ..Añadir ASN al canal:/_barna_chan_add_asn_input $active
- 2885 ..Borrar ASN del canal:/_barna_chan_del_asn_input $active
- 2886 .-
- 2887 .Debug
- 2888 ..Activar Debug:/_barna_debug_on
- 2889 ..Desactivar Debug:/_barna_debug_off
- 2890 ..Activar Debug detallado:/_barna_debug_verbose_on
- 2891 ..Desactivar Debug detallado:/_barna_debug_verbose_off
- 2892 ..Activar Debug RX:/_barna_debug_rx_on
- 2893 ..Desactivar Debug RX:/_barna_debug_rx_off
- 2894 -
- 2895}
- 2896
- 2897; ------------------------------------------------------------
- 2898; BLOQUE 6
- 2899; LIMPIEZAS
- 2900; ------------------------------------------------------------
- 2901
- 2902alias barna.qreset {
- 2903 unset %barna_q_*
- 2904 unset %barna_lookup.*
- 2905 unset %barna_lookup_timer.*
- 2906 unset %barna_ipdone.*
- 2907 unset %barna_sock.*
- 2908 unset %barna_rx.*
- 2909 unset %barna_asn_done.*
- 2910 unset %asn_val.*
- 2911 unset %as_name_val.*
- 2912 unset %temp_ip_*
- 2913 unset %barna_abort.*
- 2914 unset %barna_userip_retry.*
- 2915 unset %barna_seen.*
- 2916 unset %barna_saquit_ip.*
- 2917 unset %barna_saquit_chans.*
- 2918 unset %barna_saquit_pending.*
- 2919 unset %barna_saquit_timer.*
- 2920 unset %barna_saquit_sent.*
- 2921 unset %barna_saquit_msg.*
- 2922 unset %barna_saquit_showchans.*
- 2923 unset %barna_saquit_q_*
- 2924 unset %barna_hunted.*
- 2925 unset %barna_parseline_done.*
- 2926 unset %barna_badnick.*
- 2927 unset %barna_badnick_ip.*
- 2928 unset %barna_badnick_chans.*
- 2929 unset %barna_q_deferred.*
- 2930 unset %barna_q_low.*
- 2931 unset %barna_q_retry_timer.*
- 2932 unset %barna_q_totimer.*
- 2933 unset %barna_sock_timeout_seen.*
- 2934 unset %barna_userip_q_pending.*
- 2935 unset %barna_userip_q_nick.*
- 2936 unset %barna_userip_q_slot.*
- 2937 unset %barna_userip_q_item.*
- 2938 unset %barna_userip_q_active
- 2939 unset %barna_userip_q_running
- 2940 unset %barna_userip_q_head
- 2941 unset %barna_userip_q_tail
- 2942 unset %barna_userip_q_count_real
- 2943 unset %barna_userip_drop_count
- 2944 unset %barna_userip_q_scheduled
- 2945 unset %barna_userip_inflight.*
- 2946 unset %barna_userip_inflight_count
- 2947 unset %barna_userip_sent_ts.*
- 2948 unset %barna_userip_watchtry.*
- 2949 unset %barna_userip_watchdog_scheduled
- 2950 unset %barna_userip_watch_q_item.*
- 2951 unset %barna_userip_watch_q_head
- 2952 unset %barna_userip_watch_q_tail
- 2953 unset %barna_userip_watch_q_slot.*
- 2954 unset %barna_userip_watch_q_count_real
- 2955 unset %barna_userip_slow_retry.*
- 2956 unset %barna_userip_slow_timer.*
- 2957 unset %barna_userip_sent_recent.*
- 2958 unset %barna_q_running
- 2959 unset %barna_q_items
- 2960 unset %barna_q_scheduled
- 2961 unset %barna_q_prune_last
- 2962 unset %barna_q_low_items
- 2963 .timerBarnaASNPump off
- 2964 unset %barna_asn_pump_running
- 2965 unset %barna_asn_pump_last
- 2966 unset %barna_asn_pump_armed
- 2967 unset %barna_echo_q_chan.*
- 2968 unset %barna_echo_q_msg.*
- 2969 unset %barna_echo_q_head
- 2970 unset %barna_echo_q_tail
- 2971 unset %barna_echo_q_running
- 2972 unset %barna_echo_q_scheduled
- 2973 unset %barna_join_audit_q_item.*
- 2974 unset %barna_join_audit_q_slot.*
- 2975 unset %barna_join_audit_q_head
- 2976 unset %barna_join_audit_q_tail
- 2977 unset %barna_join_audit_q_count_real
- 2978 unset %barna_join_audit_q_scheduled
- 2979 unset %barna_join_audit_nick.*
- 2980 unset %barna_join_audit_chans.*
- 2981 unset %barna_join_audit_ts.*
- 2982 unset %barna_join_audit_try.*
- 2983 unset %barna_joinfix_q_item.*
- 2984 unset %barna_joinfix_q_slot.*
- 2985 unset %barna_joinfix_q_pending.*
- 2986 unset %barna_joinfix_q_nick.*
- 2987 unset %barna_joinfix_q_chans.*
- 2988 unset %barna_joinfix_q_ts.*
- 2989 unset %barna_joinfix_watchtry.*
- 2990 unset %barna_joinfix_q_head
- 2991 unset %barna_joinfix_q_tail
- 2992 unset %barna_joinfix_q_count_real
- 2993 unset %barna_last_ip.*
- 2994 unset %barna_core_tick_running
- 2995 unset %barna_core_tick_busy
- 2996 unset %barna_manual_userip.*
- 2997 unset %barna_manual_userip_win.*
- 2998 unset %barna_trace_last.*
- 2999 echo -s [ASN] Estado temporal ASN reiniciado.
- 3000 _barna_core_ensure_timers
- 3001}
- 3002
- 3003alias barna.treset {
- 3004 .timerBarna* off
- 3005 .timerBarnaLookup_* off
- 3006 .timerBarnaUserIPBatch off
- 3007 .timerBarnaUserIPWatchdog off
- 3008 .timerBarnaASNQ off
- 3009 .timerBarnaASNPump off
- 3010 .timerBarnaEchoQ off
- 3011 .timerBarnaJoinAudit off
- 3012 .timerBarnaSockTO_* off
- 3013 .timerBarnaQRetry_* off
- 3014 .timerBarnaUserIP_* off
- 3015 .timerBarnaUserIPSlow_* off
- 3016 .timerBarnaSAQUIT_* off
- 3017 .timerBarnaSAQUITPump off
- 3018 .timerBarnaCheck_* off
- 3019 .timerBarnaFinal_* off
- 3020 echo -s [ASN] Timers del addon ASN reiniciados.
- 3021}
- 3022
- 3023alias barna.postupdate {
- 3024 echo -s [ASN] POSTUPDATE inicio: limpieza segura tras cambiar de build. No toca canales/ASN.
- 3025
- 3026 ; Apaga solo timers del addon ASN. No usar /timers off global.
- 3027 barna.treset
- 3028
- 3029 ; Limpieza de estado temporal especifico de WHOIP/RAW354 y arranques previos.
- 3030 .unset %barna_whoip_*
- 3031 ; Build 95: purga de familias temporales antiguas que no deben sobrevivir al flush.
- 3032 .unset %barna_userip_watch_*
- 3033 .unset %barna_userip_watch_q_*
- 3034 .unset %barna_whoip_fifo*
- 3035 .unset %barna_whoip_token*
- 3036 .unset %barna_whoip_sent.*
- 3037 .unset %barna_whoip_315_*
- 3038 .unset %barna_tmp_*
- 3039 .unset %barna_hygiene_*
- 3040 .unset %barna_abort.*
- 3041 .unset %barna_privileged.*
- 3042 .unset %barna_hunted.*
- 3043 .unset %barna_badpfx2.*
- 3044 .unset %barna_badpfx3.*
- 3045 .unset %barna_badnick.*
- 3046 .unset %barna_badnick_ip.*
- 3047 .unset %barna_badnick_chans.*
- 3048 .unset %barna_userip_inflight.*
- 3049 .unset %barna_userip_inflight_count
- 3050 .unset %barna_userip_q_scheduled
- 3051 .unset %barna_userip_q_active
- 3052 .unset %barna_userip_q_running
- 3053 .unset %barna_core_tick_running
- 3054 .unset %barna_core_tick_busy
- 3055 .unset %barna_maintenance_busy
- 3056 .unset %barna_maintenance_phase
- 3057 .unset %barna_cachecap117_drain_requested
- 3058 .unset %barna_seen_rescue_busy
- 3059 .unset %barna_autonickscan_recent.*
- 3060 .unset %barna_autonickscan_cpos
- 3061 .unset %barna_autonickscan_npos
- 3062 .unset %barna_autonickscan_last
- 3063 .unset %barna_autonickscan_busy
- 3064 .unset %barna_join_delay_*
- 3065 .unset %barna_manual_userip.*
- 3066 .unset %barna_manual_userip_win.*
- 3067
- 3068 ; Build 95: purga de familias temporales antiguas que no deben sobrevivir al cambio.
- 3069 .unset %barna_userip_watch_*
- 3070 .unset %barna_userip_watch_q_*
- 3071 .unset %barna_whoip_fifo*
- 3072 .unset %barna_whoip_token*
- 3073 .unset %barna_whoip_sent.*
- 3074 .unset %barna_whoip_315_*
- 3075 .unset %barna_tmp_*
- 3076 .unset %barna_hygiene_*
- 3077 .unset %barna_abort.*
- 3078 .unset %barna_privileged.*
- 3079 .unset %barna_hunted.*
- 3080 .unset %barna_badpfx2.*
- 3081 .unset %barna_badpfx3.*
- 3082 .unset %barna_badnick.*
- 3083 .unset %barna_badnick_ip.*
- 3084 .unset %barna_badnick_chans.*
- 3085
- 3086 ; Build 92: limpieza anti-lag fuerte de temporales voluminosos.
- 3087 ; NO toca %barna_chan.* ni %barna_asn.*
- 3088 .unset %barna_echo_asn_seen.*
- 3089 .unset %barna_echo_seen.*
- 3090 .unset %barna_seen_rescue_recent.*
- 3091 .unset %barna_seen_rescue_pos
- 3092 .unset %barna_seen_rescue_last
- 3093 .unset %barna_seen_display.*
- 3094 .unset %barna_seen.*
- 3095 .unset %barna_ip_keep.*
- 3096 .unset %barna_lookup.*
- 3097 .unset %barna_lookup_chans.*
- 3098 .unset %barna_lookup_timer.*
- 3099 .unset %barna_qry.*
- 3100 .unset %barna_ipdone.*
- 3101 .unset %barna_last_ip.*
- 3102 .unset %barna_jguard_items
- 3103 .unset %barna_jguard.*
- 3104 .unset %barna_jguard_ts.*
- 3105 .unset %barna_jguard_nick.*
- 3106
- 3107 .unset %barna_userip_q_pending.*
- 3108 .unset %barna_userip_q_nick.*
- 3109 .unset %barna_userip_q_slot.*
- 3110 .unset %barna_userip_q_chans.*
- 3111 .unset %barna_userip_q_item.*
- 3112 .unset %barna_userip_q_head
- 3113 .unset %barna_userip_q_tail
- 3114 .unset %barna_userip_q_count_real
- 3115 .unset %barna_echo_q_*
- 3116
- 3117 ; Build 98: purga extra de estado socket/ASN/WHOIP que puede crecer aunque no haya sockets reales.
- 3118 .unset %barna_sock.*
- 3119 .unset %barna_sock_name.*
- 3120 .unset %barna_sock_nick.*
- 3121 .unset %barna_sock_ip.*
- 3122 .unset %barna_sock_id.*
- 3123 .unset %barna_sock_expected.*
- 3124 .unset %barna_sock_opened.*
- 3125 .unset %barna_sock_timeout_seen.*
- 3126 .unset %barna_rx.*
- 3127 .unset %barna_asn_done.*
- 3128 .unset %barna_q_finished.*
- 3129 .unset %temp_ip_*
- 3130 .unset %asn_val.*
- 3131 .unset %as_name_val.*
- 3132 .unset %barna_userip_sent_recent.*
- 3133 .unset %barna_userip_sent_ts.*
- 3134 .unset %barna_userip_retry.*
- 3135 .unset %barna_userip_watchtry.*
- 3136 .unset %barna_userip_current_*
- 3137 .unset %barna_whoip_current_*
- 3138
- 3139 .unset %barna_joinfix_q_*
- 3140 .unset %barna_joinfix_*
- 3141 .unset %barna_joinfix*
- 3142
- 3143
- 3144 ; Build 98: purga extra de estado socket/ASN/WHOIP que puede crecer aunque no haya sockets reales.
- 3145 .unset %barna_sock.*
- 3146 .unset %barna_sock_name.*
- 3147 .unset %barna_sock_nick.*
- 3148 .unset %barna_sock_ip.*
- 3149 .unset %barna_sock_id.*
- 3150 .unset %barna_sock_expected.*
- 3151 .unset %barna_sock_opened.*
- 3152 .unset %barna_sock_timeout_seen.*
- 3153 .unset %barna_rx.*
- 3154 .unset %barna_asn_done.*
- 3155 .unset %barna_q_finished.*
- 3156 .unset %temp_ip_*
- 3157 .unset %asn_val.*
- 3158 .unset %as_name_val.*
- 3159 .unset %barna_userip_sent_recent.*
- 3160 .unset %barna_userip_sent_ts.*
- 3161 .unset %barna_userip_retry.*
- 3162 .unset %barna_userip_watchtry.*
- 3163 .unset %barna_userip_current_*
- 3164 .unset %barna_whoip_current_*
- 3165
- 3166 ; Limpiezas suaves ya existentes. No borran canales ni ASN configurados.
- 3167 barna.sockvarclean
- 3168 barna.saquitfix
- 3169
- 3170 ; Build 93: FIFO directo sin escaneos ni descartes.
- 3171 set %barna_userip_q_batch_max 2
- 3172 set %barna_userip_turbo_threshold 10
- 3173 set %barna_userip_turbo_batch_max 3
- 3174 set %barna_userip_emergency_threshold 30
- 3175 set %barna_userip_emergency_batch_max 3
- 3176 set %barna_userip_q_max_pending 400
- 3177 set %barna_userip_q_shed_to 0
- 3178 set %barna_userip_no_shed 1
- 3179 if (%barna_userip_state_ttl == $null) set %barna_userip_state_ttl 60
- 3180 if (%barna_userip_state_ttl > 60) set %barna_userip_state_ttl 60
- 3181 if (%barna_userip_state_ttl < 30) set %barna_userip_state_ttl 30
- 3182 set %barna_userip_stuck_rescue 1
- 3183 set %barna_autonickscan 0
- 3184 set %barna_join_guard 0
- 3185 set %barna_seen_rescue 0
- 3186 set %barna_core_minimal 1
- 3187 set %barna_whoip_lightvars 1
- 3188 set %barna_echo_dedupe_secs 90
- 3189 set %barna_total_max_vars 900
- 3190 set %barna_seen_max_vars 0
- 3191 set %barna_echo_seen_max_vars 40
- 3192 set %barna_echo_asn_seen_max_vars 120
- 3193 set %barna_ip_keep_max_vars 80
- 3194 set %barna_sockvar_max_vars 25
- 3195 set %barna_echo_asn_seen_max_vars 120
- 3196 set %barna_ip_keep_max_vars 80
- 3197 set %barna_echo_q_max 160
- 3198
- 3199 ; Reasegura timers principales del addon.
- 3200 barna.init
- 3201
- 3202 echo -s [ASN] POSTUPDATE fin: ejecuta /barna.qstatus y /barna.stats para revisar estado.
- 3203}
- 3204
- 3205alias barna.lagflush {
- 3206 echo -s [ASN] LAGFLUSH inicio: limpieza anti-lag fuerte SIN tocar canales/ASN.
- 3207 barna.treset
- 3208
- 3209 .unset %barna_echo_asn_seen.*
- 3210 .unset %barna_echo_seen.*
- 3211 .unset %barna_seen_rescue_recent.*
- 3212 .unset %barna_seen_rescue_pos
- 3213 .unset %barna_seen_rescue_last
- 3214 .unset %barna_seen_rescue_busy
- 3215 .unset %barna_autonickscan_recent.*
- 3216 .unset %barna_autonickscan_cpos
- 3217 .unset %barna_autonickscan_npos
- 3218 .unset %barna_autonickscan_last
- 3219 .unset %barna_autonickscan_busy
- 3220 .unset %barna_seen_display.*
- 3221 .unset %barna_seen.*
- 3222 .unset %barna_ip_keep.*
- 3223 .unset %barna_lookup.*
- 3224 .unset %barna_lookup_chans.*
- 3225 .unset %barna_lookup_timer.*
- 3226 .unset %barna_qry.*
- 3227 .unset %barna_ipdone.*
- 3228 .unset %barna_last_ip.*
- 3229 .unset %barna_whoip_*
- 3230 ; Build 95: purga de familias temporales antiguas que no deben sobrevivir al flush.
- 3231 .unset %barna_userip_watch_*
- 3232 .unset %barna_userip_watch_q_*
- 3233 .unset %barna_whoip_fifo*
- 3234 .unset %barna_whoip_token*
- 3235 .unset %barna_whoip_sent.*
- 3236 .unset %barna_whoip_315_*
- 3237 .unset %barna_tmp_*
- 3238 .unset %barna_hygiene_*
- 3239 .unset %barna_abort.*
- 3240 .unset %barna_privileged.*
- 3241 .unset %barna_hunted.*
- 3242 .unset %barna_badpfx2.*
- 3243 .unset %barna_badpfx3.*
- 3244 .unset %barna_badnick.*
- 3245 .unset %barna_badnick_ip.*
- 3246 .unset %barna_badnick_chans.*
- 3247 .unset %barna_userip_inflight.*
- 3248 .unset %barna_userip_inflight_count
- 3249 .unset %barna_userip_q_scheduled
- 3250 .unset %barna_userip_q_active
- 3251 .unset %barna_userip_q_running
- 3252 .unset %barna_jguard_items
- 3253 .unset %barna_jguard.*
- 3254 .unset %barna_jguard_ts.*
- 3255 .unset %barna_jguard_nick.*
- 3256
- 3257 .unset %barna_userip_q_pending.*
- 3258 .unset %barna_userip_q_nick.*
- 3259 .unset %barna_userip_q_slot.*
- 3260 .unset %barna_userip_q_chans.*
- 3261 .unset %barna_userip_q_item.*
- 3262 .unset %barna_userip_q_head
- 3263 .unset %barna_userip_q_tail
- 3264 .unset %barna_userip_q_count_real
- 3265 .unset %barna_echo_q_*
- 3266
- 3267 ; Build 98: purga extra de estado socket/ASN/WHOIP que puede crecer aunque no haya sockets reales.
- 3268 .unset %barna_sock.*
- 3269 .unset %barna_sock_name.*
- 3270 .unset %barna_sock_nick.*
- 3271 .unset %barna_sock_ip.*
- 3272 .unset %barna_sock_id.*
- 3273 .unset %barna_sock_expected.*
- 3274 .unset %barna_sock_opened.*
- 3275 .unset %barna_sock_timeout_seen.*
- 3276 .unset %barna_rx.*
- 3277 .unset %barna_asn_done.*
- 3278 .unset %barna_q_finished.*
- 3279 .unset %temp_ip_*
- 3280 .unset %asn_val.*
- 3281 .unset %as_name_val.*
- 3282 .unset %barna_userip_sent_recent.*
- 3283 .unset %barna_userip_sent_ts.*
- 3284 .unset %barna_userip_retry.*
- 3285 .unset %barna_userip_watchtry.*
- 3286 .unset %barna_userip_current_*
- 3287 .unset %barna_whoip_current_*
- 3288
- 3289 .unset %barna_joinfix_q_*
- 3290 .unset %barna_joinfix_*
- 3291 .unset %barna_joinfix*
- 3292
- 3293 set %barna_userip_q_batch_max 2
- 3294 set %barna_userip_turbo_threshold 10
- 3295 set %barna_userip_turbo_batch_max 3
- 3296 set %barna_userip_emergency_threshold 30
- 3297 set %barna_userip_emergency_batch_max 3
- 3298 set %barna_userip_q_max_pending 400
- 3299 set %barna_userip_q_shed_to 0
- 3300 set %barna_userip_no_shed 1
- 3301 set %barna_userip_state_ttl 60
- 3302 set %barna_userip_drop_count 0
- 3303 set %barna_userip_stuck_rescue 1
- 3304 set %barna_autonickscan 0
- 3305 set %barna_join_guard 0
- 3306 set %barna_seen_rescue 0
- 3307 set %barna_core_minimal 1
- 3308 set %barna_whoip_lightvars 1
- 3309 set %barna_echo_dedupe_secs 90
- 3310 set %barna_total_max_vars 900
- 3311 set %barna_seen_max_vars 0
- 3312 set %barna_echo_seen_max_vars 40
- 3313 set %barna_echo_asn_seen_max_vars 120
- 3314 set %barna_ip_keep_max_vars 80
- 3315 set %barna_echo_q_max 160
- 3316
- 3317 barna.sockvarclean
- 3318 barna.saquitfix
- 3319 barna.init
- 3320 echo -s [ASN] LAGFLUSH fin: temporales purgados. Ejecuta /barna.qstatus y /barna.stats.
- 3321}
- 3322
- 3323alias barna.reload {
- 3324 barna.postupdate
- 3325}
- 3326
- 3327alias barna.pfxreset {
- 3328 unset %barna_badpfx2.*
- 3329 unset %barna_badpfx3.*
- 3330 echo -s [ASN] Cache de prefijos ASN malos reiniciada.
- 3331}
- 3332
- 3333
- 3334alias barna.fullreset {
- 3335 var %i = 1
- 3336 var %c = 0
- 3337
- 3338 unset %__barna_keep_*
- 3339
- 3340 while (%i <= $var(%barna_chan.*,0)) {
- 3341 inc %c
- 3342 set %__barna_keep_name. $+ %c $var(%barna_chan.*,%i)
- 3343 set %__barna_keep_value. $+ %c $var(%barna_chan.*,%i).value
- 3344 inc %i
- 3345 }
- 3346
- 3347 var %i = 1
- 3348 while (%i <= $var(%barna_asn.*,0)) {
- 3349 inc %c
- 3350 set %__barna_keep_name. $+ %c $var(%barna_asn.*,%i)
- 3351 set %__barna_keep_value. $+ %c $var(%barna_asn.*,%i).value
- 3352 inc %i
- 3353 }
- 3354
- 3355 set %__barna_keep_count %c
- 3356
- 3357 set %barna_addon 0
- 3358 barna.treset
- 3359
- 3360 var %s = $sock(0)
- 3361 while (%s) {
- 3362 var %sn = $sock(%s)
- 3363 if (ipinfo* iswm %sn) sockclose %sn
- 3364 if (asnmanual_* iswm %sn) sockclose %sn
- 3365 dec %s
- 3366 }
- 3367
- 3368 ; Build 33: PROTECCION CRITICA.
- 3369 ; Nunca borrar %barna_chan.* ni %barna_asn.* dentro de fullreset.
- 3370 ; Antes se usaba "unset %barna_*" y se restauraba despues, pero si algo fallaba
- 3371 ; se podian perder canales activos o ASN por canal. Desde este build se limpian
- 3372 ; solo grupos temporales/cache/colas, dejando la configuracion viva intacta.
- 3373 barna.qreset
- 3374 barna.cachereset silent
- 3375 unset %barna_badpfx2.*
- 3376 unset %barna_badpfx3.*
- 3377 unset %temp_ip_*
- 3378 unset %asn_val.*
- 3379 unset %as_name_val.*
- 3380
- 3381 var %i = 1
- 3382 while (%i <= %__barna_keep_count) {
- 3383 var %n = [ [ $+(%,__barna_keep_name.,%i) ] ]
- 3384 var %v = [ [ $+(%,__barna_keep_value.,%i) ] ]
- 3385 if (%n != $null) set %n %v
- 3386 inc %i
- 3387 }
- 3388
- 3389 unset %__barna_keep_*
- 3390
- 3391 _barna_runtime_defaults
- 3392 set %barna_addon 1
- 3393
- 3394 echo -s [ASN] Reset limpio completo: conservados canales activos y ASN por canal. Se han borrado colas, cache exacta, prefijos malos, vistos y SAQUIT pendientes.
- 3395}
- 3396
- 3397alias barna.cleanstart {
- 3398 barna.fullreset
- 3399}
- 3400
- 3401alias barna.cachereset {
- 3402 var %modo = $1
- 3403 var %a = $var(%barna_asn_cache_asn.*,0)
- 3404 var %n = $var(%barna_asn_cache_name.*,0)
- 3405 var %t = $var(%barna_asn_cache_ts.*,0)
- 3406
- 3407 unset %barna_asn_cache_asn.*
- 3408 unset %barna_asn_cache_name.*
- 3409 unset %barna_asn_cache_ts.*
- 3410 unset %barna_ipasn_cache.*
- 3411 unset %barna_ip_cache.*
- 3412 unset %barna_cache_asn.*
- 3413 unset %barna_cache_name.*
- 3414
- 3415 if (%modo != silent) {
- 3416 echo -s [ASN] Cache ASN por IP exacta reiniciada: asn= %a name= %n ts= %t $+ . No se han borrado prefijos malos.
- 3417 }
- 3418}
- 3419
- 3420alias barna.cacheclean {
- 3421 barna.cachereset
- 3422}
- 3423
- 3424
- 3425; ------------------------------------------------------------
- 3426; BLOQUE 7.4.1
- 3427; BUILD 120 - CACHECAP MARKGC ASN/ISP/TS
- 3428; ------------------------------------------------------------
- 3429; Objetivo: impedir que %barna_asn_cache_asn/name/ts crezca a cientos
- 3430; o miles de variables sin borrar toda la cache de golpe.
- 3431;
- 3432; Build 117: hard purge podia congelar mIRC.
- 3433; Build 118: unset dinamico empezaba a localizar claves, pero no ganaba carrera.
- 3434; Build 120: bloqueo de cache nueva + batch adaptativo; funcionaba, pero el
- 3435; drenaje golpeaba repetidamente la misma clave y el contador bajaba
- 3436; mucho menos que el batch reportado.
- 3437; Build 120: MARKGC: marca claves distintas para expirar con set -u1 y escanea
- 3438; hacia atras por indice. Asi cada lote afecta a IPs diferentes y
- 3439; evita quedarse clavado en el mismo lastkey. No toca %barna_chan.*
- 3440; ni %barna_asn.*.
- 3441; Build 121: TOTALPRESSURE_GC: si total_vars sigue por encima de totalmax,
- 3442; MARKGC continua de hard hacia target y ejecuta GC auxiliar seguro
- 3443; de sock/saquit/echo sin tocar canales ni ASN configurados.
- 3444; Build 124: AUXPRESSURE_GC: cuando cache ya esta en target pero total_vars
- 3445; sigue por encima de totalmax, mantiene drain activo y baja auxiliares
- 3446; seguros por lotes pequenos: echo_seen/dedupe, badnick temporal, sock
- 3447; fantasma y SAQUIT solo si no hay timers activos. No toca canales/ASN.
- 3448; Build 126: AUXPRESSURE_GC3: ajuste fino tras horas: limpia auxiliares
- 3449; residuales con total_pressure sostenido. Procesa JOIN_DELAY maduro,
- 3450; baja echo_* y badnick con unset inmediato, compacta q_* fantasma y
- 3451; recorta SAQUIT sin timer activo. No toca canales/ASN ni sanciones vivas.
- 3452; Build 129: SAFE_GC_AUXDISTINCT: reduce agresividad para evitar cierres de mIRC: menos
- 3453; barridos por tick, intervalos de drain mas largos y expiracion diferida
- 3454; con set -u2 en auxiliares. Mantiene filtros __gc__ y cache controlada.
- 3455; Build 133: CRASHSAFE_FAIRPRESSURE_CAPACITY: CoreTick sigue minimo y BarnaMaintenance prioriza una sola familia util bajo presion
- 3456; juntos cada 2s. BarnaMaintenance reparte una sola tarea cada 5s, sin timer
- 3457; de drain autorreprogramado. Cache MARKGC se mantiene segura y separada.
- 3458
- 3459alias _barna_cachecap117_defaults {
- 3460 if (%barna_cachecap117_enabled == $null) set %barna_cachecap117_enabled 1
- 3461
- 3462 if (%barna_asn_cache_max_exact == $null) set %barna_asn_cache_max_exact 120
- 3463 if (%barna_asn_cache_max_exact < 80) set %barna_asn_cache_max_exact 120
- 3464 if (%barna_asn_cache_max_exact > 180) set %barna_asn_cache_max_exact 120
- 3465
- 3466 if (%barna_asn_cache_hard_limit == $null) set %barna_asn_cache_hard_limit 180
- 3467 if (%barna_asn_cache_hard_limit < %barna_asn_cache_max_exact) set %barna_asn_cache_hard_limit $calc(%barna_asn_cache_max_exact + 60)
- 3468 if (%barna_asn_cache_hard_limit > 260) set %barna_asn_cache_hard_limit 180
- 3469
- 3470 ; Build 120: forzamos valores sanos aunque queden variables heredadas.
- 3471 if (%barna_cachecap117_interval == $null) set %barna_cachecap117_interval 5
- 3472 if (%barna_cachecap117_interval != 5) set %barna_cachecap117_interval 5
- 3473
- 3474 if (%barna_cachecap117_batch == $null) set %barna_cachecap117_batch 16
- 3475 if (%barna_cachecap117_batch < 8) set %barna_cachecap117_batch 16
- 3476 if (%barna_cachecap117_batch > 32) set %barna_cachecap117_batch 16
- 3477
- 3478 if (%barna_cachecap117_echo_batch == $null) set %barna_cachecap117_echo_batch 6
- 3479 if (%barna_cachecap117_echo_batch < 3) set %barna_cachecap117_echo_batch 6
- 3480 if (%barna_cachecap117_echo_batch > 12) set %barna_cachecap117_echo_batch 6
- 3481}
- 3482
- 3483alias _barna_cachecap117_effective_batch {
- 3484 _barna_cachecap117_defaults
- 3485 var %cache = $1
- 3486 if (%cache !isnum 0-) var %cache = $var(%barna_asn_cache_asn.*,0)
- 3487
- 3488 ; Build 133: bajo presion total la cache entre 130-180 tambien necesita
- 3489 ; capacidad suficiente. Sigue siendo MARKGC diferido y cache-only.
- 3490 if ($_barna_cachecap121_total_pressure == 1) {
- 3491 if (%cache > 150) return 24
- 3492 if (%cache > 130) return 20
- 3493 }
- 3494
- 3495 ; Recuperacion segura de caches heredadas grandes.
- 3496 if (%cache > 3000) return 60
- 3497 if (%cache > 1800) return 54
- 3498 if (%cache > 1000) return 48
- 3499 if (%cache > 500) return 45
- 3500 if (%cache > 260) return 36
- 3501 if (%cache > 180) return 30
- 3502 return %barna_cachecap117_batch
- 3503}
- 3504
- 3505alias _barna_cachecap120_key_from_asnvar {
- 3506 if ($1 == $null) return
- 3507 var %asnvar = $1
- 3508 var %prefix = $+(%,barna_asn_cache_asn.)
- 3509 var %key = $remove(%asnvar,%prefix)
- 3510 if (%key == $null) return
- 3511 if (%key == %asnvar) return
- 3512 return %key
- 3513}
- 3514
- 3515alias _barna_asn_cache_expire_key120 {
- 3516 if ($1 == $null) return 0
- 3517 var %key = $1
- 3518
- 3519 ; Evita marcar la misma IP una y otra vez dentro de la ventana de expiracion.
- 3520 if ($var($+(%,barna_cachecap120_marked.,%key),0) > 0) return 0
- 3521
- 3522 set -u8 $+(%,barna_cachecap120_marked.,%key) 1
- 3523
- 3524 ; En vez de unset dinamico inmediato, marcamos expiracion a 1s.
- 3525 ; Esto es mas fiable en mIRC y evita barridos masivos bloqueantes.
- 3526 set -u1 $+(%,barna_asn_cache_asn.,%key) __gc__
- 3527 set -u1 $+(%,barna_asn_cache_name.,%key) __gc__
- 3528 set -u1 $+(%,barna_asn_cache_ts.,%key) 0
- 3529
- 3530 set -u60 %barna_cachecap117_last_key %key
- 3531 return 1
- 3532}
- 3533
- 3534alias _barna_cachecap117_delete_batch_asn {
- 3535 var %limit = $1
- 3536 if (%limit !isnum 1-) var %limit = 24
- 3537
- 3538 var %n = $var(%barna_asn_cache_asn.*,0)
- 3539 if (%n <= 0) return 0
- 3540
- 3541 var %i = %n
- 3542 var %done = 0
- 3543 var %guard = 0
- 3544 var %maxscan = $calc((%limit * 8) + 80)
- 3545
- 3546 while ((%i >= 1) && (%done < %limit) && (%guard < %maxscan)) {
- 3547 var %asnvar = $var(%barna_asn_cache_asn.*,%i)
- 3548 var %key = $_barna_cachecap120_key_from_asnvar(%asnvar)
- 3549 if (%key != $null) {
- 3550 if ($_barna_asn_cache_expire_key120(%key)) inc %done
- 3551 }
- 3552 dec %i
- 3553 inc %guard
- 3554 }
- 3555
- 3556 return %done
- 3557}
- 3558
- 3559; Compatibilidad: alias antiguo, ahora usa MARKGC por lotes de 1 clave.
- 3560alias _barna_cachecap117_delete_last_asn {
- 3561 return $_barna_cachecap117_delete_batch_asn(1)
- 3562}
- 3563
- 3564alias _barna_cachecap117_delete_last_echo_asn {
- 3565 var %n = $var(%barna_echo_asn_seen.*,0)
- 3566 if (%n <= 0) return 0
- 3567 var %v = $var(%barna_echo_asn_seen.*,%n)
- 3568 if (%v == $null) return 0
- 3569 set -u1 %v 0
- 3570 return 1
- 3571}
- 3572
- 3573alias _barna_cachecap117_delete_last_echo_q {
- 3574 var %n = $var(%barna_echo_q_seen.*,0)
- 3575 if (%n <= 0) return 0
- 3576 var %v = $var(%barna_echo_q_seen.*,%n)
- 3577 if (%v == $null) return 0
- 3578 set -u1 %v 0
- 3579 return 1
- 3580}
- 3581
- 3582alias _barna_cachecap117_start_drain {
- 3583 ; Build 132: no crea ni rearma un timer rapido independiente.
- 3584 ; Solo solicita drenaje; BarnaMaintenance lo ejecuta sin solapamientos.
- 3585 _barna_cachecap117_defaults
- 3586 if (%barna_cachecap117_enabled != 1) return 0
- 3587 set -u30 %barna_cachecap117_drain_requested 1
- 3588 if ($timer(BarnaMaintenance) == $null) .timerBarnaMaintenance 0 5 _barna_maintenance_tick
- 3589 return 1
- 3590}
- 3591
- 3592
- 3593alias _barna_cachecap121_total_pressure {
- 3594 var %total = $var(%barna_*,0)
- 3595 var %max = %barna_total_max_vars
- 3596 if (%max !isnum 200-) var %max = 900
- 3597 if (%total > %max) return 1
- 3598 return 0
- 3599}
- 3600
- 3601alias _barna_cachecap121_should_drain {
- 3602 _barna_cachecap117_defaults
- 3603 var %cache = $var(%barna_asn_cache_asn.*,0)
- 3604 var %target = %barna_asn_cache_max_exact
- 3605 var %hard = %barna_asn_cache_hard_limit
- 3606 if (%target !isnum 50-) var %target = 120
- 3607 if (%hard !isnum 80-) var %hard = 180
- 3608
- 3609 ; Normal: si supera hard, drenar.
- 3610 if (%cache > %hard) return 1
- 3611
- 3612 ; Build 121: si el total global aun supera limite, seguir bajando cache hasta target.
- 3613 if (($_barna_cachecap121_total_pressure) && (%cache > %target)) return 1
- 3614
- 3615 return 0
- 3616}
- 3617
- 3618
- 3619alias _barna_cachecap124_key_from_prefix_var {
- 3620 if ($1 == $null) return
- 3621 if ($2 == $null) return
- 3622 var %v = $1
- 3623 var %prefix = $2
- 3624 var %key = $remove(%v,%prefix)
- 3625 if (%key == $null) return
- 3626 if (%key == %v) return
- 3627 return %key
- 3628}
- 3629
- 3630alias _barna_cachecap124_expire_varname {
- 3631 if ($1 == $null) return 0
- 3632 var %v = $1
- 3633 set -u1 %v 0
- 3634 return 1
- 3635}
- 3636
- 3637alias _barna_cachecap124_delete_last_badnick {
- 3638 var %n = $var(%barna_badnick.*,0)
- 3639 if (%n <= 0) return 0
- 3640 var %v = $var(%barna_badnick.*,%n)
- 3641 var %ln = $_barna_cachecap124_key_from_prefix_var(%v,$+(%,barna_badnick.))
- 3642 if (%ln == $null) return 0
- 3643 set -u1 $+(%,barna_badnick.,%ln) 0
- 3644 set -u1 $+(%,barna_badnick_ip.,%ln) 0
- 3645 set -u1 $+(%,barna_badnick_chans.,%ln) 0
- 3646 return 1
- 3647}
- 3648
- 3649alias _barna_cachecap124_delete_last_echo_seen {
- 3650 var %n = $var(%barna_echo_seen.*,0)
- 3651 if (%n <= 0) return 0
- 3652 var %v = $var(%barna_echo_seen.*,%n)
- 3653 if (%v == $null) return 0
- 3654 set -u1 %v 0
- 3655 return 1
- 3656}
- 3657
- 3658alias _barna_cachecap125_has_saquit_timer_for {
- 3659 if ($1 == $null) return 0
- 3660 var %ln = $lower($1)
- 3661 var %i = $timer(0)
- 3662
- 3663 while (%i > 0) {
- 3664 var %t = $lower($timer(%i))
- 3665 if (%ln isin %t) {
- 3666 if (barnasaquit_* iswm %t) return 1
- 3667 if (barnacheck_* iswm %t) return 1
- 3668 if (barnafinal_* iswm %t) return 1
- 3669 }
- 3670 dec %i
- 3671 }
- 3672
- 3673 return 0
- 3674}
- 3675
- 3676alias _barna_cachecap125_has_any_saquit_timer {
- 3677 var %i = $timer(0)
- 3678
- 3679 while (%i > 0) {
- 3680 var %t = $lower($timer(%i))
- 3681 if (barnasaquit_* iswm %t) return 1
- 3682 if (barnacheck_* iswm %t) return 1
- 3683 if (barnafinal_* iswm %t) return 1
- 3684 dec %i
- 3685 }
- 3686
- 3687 return 0
- 3688}
- 3689
- 3690alias _barna_cachecap125_delete_last_saquit_safe {
- 3691 ; Borra un grupo SAQUIT seguro bajo presion total.
- 3692 ; Prioridad: nicks sin timer activo y que ya no estan en canales activos.
- 3693 ; No toca timers activos ni sanciones vivas.
- 3694 var %scan = $var(%barna_saquit_sent.*,0)
- 3695 var %limit = 80
- 3696 var %prefix = $+(%,barna_saquit_sent.)
- 3697
- 3698 while ((%scan > 0) && (%limit > 0)) {
- 3699 var %v = $var(%barna_saquit_sent.*,%scan)
- 3700 var %ln = $_barna_cachecap124_key_from_prefix_var(%v,%prefix)
- 3701
- 3702 if (%ln != $null) {
- 3703 if (!$_barna_cachecap125_has_saquit_timer_for(%ln)) {
- 3704 if ($_barna_nick_enabled_chans(%ln) == $null) {
- 3705 set -u2 $+(%,barna_saquit_sent.,%ln) 0
- 3706 set -u2 $+(%,barna_saquit_ip.,%ln) 0
- 3707 set -u2 $+(%,barna_saquit_chans.,%ln) 0
- 3708 set -u2 $+(%,barna_saquit_msg.,%ln) 0
- 3709 set -u2 $+(%,barna_saquit_showchans.,%ln) 0
- 3710 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 3711 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 3712 set -u2 $+(%,barna_saquit_q_slot.,%ln) 0
- 3713 return 1
- 3714 }
- 3715 }
- 3716 }
- 3717
- 3718 dec %scan
- 3719 dec %limit
- 3720 }
- 3721
- 3722 ; Fallback seguro: si no hay ningun timer SAQUIT/Check/Final ni cola real, dejar actuar al GC idle completo.
- 3723 if (($_barna_saquit_q_count <= 0) && (!$_barna_cachecap125_has_any_saquit_timer)) {
- 3724 if ($_barna_saquit_gc_idle) return 1
- 3725 }
- 3726
- 3727 ; Fallback prudente bajo presion: elimina solo marcadores sent antiguos, no ip/chans/msg activos.
- 3728 var %scan2 = $var(%barna_saquit_sent.*,0)
- 3729 if (%scan2 > 40) {
- 3730 var %v2 = $var(%barna_saquit_sent.*,%scan2)
- 3731 var %ln2 = $_barna_cachecap124_key_from_prefix_var(%v2,%prefix)
- 3732 if ((%ln2 != $null) && (!$_barna_cachecap125_has_saquit_timer_for(%ln2))) {
- 3733 set -u2 $+(%,barna_saquit_sent.,%ln2) 0
- 3734 return 1
- 3735 }
- 3736 }
- 3737
- 3738 return 0
- 3739}
- 3740
- 3741alias _barna_cachecap125_trim_saquit_safe {
- 3742 var %before = $var(%barna_saquit*,0)
- 3743 if (%before <= 60) return 0
- 3744
- 3745 var %todo = $calc(%before - 60)
- 3746 if (%todo > 28) var %todo = 28
- 3747 var %done = 0
- 3748
- 3749 while (%todo > 0) {
- 3750 if (!$_barna_cachecap125_delete_last_saquit_safe) break
- 3751 inc %done
- 3752 dec %todo
- 3753 }
- 3754
- 3755 return %done
- 3756}
- 3757
- 3758alias _barna_cachecap125_trim_echo_queue_safe {
- 3759 ; Si no hay cola real de echo (head/tail vacios), elimina dedupe/estado sobrante.
- 3760 ; Si hay cola, solo deja que _barna_echo_q_process avance.
- 3761 var %done = 0
- 3762 if ((%barna_echo_q_head != $null) && (%barna_echo_q_tail != $null)) {
- 3763 noop $_barna_echo_q_process
- 3764 return 0
- 3765 }
- 3766
- 3767 var %n = $var(%barna_echo_q_*,0)
- 3768 while ((%n > 0) && (%done < 12)) {
- 3769 var %v = $var(%barna_echo_q_*,%n)
- 3770 if (%v != $null) {
- 3771 set -u1 %v 0
- 3772 inc %done
- 3773 }
- 3774 dec %n
- 3775 }
- 3776
- 3777 return %done
- 3778}
- 3779
- 3780
- 3781alias _barna_cachecap127_unset_varname {
- 3782 ; Build 129 SAFE_GC_AUXDISTINCT: expiracion diferida; nunca usa unset masivo.
- 3783 if ($1 == $null) return 0
- 3784 var %v = $1
- 3785 set -u2 %v 0
- 3786 return 1
- 3787}
- 3788
- 3789alias _barna_cachecap127_delete_last_echo_asn_now {
- 3790 ; Buscar hacia atras una entrada aun no marcada. Evita seleccionar 12 veces
- 3791 ; la misma variable durante un lote mientras espera su expiracion -u2.
- 3792 var %n = $var(%barna_echo_asn_seen.*,0)
- 3793 while (%n > 0) {
- 3794 var %v = $var(%barna_echo_asn_seen.*,%n)
- 3795 if (%v != $null) {
- 3796 var %val = [ [ %v ] ]
- 3797 if ((%val != 0) && (%val != __gc__)) return $_barna_cachecap127_unset_varname(%v)
- 3798 }
- 3799 dec %n
- 3800 }
- 3801 return 0
- 3802}
- 3803
- 3804alias _barna_cachecap127_delete_last_echo_q_now {
- 3805 var %n = $var(%barna_echo_q_seen.*,0)
- 3806 while (%n > 0) {
- 3807 var %v = $var(%barna_echo_q_seen.*,%n)
- 3808 if (%v != $null) {
- 3809 var %val = [ [ %v ] ]
- 3810 if ((%val != 0) && (%val != __gc__)) return $_barna_cachecap127_unset_varname(%v)
- 3811 }
- 3812 dec %n
- 3813 }
- 3814 return 0
- 3815}
- 3816
- 3817alias _barna_cachecap127_delete_last_echo_seen_now {
- 3818 var %n = $var(%barna_echo_seen.*,0)
- 3819 while (%n > 0) {
- 3820 var %v = $var(%barna_echo_seen.*,%n)
- 3821 if (%v != $null) {
- 3822 var %val = [ [ %v ] ]
- 3823 if ((%val != 0) && (%val != __gc__)) return $_barna_cachecap127_unset_varname(%v)
- 3824 }
- 3825 dec %n
- 3826 }
- 3827 return 0
- 3828}
- 3829
- 3830alias _barna_cachecap127_delete_last_badnick_now {
- 3831 ; Selecciona un nick distinto aun no marcado. La entrada principal a 0 indica
- 3832 ; que ese grupo ya espera expiracion y debe saltarse en este lote.
- 3833 var %n = $var(%barna_badnick.*,0)
- 3834 while (%n > 0) {
- 3835 var %v = $var(%barna_badnick.*,%n)
- 3836 var %ln = $_barna_cachecap124_key_from_prefix_var(%v,$+(%,barna_badnick.))
- 3837 if ((%v != $null) && (%ln != $null)) {
- 3838 var %val = [ [ %v ] ]
- 3839 if ((%val != 0) && (%val != __gc__)) {
- 3840 set -u2 $+(%,barna_badnick.,%ln) 0
- 3841 set -u2 $+(%,barna_badnick_ip.,%ln) 0
- 3842 set -u2 $+(%,barna_badnick_chans.,%ln) 0
- 3843 return 1
- 3844 }
- 3845 }
- 3846 dec %n
- 3847 }
- 3848 return 0
- 3849}
- 3850
- 3851alias _barna_cachecap127_delete_last_saquit_notimer {
- 3852 ; Igual que AUXDISTINCT: saltar grupos sent ya marcados a 0 para no renovar
- 3853 ; indefinidamente su -u2 ni contar varias veces el mismo grupo.
- 3854 var %scan = $var(%barna_saquit_sent.*,0)
- 3855 var %limit = 120
- 3856 var %prefix = $+(%,barna_saquit_sent.)
- 3857
- 3858 while ((%scan > 0) && (%limit > 0)) {
- 3859 var %v = $var(%barna_saquit_sent.*,%scan)
- 3860 var %ln = $_barna_cachecap124_key_from_prefix_var(%v,%prefix)
- 3861 var %sentval = $null
- 3862 if (%v != $null) var %sentval = [ [ %v ] ]
- 3863
- 3864 if ((%ln != $null) && (%sentval != 0) && (%sentval != __gc__) && (!$_barna_cachecap125_has_saquit_timer_for(%ln))) {
- 3865 set -u2 $+(%,barna_saquit_sent.,%ln) 0
- 3866 set -u2 $+(%,barna_saquit_ip.,%ln) 0
- 3867 set -u2 $+(%,barna_saquit_chans.,%ln) 0
- 3868 set -u2 $+(%,barna_saquit_msg.,%ln) 0
- 3869 set -u2 $+(%,barna_saquit_showchans.,%ln) 0
- 3870 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 3871 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 3872 set -u2 $+(%,barna_saquit_q_slot.,%ln) 0
- 3873 return 1
- 3874 }
- 3875
- 3876 dec %scan
- 3877 dec %limit
- 3878 }
- 3879
- 3880 return 0
- 3881}
- 3882
- 3883alias _barna_cachecap127_trim_saquit_safe {
- 3884 var %before = $var(%barna_saquit*,0)
- 3885 if (%before <= 50) return 0
- 3886
- 3887 ; Cola SAQUIT vacia: estos restos no son accion viva. Si hay timers activos,
- 3888 ; se respetan en el recorte por nick; si no hay ninguno, el GC idle puede limpiar todo.
- 3889 if (($_barna_saquit_q_count <= 0) && (!$_barna_cachecap125_has_any_saquit_timer)) {
- 3890 var %b0 = $var(%barna_saquit*,0)
- 3891 if ($_barna_saquit_gc_idle) {
- 3892 var %a0 = $var(%barna_saquit*,0)
- 3893 if (%a0 < %b0) return $calc(%b0 - %a0)
- 3894 }
- 3895 }
- 3896
- 3897 var %todo = $calc(%before - 50)
- 3898 if (%todo > 8) var %todo = 8
- 3899 var %done = 0
- 3900
- 3901 while (%todo > 0) {
- 3902 if (!$_barna_cachecap127_delete_last_saquit_notimer) break
- 3903 inc %done
- 3904 dec %todo
- 3905 }
- 3906
- 3907 ; Limpieza de estructura de cola si el contador real es cero.
- 3908 if ($_barna_saquit_q_count <= 0) {
- 3909 if ($var(%barna_saquit_q_item.*,0) > 0) { unset %barna_saquit_q_item.* | inc %done }
- 3910 if ($var(%barna_saquit_q_due.*,0) > 0) { unset %barna_saquit_q_due.* | inc %done }
- 3911 if ($var(%barna_saquit_q_slot.*,0) > 0) { unset %barna_saquit_q_slot.* | inc %done }
- 3912 unset %barna_saquit_q_head
- 3913 unset %barna_saquit_q_tail
- 3914 unset %barna_saquit_q_count_real
- 3915 }
- 3916
- 3917 return %done
- 3918}
- 3919
- 3920alias _barna_cachecap127_trim_echo_queue_now {
- 3921 var %done = 0
- 3922
- 3923 ; Si hay cola real, darle varias pasadas para vaciar antes de tocar variables.
- 3924 if ((%barna_echo_q_head != $null) && (%barna_echo_q_tail != $null)) {
- 3925 noop $_barna_echo_q_process
- 3926 if ((%barna_echo_q_head != $null) && (%barna_echo_q_tail != $null)) return 0
- 3927 }
- 3928
- 3929 ; Sin cola real: todos los %barna_echo_q_* restantes son dedupe/estado temporal.
- 3930 var %n = $var(%barna_echo_q_*,0)
- 3931 while ((%n > 0) && (%done < 12)) {
- 3932 var %v = $var(%barna_echo_q_*,%n)
- 3933 if (%v != $null) {
- 3934 set -u2 %v 0
- 3935 inc %done
- 3936 }
- 3937 dec %n
- 3938 }
- 3939
- 3940 unset %barna_echo_q_head
- 3941 unset %barna_echo_q_tail
- 3942 unset %barna_echo_q_running
- 3943 unset %barna_echo_q_scheduled
- 3944
- 3945 return %done
- 3946}
- 3947
- 3948alias _barna_cachecap127_join_delay_pressure_gc {
- 3949 if ($_barna_join_delay_count <= 12) return 0
- 3950
- 3951 var %oldth = %barna_join_delay_fast_threshold
- 3952 var %oldbatch = %barna_join_delay_fast_batch
- 3953 var %oldage = %barna_join_delay_fast_age
- 3954 var %oldgc = %barna_join_delay_gc_age
- 3955 var %total = $var(%barna_*,0)
- 3956 var %batch = 12
- 3957 if (%total > 1050) var %batch = 20
- 3958 elseif (%total > 900) var %batch = 16
- 3959
- 3960 set %barna_join_delay_fast_threshold 12
- 3961 set %barna_join_delay_fast_batch %batch
- 3962 set %barna_join_delay_fast_age 1
- 3963 set %barna_join_delay_gc_age 12
- 3964
- 3965 var %jb = $_barna_join_delay_count
- 3966 noop $_barna_join_delay_pressure_tick
- 3967 noop $_barna_join_delay_gc_tick
- 3968 var %ja = $_barna_join_delay_count
- 3969 var %done = 0
- 3970 if (%ja < %jb) var %done = $calc(%jb - %ja)
- 3971
- 3972 if (%oldth != $null) set %barna_join_delay_fast_threshold %oldth
- 3973 else unset %barna_join_delay_fast_threshold
- 3974 if (%oldbatch != $null) set %barna_join_delay_fast_batch %oldbatch
- 3975 else unset %barna_join_delay_fast_batch
- 3976 if (%oldage != $null) set %barna_join_delay_fast_age %oldage
- 3977 else unset %barna_join_delay_fast_age
- 3978 if (%oldgc != $null) set %barna_join_delay_gc_age %oldgc
- 3979 else unset %barna_join_delay_gc_age
- 3980
- 3981 return %done
- 3982}
- 3983
- 3984alias _barna_cachecap127_q_ghost_gc {
- 3985 ; Cola ASN real vacia o casi vacia: compactar restos q_* si no hay socket real.
- 3986 if ($_barna_ipinfo_sock_count > 0) return 0
- 3987 var %before = $var(%barna_q_*,0)
- 3988 if (%before <= 40) return 0
- 3989
- 3990 var %live = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 3991 var %running = %barna_q_running
- 3992 if (%running == $null) var %running = 0
- 3993
- 3994 if ((%live == 0) && (%running == 0)) {
- 3995 noop $_barna_q_idle_gc
- 3996 var %after0 = $var(%barna_q_*,0)
- 3997 if (%after0 < %before) return $calc(%before - %after0)
- 3998 }
- 3999
- 4000 if (%live <= 3) {
- 4001 noop $_barna_q_clear_ghost_light
- 4002 noop $_barna_q_compact_vars
- 4003 var %after = $var(%barna_q_*,0)
- 4004 if (%after < %before) return $calc(%before - %after)
- 4005 }
- 4006
- 4007 return 0
- 4008}
- 4009
- 4010alias _barna_cachecap127_lookup_tail_gc {
- 4011 ; Si hay muy poco trabajo real y no hay sockets, recorta restos lookup/ipdone/last_ip antiguos.
- 4012 if ($_barna_ipinfo_sock_count > 0) return 0
- 4013 if ($_barna_userip_q_count > 5) return 0
- 4014 if ($var(%barna_lookup.*,0) <= 5) return 0
- 4015
- 4016 var %before = $calc($var(%barna_lookup.*,0) + $var(%barna_lookup_chans.*,0) + $var(%barna_qry.*,0) + $var(%barna_ipdone.*,0) + $var(%barna_last_ip.*,0) + $var(%barna_ip_keep.*,0))
- 4017 if (%before <= 12) return 0
- 4018
- 4019 ; No se toca una consulta viva si hay q_item/inflight; solo restos por encima de 3.
- 4020 var %done = 0
- 4021 while (($var(%barna_lookup.*,0) > 5) && (%done < 4)) {
- 4022 var %v = $var(%barna_lookup.*,$var(%barna_lookup.*,0))
- 4023 var %ln = $_barna_cachecap124_key_from_prefix_var(%v,$+(%,barna_lookup.))
- 4024 if (%ln == $null) break
- 4025 set -u2 $+(%,barna_lookup.,%ln) 0
- 4026 set -u2 $+(%,barna_lookup_chans.,%ln) 0
- 4027 set -u2 $+(%,barna_qry.,%ln) 0
- 4028 set -u2 $+(%,barna_ipdone.,%ln) 0
- 4029 set -u2 $+(%,barna_last_ip.,%ln) 0
- 4030 set -u2 $+(%,barna_ip_keep.,%ln) 0
- 4031 inc %done
- 4032 }
- 4033
- 4034 return %done
- 4035}
- 4036
- 4037alias _barna_cachecap121_aux_gc {
- 4038 ; Build 129: SAFE_GC_AUXDISTINCT prudente + cache recovery seguro bajo presion total. No toca canales/ASN ni sanciones vivas.
- 4039 if (!$_barna_cachecap121_total_pressure) return 0
- 4040
- 4041 var %changed = 0
- 4042
- 4043 ; Si no hay sockets reales, purga restos sock/rx/done incluso con umbral muy bajo.
- 4044 if (($_barna_ipinfo_sock_count == 0) && ($_barna_sockvar_count > 0)) {
- 4045 var %b = $_barna_sockvar_count
- 4046 noop $_barna_sockvar_gc
- 4047 var %a = $_barna_sockvar_count
- 4048 if (%a < %b) inc %changed $calc(%b - %a)
- 4049 }
- 4050
- 4051 ; Compacta restos de cola ASN cuando no hay sockets reales y hay pocos q_items vivos.
- 4052 if ($var(%barna_q_*,0) > 40) {
- 4053 var %qg = $_barna_cachecap127_q_ghost_gc
- 4054 if (%qg isnum 1-) inc %changed %qg
- 4055 }
- 4056
- 4057 ; Limpieza fina de lookup/ipdone/last_ip si son restos sin socket real.
- 4058 var %lg = $_barna_cachecap127_lookup_tail_gc
- 4059 if (%lg isnum 1-) inc %changed %lg
- 4060
- 4061 ; SAQUIT: target menor que 125. Solo elimina grupos sin timer activo o cola vacia.
- 4062 if ($var(%barna_saquit*,0) > 50) {
- 4063 var %bs = $var(%barna_saquit*,0)
- 4064 noop $_barna_saquit_gc_idle
- 4065 var %as = $var(%barna_saquit*,0)
- 4066 if (%as < %bs) inc %changed $calc(%bs - %as)
- 4067
- 4068 if ($var(%barna_saquit*,0) > 50) {
- 4069 var %st = $_barna_cachecap127_trim_saquit_safe
- 4070 if (%st isnum 1-) inc %changed %st
- 4071 }
- 4072 }
- 4073
- 4074 ; Dedupe/eco auxiliar: bajo presion usa umbrales moderados y expiracion diferida.
- 4075 var %low_asn = 24
- 4076 var %low_q = 8
- 4077 var %low_echo = 4
- 4078
- 4079 var %ec = $var(%barna_echo_asn_seen.*,0)
- 4080 if (%ec > %low_asn) {
- 4081 var %todo = $calc(%ec - %low_asn)
- 4082 if (%todo > 12) var %todo = 12
- 4083 while (%todo > 0) {
- 4084 if (!$_barna_cachecap127_delete_last_echo_asn_now) break
- 4085 inc %changed
- 4086 dec %todo
- 4087 }
- 4088 }
- 4089
- 4090 var %eq = $var(%barna_echo_q_seen.*,0)
- 4091 if (%eq > %low_q) {
- 4092 var %todo = $calc(%eq - %low_q)
- 4093 if (%todo > 12) var %todo = 12
- 4094 while (%todo > 0) {
- 4095 if (!$_barna_cachecap127_delete_last_echo_q_now) break
- 4096 inc %changed
- 4097 dec %todo
- 4098 }
- 4099 }
- 4100
- 4101 var %es = $var(%barna_echo_seen.*,0)
- 4102 if (%es > %low_echo) {
- 4103 var %todo = $calc(%es - %low_echo)
- 4104 if (%todo > 12) var %todo = 12
- 4105 while (%todo > 0) {
- 4106 if (!$_barna_cachecap127_delete_last_echo_seen_now) break
- 4107 inc %changed
- 4108 dec %todo
- 4109 }
- 4110 }
- 4111
- 4112 ; Estado de cola echo sobrante si no hay cola real.
- 4113 if ($var(%barna_echo_q_*,0) > 10) {
- 4114 var %qt = $_barna_cachecap127_trim_echo_queue_now
- 4115 if (%qt isnum 1-) inc %changed %qt
- 4116 }
- 4117
- 4118 ; Badnick temporal: bajo presion global, target moderado y expiracion diferida.
- 4119 var %bad = $var(%barna_badnick.*,0)
- 4120 if (%bad > 15) {
- 4121 var %todo = $calc(%bad - 15)
- 4122 if (%todo > 12) var %todo = 12
- 4123 while (%todo > 0) {
- 4124 if (!$_barna_cachecap127_delete_last_badnick_now) break
- 4125 inc %changed
- 4126 dec %todo
- 4127 }
- 4128 }
- 4129
- 4130 ; JOIN_DELAY: procesa maduros aunque no haya netburst grande. No descarta nicks.
- 4131 if ($_barna_join_delay_count > 12) {
- 4132 var %jg = $_barna_cachecap127_join_delay_pressure_gc
- 4133 if (%jg isnum 1-) inc %changed %jg
- 4134 }
- 4135
- 4136 set -u60 %barna_cachecap121_last_aux %changed
- 4137 return %changed
- 4138}
- 4139
- 4140alias _barna_cachecap117_run {
- 4141 ; Build 132: esta rutina SOLO marca cache ASN por MARKGC.
- 4142 ; El GC auxiliar se reparte por fases desde BarnaMaintenance.
- 4143 _barna_cachecap117_defaults
- 4144 if (%barna_cachecap117_enabled != 1) return 0
- 4145 if (%barna_cachecap117_busy == 1) return 0
- 4146
- 4147 var %mode = $1
- 4148 var %now = $ctime
- 4149
- 4150 if (%mode != force) {
- 4151 if (%barna_cachecap117_last != $null) {
- 4152 if ($calc(%now - %barna_cachecap117_last) < %barna_cachecap117_interval) return 0
- 4153 }
- 4154 }
- 4155
- 4156 set -u15 %barna_cachecap117_busy 1
- 4157 set %barna_cachecap117_last %now
- 4158
- 4159 var %changed = 0
- 4160 var %target = %barna_asn_cache_max_exact
- 4161 var %hard = %barna_asn_cache_hard_limit
- 4162 if (%target !isnum 50-) var %target = 120
- 4163 if (%hard !isnum 80-) var %hard = 180
- 4164
- 4165 var %cache = $var(%barna_asn_cache_asn.*,0)
- 4166 var %batch = $_barna_cachecap117_effective_batch(%cache)
- 4167 if (%batch !isnum 1-) var %batch = 16
- 4168
- 4169 if ($_barna_cachecap121_should_drain) {
- 4170 var %todo = $calc(%cache - %target)
- 4171 if (%todo > %batch) var %todo = %batch
- 4172 if (%todo < 1) var %todo = 1
- 4173 var %d = $_barna_cachecap117_delete_batch_asn(%todo)
- 4174 if (%d isnum 1-) inc %changed %d
- 4175 }
- 4176
- 4177 if ($_barna_cachecap121_should_drain) set -u30 %barna_cachecap117_drain_requested 1
- 4178 else unset %barna_cachecap117_drain_requested
- 4179
- 4180 set -u60 %barna_cachecap117_last_batch %batch
- 4181 set -u60 %barna_cachecap120_last_marked %changed
- 4182 unset %barna_cachecap117_busy
- 4183 return %changed
- 4184}
- 4185
- 4186alias _barna_cachecap117_tick {
- 4187 ; Compatibilidad: una sola pasada cache-only, llamada por BarnaMaintenance.
- 4188 _barna_cachecap117_defaults
- 4189 if (%barna_cachecap117_enabled != 1) return 0
- 4190 if (!$_barna_cachecap121_should_drain) return 0
- 4191 return $_barna_cachecap117_run(force)
- 4192}
- 4193
- 4194alias _barna_cachecap117_drain {
- 4195 ; Compatibilidad: no se autorreprograma. Una pasada y solicitud al scheduler.
- 4196 _barna_cachecap117_defaults
- 4197 if (%barna_cachecap117_enabled != 1) return 0
- 4198 var %c = $_barna_cachecap117_run(force)
- 4199 if ($_barna_cachecap121_should_drain) set -u30 %barna_cachecap117_drain_requested 1
- 4200 return %c
- 4201}
- 4202
- 4203alias barna.cachecap117.install {
- 4204 _barna_runtime_defaults
- 4205 _barna_cachecap117_defaults
- 4206 set %barna_cachecap117_enabled 1
- 4207 set %barna_cachecap117_interval 5
- 4208 set %barna_cachecap117_batch 16
- 4209 unset %barna_cachecap117_busy
- 4210 noop $_barna_cachecap117_run(force)
- 4211 noop $_barna_cachecap117_start_drain
- 4212 _barna_core_ensure_timers
- 4213 echo -s [ASN] CACHECAP136 CRASHSAFE_FAIRPRESSURE_CAPACITY activado. MARKGC de cache separado; auxiliares escalonados por BarnaMaintenance sin solapamientos.
- 4214 barna.cachecap117.status
- 4215}
- 4216
- 4217alias barna.cachecap117.run {
- 4218 _barna_runtime_defaults
- 4219 var %c = $_barna_cachecap117_run(force)
- 4220 echo -s [ASN] CACHECAP136 lote CACHE-ONLY ejecutado. marcadas= %c cacheASN= $var(%barna_asn_cache_asn.*,0) cacheISP= $var(%barna_asn_cache_name.*,0) cacheTS= $var(%barna_asn_cache_ts.*,0) batch_efectivo= %barna_cachecap117_last_batch lastkey= %barna_cachecap117_last_key marked= $var(%barna_cachecap120_marked.*,0) total_vars= $var(%barna_*,0)
- 4221}
- 4222
- 4223alias barna.cachecap117.drain {
- 4224 _barna_runtime_defaults
- 4225 set %barna_cachecap117_enabled 1
- 4226 set %barna_cachecap117_interval 5
- 4227 if (%barna_cachecap117_batch < 16) set %barna_cachecap117_batch 16
- 4228 unset %barna_cachecap117_busy
- 4229 noop $_barna_cachecap117_run(force)
- 4230 noop $_barna_cachecap117_start_drain
- 4231 _barna_core_ensure_timers
- 4232 echo -s [ASN] CACHECAP136 drenaje solicitado al scheduler. No crea timer rapido independiente.
- 4233 barna.cachecap117.status
- 4234}
- 4235
- 4236alias barna.cachecap117.status {
- 4237 _barna_runtime_defaults
- 4238 _barna_cachecap117_defaults
- 4239 var %cache = $var(%barna_asn_cache_asn.*,0)
- 4240 var %eff = $_barna_cachecap117_effective_batch(%cache)
- 4241 echo -s [ASN] CACHECAP136 enabled= %barna_cachecap117_enabled cacheASN= %cache cacheISP= $var(%barna_asn_cache_name.*,0) cacheTS= $var(%barna_asn_cache_ts.*,0) target= %barna_asn_cache_max_exact hard= %barna_asn_cache_hard_limit batch= %barna_cachecap117_batch effective_batch= %eff interval= %barna_cachecap117_interval maint_timer= $timer(BarnaMaintenance) maint_phase= %barna_maintenance_phase maint_task= %barna_maintenance_last_task maint_cursor= %barna_maintenance_pressure_cursor lastkey= %barna_cachecap117_last_key marked= $var(%barna_cachecap120_marked.*,0) skipped_new= %barna_cachecap117_skip_new total_pressure= $_barna_cachecap121_total_pressure total_vars= $var(%barna_*,0)
- 4242}
- 4243
- 4244alias barna.cachecap117.off {
- 4245 set %barna_cachecap117_enabled 0
- 4246 unset %barna_cachecap117_busy
- 4247 unset %barna_cachecap117_drain_requested
- 4248 .timerBarnaCacheCap117Drain off
- 4249 echo -s [ASN] CACHECAP136 desactivado. BarnaMaintenance sigue para JOIN/WHOIP y limpieza minima escalonada.
- 4250}
- 4251
- 4252
- 4253; ------------------------------------------------------------
- 4254; BLOQUE 7.5
- 4255; BACKUP / RESTORE DE ASN POR CANAL
- 4256; ------------------------------------------------------------
- 4257
- 4258alias _barna_asnbackup_file {
- 4259 return $+($mircdir,barna_asn_backup.ini)
- 4260}
- 4261
- 4262alias barna.asnbackup {
- 4263 var %file = $_barna_asnbackup_file
- 4264 var %asn_count = 0
- 4265 var %chan_count = 0
- 4266
- 4267 if ($isfile(%file)) .remove $qt(%file)
- 4268
- 4269 writeini -n $qt(%file) meta saved_ctime $ctime
- 4270 writeini -n $qt(%file) meta saved_date $date
- 4271 writeini -n $qt(%file) meta saved_time $time
- 4272 writeini -n $qt(%file) meta build %barna_build
- 4273
- 4274 var %i = 1
- 4275 while (%i <= $var(%barna_asn.*,0)) {
- 4276 var %v = $var(%barna_asn.*,%i)
- 4277 var %key = $remove(%v,$+(%,barna_asn.))
- 4278 var %val = $var(%barna_asn.*,%i).value
- 4279
- 4280 if (%key != $null) {
- 4281 writeini -n $qt(%file) asn %key %val
- 4282 inc %asn_count
- 4283 }
- 4284
- 4285 inc %i
- 4286 }
- 4287
- 4288 var %i = 1
- 4289 while (%i <= $var(%barna_chan.*,0)) {
- 4290 var %v = $var(%barna_chan.*,%i)
- 4291 var %key = $remove(%v,$+(%,barna_chan.))
- 4292 var %val = $var(%barna_chan.*,%i).value
- 4293
- 4294 if (%key != $null) {
- 4295 writeini -n $qt(%file) chan %key %val
- 4296 inc %chan_count
- 4297 }
- 4298
- 4299 inc %i
- 4300 }
- 4301
- 4302 echo -s [ASN] Backup ASN/canales guardado en: %file
- 4303 echo -s [ASN] Backup contenido: canales= %chan_count ASN_por_canal= %asn_count
- 4304}
- 4305
- 4306alias barna.asnrestore {
- 4307 var %file = $_barna_asnbackup_file
- 4308
- 4309 if (!$isfile(%file)) {
- 4310 echo -s [ASN] No existe backup ASN/canales: %file
- 4311 echo -s [ASN] Ejecuta /barna.asnbackup cuando tengas los ASN correctos por canal.
- 4312 return
- 4313 }
- 4314
- 4315 var %asn_total = $ini($qt(%file),asn,0)
- 4316 var %chan_total = $ini($qt(%file),chan,0)
- 4317
- 4318 if (%asn_total == $null) var %asn_total = 0
- 4319 if (%chan_total == $null) var %chan_total = 0
- 4320
- 4321 if (%asn_total <= 0) {
- 4322 echo -s [ASN] Backup encontrado pero sin entradas ASN. No se restaura nada.
- 4323 return
- 4324 }
- 4325
- 4326 var %i = $var(%barna_asn.*,0)
- 4327 while (%i > 0) {
- 4328 unset $var(%barna_asn.*,%i)
- 4329 dec %i
- 4330 }
- 4331
- 4332 var %i = $var(%barna_chan.*,0)
- 4333 while (%i > 0) {
- 4334 unset $var(%barna_chan.*,%i)
- 4335 dec %i
- 4336 }
- 4337
- 4338 var %rest_chan = 0
- 4339 var %i = 1
- 4340 while (%i <= %chan_total) {
- 4341 var %key = $ini($qt(%file),chan,%i)
- 4342 var %val = $readini($qt(%file),chan,%key)
- 4343
- 4344 if (%key != $null) {
- 4345 var %name = $+(%,barna_chan.,%key)
- 4346 set %name %val
- 4347 inc %rest_chan
- 4348 }
- 4349
- 4350 inc %i
- 4351 }
- 4352
- 4353 var %rest_asn = 0
- 4354 var %i = 1
- 4355 while (%i <= %asn_total) {
- 4356 var %key = $ini($qt(%file),asn,%i)
- 4357 var %val = $readini($qt(%file),asn,%key)
- 4358
- 4359 if (%key != $null) {
- 4360 var %name = $+(%,barna_asn.,%key)
- 4361 set %name %val
- 4362 inc %rest_asn
- 4363 }
- 4364
- 4365 inc %i
- 4366 }
- 4367
- 4368 echo -s [ASN] Restore ASN/canales aplicado desde: %file
- 4369 echo -s [ASN] Restore contenido: canales= %rest_chan ASN_por_canal= %rest_asn
- 4370}
- 4371
- 4372alias barna.varstatus {
- 4373 ; Build 57: antes de imprimir, repara/despierta JOINGUARD si procede.
- 4374 _barna_join_guard_gc
- 4375 echo -s [ASN] Vars: total= $var(%barna_*,0) q= $var(%barna_q_*,0) userip= $var(%barna_userip_*,0) lookup= $var(%barna_lookup.*,0) lookup_chans= $var(%barna_lookup_chans.*,0) last_ip= $var(%barna_last_ip.*,0) ip_keep= $var(%barna_ip_keep.*,0) qry= $var(%barna_qry.*,0) ipdone= $var(%barna_ipdone.*,0) sock= $var(%barna_sock_*,0) sockdot= $var(%barna_sock.*,0) sock_nick= $var(%barna_sock_nick.*,0) sock_ip= $var(%barna_sock_ip.*,0) sock_id= $var(%barna_sock_id.*,0) rx= $var(%barna_rx.*,0) asn_done= $var(%barna_asn_done.*,0) asn_cache_asn= $var(%barna_asn_cache_asn.*,0) asn_cache_name= $var(%barna_asn_cache_name.*,0) asn_cache_ts= $var(%barna_asn_cache_ts.*,0) badpfx2= $var(%barna_badpfx2.*,0) badpfx3= $var(%barna_badpfx3.*,0) badnick= $var(%barna_badnick.*,0) badnick_ip= $var(%barna_badnick_ip.*,0) badnick_chans= $var(%barna_badnick_chans.*,0) seen= $var(%barna_seen.*,0) joinfix= $var(%barna_joinfix_*,0) jguard= $var(%barna_jguard*,0) seenguard= $var(%barna_seen_rescue_recent.*,0) saquit= $var(%barna_saquit*,0)
- 4376}
- 4377
- 4378alias barna.varclean {
- 4379 ; Limpieza segura de variables voluminosas. No borra %barna_badpfx2.* ni %barna_badpfx3.*
- 4380 barna.cachereset
- 4381
- 4382 _barna_q_clear_ghost_light
- 4383
- 4384 if ($_barna_q_idle_gc) {
- 4385 echo -s [ASN] Variables de cola ASN idle limpiadas completamente. No habia cola ASN real.
- 4386 }
- 4387 elseif ($_barna_q_compact_vars) {
- 4388 echo -s [ASN] Variables de cola ASN compactadas. Se conservan solo IDs vivos.
- 4389 }
- 4390 else {
- 4391 echo -s [ASN] No se compacta % $+ barna_q_* porque hay socket/running activo o no hay nada que compactar.
- 4392 }
- 4393
- 4394 if ($_barna_userip_vartrim_idle) {
- 4395 echo -s [ASN] Variables WHOIP temporales compactadas/limpiadas. Puede descartar pocos pendientes viejos para proteger mIRC.
- 4396 }
- 4397 else {
- 4398 echo -s [ASN] No se limpian % $+ barna_userip_* porque hay demasiados WHOIP pendientes o no excede limite.
- 4399 }
- 4400
- 4401 if ($_barna_saquit_compact_vars) {
- 4402 echo -s [ASN] Variables SAQUIT compactadas. Se conservan cola y enviados pendientes.
- 4403 }
- 4404 else {
- 4405 echo -s [ASN] Variables SAQUIT sin cambios o ya compactadas.
- 4406 }
- 4407
- 4408 barna.varstatus
- 4409}
- 4410
- 4411alias _barna_runtime_defaults {
- 4412 set %barna_build ASN_ULTRASAFE_BALANCEDSHED_ASNFAST_TRACE_DIRECT136_IPINFO_HTTPS_UTF8_2026_06_24
- 4413 if (%barna_addon == $null) set %barna_addon 1
- 4414 if (%barna_q_max_retries == $null) set %barna_q_max_retries 0
- 4415 if (%barna_q_stale_secs == $null) set %barna_q_stale_secs 180
- 4416 if (%barna_q_stale_secs > 180) set %barna_q_stale_secs 180
- 4417 if (%barna_q_low_delay == $null) set %barna_q_low_delay 20
- 4418 if (%barna_q_max_workers == $null) set %barna_q_max_workers 1
- 4419 if (%barna_q_delay == $null) set %barna_q_delay 2
- 4420 if (%barna_asn_pump_delay == $null) set %barna_asn_pump_delay 3
- 4421 set %barna_core_tick_delay 5
- 4422 set %barna_core_minimal 1
- 4423 set %barna_whoip_lightvars 1
- 4424 set %barna_userip_q_batch_max 2
- 4425 set %barna_userip_q_batch_delay 1
- 4426 set %barna_userip_turbo_threshold 10
- 4427 set %barna_userip_turbo_batch_max 3
- 4428 if (%barna_userip_turbo_delay == $null) set %barna_userip_turbo_delay 1
- 4429 set %barna_userip_emergency_threshold 30
- 4430 set %barna_userip_emergency_batch_max 3
- 4431 if (%barna_userip_emergency_delay == $null) set %barna_userip_emergency_delay 1
- 4432 set %barna_userip_q_max_pending 400
- 4433 set %barna_userip_q_shed_to 0
- 4434 set %barna_userip_no_shed 1
- 4435 if (%barna_userip_state_ttl == $null) set %barna_userip_state_ttl 60
- 4436 if (%barna_userip_state_ttl > 60) set %barna_userip_state_ttl 60
- 4437 if (%barna_userip_state_ttl < 30) set %barna_userip_state_ttl 30
- 4438 if (%barna_userip_drop_count == $null) set %barna_userip_drop_count 0
- 4439 if (%barna_hygiene_secs == $null) set %barna_hygiene_secs 60
- 4440 if (%barna_asn_cache_max_exact == $null) set %barna_asn_cache_max_exact 120
- 4441 if (%barna_q_var_max_idle == $null) set %barna_q_var_max_idle 120
- 4442 if (%barna_q_var_max_active == $null) set %barna_q_var_max_active 120
- 4443 if (%barna_userip_var_max_idle == $null) set %barna_userip_var_max_idle 80
- 4444 if (%barna_saquit_var_max_idle == $null) set %barna_saquit_var_max_idle 45
- 4445 set %barna_echo_queue 1
- 4446 set %barna_echo_q_batch_max 6
- 4447 set %barna_echo_q_delay 1
- 4448 set %barna_echo_q_max 160
- 4449 if (%barna_join_audit == $null) set %barna_join_audit 0
- 4450 if (%barna_join_audit_delay == $null) set %barna_join_audit_delay 60
- 4451 if (%barna_join_audit_batch == $null) set %barna_join_audit_batch 10
- 4452 if (%barna_join_audit_max_retries == $null) set %barna_join_audit_max_retries 0
- 4453
- 4454 ; Build 110: rescate automatico ultraligero de lookup/qry atascados sin depender de /barna.trace.
- 4455 set %barna_userip_stuck_rescue 1
- 4456 if (%barna_userip_stuck_rescue_secs == $null) set %barna_userip_stuck_rescue_secs 1
- 4457 if (%barna_userip_stuck_rescue_secs > 1) set %barna_userip_stuck_rescue_secs 1
- 4458 if (%barna_userip_stuck_rescue_batch == $null) set %barna_userip_stuck_rescue_batch 10
- 4459 if (%barna_userip_stuck_rescue_batch > 10) set %barna_userip_stuck_rescue_batch 10
- 4460 if (%barna_userip_stuck_rescue_recent_ttl == $null) set %barna_userip_stuck_rescue_recent_ttl 25
- 4461 if (%barna_userip_stuck_rescue_recent_ttl > 25) set %barna_userip_stuck_rescue_recent_ttl 25
- 4462
- 4463 ; Build 115: JOINDELAY_LIGHTGC. AUTONICKSCAN desactivado; solo JOIN con delay.
- 4464 set %barna_autonickscan 0
- 4465 if (%barna_join_delay_secs == $null) set %barna_join_delay_secs 2
- 4466 if (%barna_join_delay_secs < 1) set %barna_join_delay_secs 1
- 4467 if (%barna_join_delay_secs > 2) set %barna_join_delay_secs 2
- 4468 set %barna_join_delay_lightvars 1
- 4469 if (%barna_join_delay_gc_age == $null) set %barna_join_delay_gc_age 12
- 4470 if (%barna_join_delay_gc_age < 6) set %barna_join_delay_gc_age 6
- 4471 if (%barna_join_delay_gc_age > 30) set %barna_join_delay_gc_age 30
- 4472 if (%barna_join_delay_max_pending == $null) set %barna_join_delay_max_pending 70
- 4473 if (%barna_join_delay_max_pending < 40) set %barna_join_delay_max_pending 40
- 4474 if (%barna_join_delay_max_pending > 200) set %barna_join_delay_max_pending 200
- 4475 if (%barna_join_delay_fast_threshold == $null) set %barna_join_delay_fast_threshold 24
- 4476 if (%barna_join_delay_fast_threshold < 15) set %barna_join_delay_fast_threshold 15
- 4477 if (%barna_join_delay_fast_threshold > 80) set %barna_join_delay_fast_threshold 80
- 4478 if (%barna_join_delay_fast_batch == $null) set %barna_join_delay_fast_batch 10
- 4479 if (%barna_join_delay_fast_batch < 2) set %barna_join_delay_fast_batch 2
- 4480 if (%barna_join_delay_fast_batch > 18) set %barna_join_delay_fast_batch 18
- 4481 if (%barna_join_delay_fast_age == $null) set %barna_join_delay_fast_age 2
- 4482 if (%barna_join_delay_fast_age < 1) set %barna_join_delay_fast_age 1
- 4483 if (%barna_join_delay_fast_age > 4) set %barna_join_delay_fast_age 4
- 4484 if (%barna_whoip_watchdog_secs == $null) set %barna_whoip_watchdog_secs 8
- 4485 if (%barna_whoip_watchdog_secs < 5) set %barna_whoip_watchdog_secs 5
- 4486 if (%barna_whoip_watchdog_secs > 15) set %barna_whoip_watchdog_secs 15
- 4487 if (%barna_whoip_watchdog_fallback_secs == $null) set %barna_whoip_watchdog_fallback_secs 10
- 4488 if (%barna_whoip_watchdog_fallback_secs < 6) set %barna_whoip_watchdog_fallback_secs 6
- 4489 if (%barna_whoip_watchdog_fallback_secs > 20) set %barna_whoip_watchdog_fallback_secs 20
- 4490 if (%barna_autonickscan_secs == $null) set %barna_autonickscan_secs 6
- 4491 if (%barna_autonickscan_secs > 6) set %barna_autonickscan_secs 6
- 4492 if (%barna_autonickscan_batch == $null) set %barna_autonickscan_batch 12
- 4493 if (%barna_autonickscan_batch > 12) set %barna_autonickscan_batch 12
- 4494 if (%barna_autonickscan_recent_ttl == $null) set %barna_autonickscan_recent_ttl 90
- 4495 if (%barna_autonickscan_recent_ttl > 90) set %barna_autonickscan_recent_ttl 90
- 4496 if (%barna_autonickscan_q_limit == $null) set %barna_autonickscan_q_limit 60
- 4497 if (%barna_autonickscan_q_limit > 80) set %barna_autonickscan_q_limit 80
- 4498
- 4499 ; VARHYGIENE54: JOINGUARD ultraligero.
- 4500 set %barna_join_guard 0
- 4501 if (%barna_join_guard_delay == $null) set %barna_join_guard_delay 7
- 4502 if (%barna_join_guard_ttl == $null) set %barna_join_guard_ttl 25
- 4503 if (%barna_join_guard_max == $null) set %barna_join_guard_max 60
- 4504 if (%barna_join_guard_batch == $null) set %barna_join_guard_batch 8
- 4505
- 4506 ; VARHYGIENE60: SEENGUARD_NOMISS. Escaneo ligero de nicks vistos sin consulta activa.
- 4507 set %barna_seen_rescue 0
- 4508 if (%barna_seen_rescue_secs == $null) set %barna_seen_rescue_secs 10
- 4509 if (%barna_seen_rescue_batch == $null) set %barna_seen_rescue_batch 20
- 4510 if (%barna_seen_rescue_batch > 30) set %barna_seen_rescue_batch 30
- 4511 if (%barna_joinfix_gc_delay == $null) set %barna_joinfix_gc_delay 5
- 4512 if (%barna_boot_delay == $null) set %barna_boot_delay 3
- 4513 if (%barna_asn_pump_permanent == $null) set %barna_asn_pump_permanent 1
- 4514 if (%barna_heavy_gc_secs == $null) set %barna_heavy_gc_secs 20
- 4515 if (%barna_badpfx_ttl == $null) set %barna_badpfx_ttl 900
- 4516 if (%barna_badpfx_ttl > 900) set %barna_badpfx_ttl 900
- 4517 if (%barna_badpfx2_max_vars == $null) set %barna_badpfx2_max_vars 40
- 4518 if (%barna_badpfx3_max_vars == $null) set %barna_badpfx3_max_vars 80
- 4519 set %barna_seen_max_vars 0
- 4520 set %barna_echo_seen_max_vars 40
- 4521 if (%barna_saquit_emergency_max_vars == $null) set %barna_saquit_emergency_max_vars 300
- 4522 if (%barna_saquit_emergency_max_queue == $null) set %barna_saquit_emergency_max_queue 50
- 4523 if (%barna_saquit_pump_batch == $null) set %barna_saquit_pump_batch 3
- 4524
- 4525 ; VARHYGIENE50 HIGHFLOW_GC:
- 4526 ; En canales de mucha afluencia, el lag viene por acumulacion de variables temporales.
- 4527 ; Este modo NO toca %barna_chan.* ni %barna_asn.*.
- 4528 if (%barna_highflow_gc == $null) set %barna_highflow_gc 1
- 4529 if (%barna_total_max_vars == $null) set %barna_total_max_vars 900
- 4530 if (%barna_total_max_vars > 700) set %barna_total_max_vars 900
- 4531
- 4532 if (%barna_highflow_gc == 1) {
- 4533 if (%barna_heavy_gc_secs == $null) set %barna_heavy_gc_secs 8
- 4534 if (%barna_heavy_gc_secs > 8) set %barna_heavy_gc_secs 8
- 4535 if (%barna_sockvar_gc_secs == $null) set %barna_sockvar_gc_secs 5
- 4536 if (%barna_sockvar_gc_secs > 5) set %barna_sockvar_gc_secs 5
- 4537 if (%barna_lookup_max_vars == $null) set %barna_lookup_max_vars 100
- 4538 if (%barna_lookup_max_vars > 100) set %barna_lookup_max_vars 100
- 4539 if (%barna_lastip_max_vars == $null) set %barna_lastip_max_vars 120
- 4540 if (%barna_lastip_max_vars > 120) set %barna_lastip_max_vars 120
- 4541 if (%barna_lookup_total_max_vars == $null) set %barna_lookup_total_max_vars 250
- 4542 if (%barna_lookup_total_max_vars > 250) set %barna_lookup_total_max_vars 250
- 4543 if (%barna_sockvar_max_vars == $null) set %barna_sockvar_max_vars 25
- 4544 if (%barna_sockvar_max_vars > 25) set %barna_sockvar_max_vars 25
- 4545 if (%barna_seen_max_vars == $null) set %barna_seen_max_vars 350
- 4546 if (%barna_seen_max_vars > 350) set %barna_seen_max_vars 350
- 4547 if (%barna_echo_seen_max_vars == $null) set %barna_echo_seen_max_vars 120
- 4548 if (%barna_echo_seen_max_vars > 120) set %barna_echo_seen_max_vars 120
- 4549 if (%barna_badnick_max_vars == $null) set %barna_badnick_max_vars 90
- 4550 if (%barna_badnick_max_vars > 90) set %barna_badnick_max_vars 90
- 4551 if (%barna_badpfx2_max_vars == $null) set %barna_badpfx2_max_vars 12
- 4552 if (%barna_badpfx2_max_vars > 12) set %barna_badpfx2_max_vars 12
- 4553 if (%barna_badpfx3_max_vars == $null) set %barna_badpfx3_max_vars 25
- 4554 if (%barna_badpfx3_max_vars > 25) set %barna_badpfx3_max_vars 25
- 4555 if (%barna_userip_var_max_idle == $null) set %barna_userip_var_max_idle 50
- 4556 if (%barna_userip_var_max_idle > 50) set %barna_userip_var_max_idle 50
- 4557 if (%barna_q_var_max_idle == $null) set %barna_q_var_max_idle 60
- 4558 if (%barna_q_var_max_idle > 60) set %barna_q_var_max_idle 60
- 4559 if (%barna_q_var_max_active == $null) set %barna_q_var_max_active 80
- 4560 if (%barna_q_var_max_active > 80) set %barna_q_var_max_active 80
- 4561 if (%barna_join_guard_max == $null) set %barna_join_guard_max 60
- 4562 if (%barna_join_guard_max > 60) set %barna_join_guard_max 60
- 4563 if (%barna_join_guard_batch == $null) set %barna_join_guard_batch 8
- 4564 if (%barna_join_guard_batch > 8) set %barna_join_guard_batch 8
- 4565 if (%barna_join_guard_ttl == $null) set %barna_join_guard_ttl 25
- 4566 if (%barna_join_guard_ttl > 25) set %barna_join_guard_ttl 25
- 4567 }
- 4568}
- 4569
- 4570; ------------------------------------------------------------
- 4571; BUILD 133: MANTENIMIENTO JUSTO CON CAPACIDAD ADAPTATIVA
- 4572; Una sola tarea auxiliar por ciclo. Nunca ejecuta varios GC pesados juntos.
- 4573; ------------------------------------------------------------
- 4574alias _barna_maintenance_tick {
- 4575 if (%barna_addon != 1) {
- 4576 .timerBarnaMaintenance off
- 4577 unset %barna_maintenance_busy
- 4578 return
- 4579 }
- 4580
- 4581 if (%barna_maintenance_busy == 1) return
- 4582 set -u8 %barna_maintenance_busy 1
- 4583
- 4584 _barna_runtime_defaults
- 4585 _barna_cachecap117_defaults
- 4586
- 4587 var %pressure = $_barna_cachecap121_total_pressure
- 4588 var %total = $var(%barna_*,0)
- 4589 var %critical = 0
- 4590 if (%total > 1050) var %critical = 1
- 4591 var %cache = $var(%barna_asn_cache_asn.*,0)
- 4592 var %target = %barna_asn_cache_max_exact
- 4593 var %hard = %barna_asn_cache_hard_limit
- 4594 if (%target !isnum 50-) var %target = 120
- 4595 if (%hard !isnum 80-) var %hard = 180
- 4596
- 4597 ; Build 133: mantiene UNA sola familia por tick. Bajo presion aumenta
- 4598 ; solamente el trabajo de la familia elegida y da prioridad alterna a
- 4599 ; cache alta, sin volver a mezclar varios GC en el mismo ciclo.
- 4600 if (%pressure == 1) {
- 4601 var %done = 0
- 4602 var %task = none
- 4603
- 4604 ; Cache al hard siempre tiene prioridad. Por encima de 150 recibe turno
- 4605 ; preferente, pero nunca dos turnos cache consecutivos.
- 4606 if ((%cache >= %hard) && ($_barna_cachecap121_should_drain)) {
- 4607 noop $_barna_cachecap117_run(force)
- 4608 var %done = 1
- 4609 var %task = cache_hard
- 4610 }
- 4611 elseif ((%cache > 150) && (%barna_maintenance_last_task != cache_high) && (%barna_maintenance_last_task != cache_hard) && ($_barna_cachecap121_should_drain)) {
- 4612 noop $_barna_cachecap117_run(force)
- 4613 var %done = 1
- 4614 var %task = cache_high
- 4615 }
- 4616
- 4617 ; JOIN_DELAY puede recibir como maximo un turno de cada dos.
- 4618 if ((%done == 0) && ($_barna_join_delay_count > 12) && (%barna_maintenance_last_task != join_delay)) {
- 4619 noop $_barna_cachecap127_join_delay_pressure_gc
- 4620 var %done = 1
- 4621 var %task = join_delay
- 4622 }
- 4623
- 4624 ; Rotacion justa del resto. En presion critica aumenta el lote de la
- 4625 ; familia elegida, pero sigue siendo una unica familia en este tick.
- 4626 if (%done == 0) {
- 4627 var %tries = 0
- 4628 var %slot = %barna_maintenance_pressure_cursor
- 4629 if (%slot !isnum 0-8) var %slot = 0
- 4630
- 4631 while ((%tries < 8) && (%done == 0)) {
- 4632 inc %slot
- 4633 if (%slot > 8) var %slot = 1
- 4634 inc %tries
- 4635
- 4636 if (%slot == 1) {
- 4637 if (($_barna_userip_q_count > 0) || ($var(%barna_lookup.*,0) > 0) || ($var(%barna_qry.*,0) > 0)) {
- 4638 noop $_barna_userip_stuck_rescue_tick
- 4639 var %done = 1
- 4640 var %task = whoip_rescue
- 4641 }
- 4642 }
- 4643 elseif (%slot == 2) {
- 4644 if ($var(%barna_echo_asn_seen.*,0) > 24) {
- 4645 var %limit = 4
- 4646 if (%critical == 1) var %limit = 7
- 4647 var %i = 0
- 4648 while (%i < %limit) {
- 4649 if (!$_barna_cachecap127_delete_last_echo_asn_now) break
- 4650 inc %i
- 4651 }
- 4652 var %done = 1
- 4653 var %task = echo_asn
- 4654 }
- 4655 }
- 4656 elseif (%slot == 3) {
- 4657 if (($var(%barna_echo_q_*,0) > 12) && (%barna_echo_q_head == $null) && (%barna_echo_q_tail == $null)) {
- 4658 noop $_barna_cachecap127_trim_echo_queue_now
- 4659 var %done = 1
- 4660 var %task = echo_q_state
- 4661 }
- 4662 elseif ($var(%barna_echo_q_seen.*,0) > 8) {
- 4663 var %limit = 3
- 4664 if (%critical == 1) var %limit = 5
- 4665 var %i = 0
- 4666 while (%i < %limit) {
- 4667 if (!$_barna_cachecap127_delete_last_echo_q_now) break
- 4668 inc %i
- 4669 }
- 4670 var %done = 1
- 4671 var %task = echo_q_seen
- 4672 }
- 4673 }
- 4674 elseif (%slot == 4) {
- 4675 if ($var(%barna_badnick.*,0) > 15) {
- 4676 var %limit = 3
- 4677 if (%critical == 1) var %limit = 5
- 4678 var %i = 0
- 4679 while (%i < %limit) {
- 4680 if (!$_barna_cachecap127_delete_last_badnick_now) break
- 4681 inc %i
- 4682 }
- 4683 var %done = 1
- 4684 var %task = badnick
- 4685 }
- 4686 }
- 4687 elseif (%slot == 5) {
- 4688 if ($var(%barna_saquit*,0) > 35) {
- 4689 var %limit = 1
- 4690 if (%critical == 1) var %limit = 2
- 4691 var %i = 0
- 4692 while (%i < %limit) {
- 4693 if (!$_barna_cachecap127_delete_last_saquit_notimer) break
- 4694 inc %i
- 4695 }
- 4696 var %done = 1
- 4697 var %task = saquit
- 4698 }
- 4699 }
- 4700 elseif (%slot == 6) {
- 4701 if (($_barna_ipinfo_sock_count == 0) && ($_barna_sockvar_count > 8)) {
- 4702 noop $_barna_sockvar_gc
- 4703 var %done = 1
- 4704 var %task = sock_state
- 4705 }
- 4706 }
- 4707 elseif (%slot == 7) {
- 4708 if ($var(%barna_echo_seen.*,0) > 4) {
- 4709 var %limit = 2
- 4710 if (%critical == 1) var %limit = 3
- 4711 var %i = 0
- 4712 while (%i < %limit) {
- 4713 if (!$_barna_cachecap127_delete_last_echo_seen_now) break
- 4714 inc %i
- 4715 }
- 4716 var %done = 1
- 4717 var %task = echo_seen
- 4718 }
- 4719 }
- 4720 elseif (%slot == 8) {
- 4721 if ((%cache > $calc(%target + 8)) && ($_barna_cachecap121_should_drain)) {
- 4722 noop $_barna_cachecap117_run(force)
- 4723 var %done = 1
- 4724 var %task = cache_pressure
- 4725 }
- 4726 }
- 4727 }
- 4728
- 4729 set %barna_maintenance_pressure_cursor %slot
- 4730 }
- 4731
- 4732 ; Si ninguna otra familia necesitaba trabajo, JOIN_DELAY puede repetir.
- 4733 if ((%done == 0) && ($_barna_join_delay_count > 12)) {
- 4734 noop $_barna_cachecap127_join_delay_pressure_gc
- 4735 var %done = 1
- 4736 var %task = join_delay
- 4737 }
- 4738
- 4739 set -u120 %barna_maintenance_last_task %task
- 4740 if (%done == 1) {
- 4741 unset %barna_maintenance_busy
- 4742 return
- 4743 }
- 4744 }
- 4745
- 4746 ; Sin presion, la cache solo tiene prioridad si supera el limite duro.
- 4747 if ((%barna_cachecap117_enabled == 1) && (%cache > %hard)) {
- 4748 noop $_barna_cachecap117_run(force)
- 4749 set -u120 %barna_maintenance_last_task cache_hard
- 4750 unset %barna_maintenance_busy
- 4751 return
- 4752 }
- 4753
- 4754 var %phase = %barna_maintenance_phase
- 4755 if (%phase !isnum 0-8) var %phase = 0
- 4756 inc %phase
- 4757 if (%phase > 8) var %phase = 1
- 4758 set %barna_maintenance_phase %phase
- 4759
- 4760 ; Modo normal: una familia por fase, con umbrales prudentes.
- 4761 if (%phase == 1) {
- 4762 set -u120 %barna_maintenance_last_task join_pressure
- 4763 if ($_barna_join_delay_count > 12) noop $_barna_cachecap127_join_delay_pressure_gc
- 4764 }
- 4765 elseif (%phase == 2) {
- 4766 set -u120 %barna_maintenance_last_task join_gc
- 4767 noop $_barna_join_delay_gc_tick
- 4768 }
- 4769 elseif (%phase == 3) {
- 4770 set -u120 %barna_maintenance_last_task whoip_rescue
- 4771 noop $_barna_userip_stuck_rescue_tick
- 4772 }
- 4773 elseif (%phase == 4) {
- 4774 set -u120 %barna_maintenance_last_task echo_asn
- 4775 if ($var(%barna_echo_asn_seen.*,0) > 24) noop $_barna_cachecap127_delete_last_echo_asn_now
- 4776 }
- 4777 elseif (%phase == 5) {
- 4778 set -u120 %barna_maintenance_last_task echo_q
- 4779 if (($var(%barna_echo_q_*,0) > 12) && (%barna_echo_q_head == $null) && (%barna_echo_q_tail == $null)) noop $_barna_cachecap127_trim_echo_queue_now
- 4780 elseif ($var(%barna_echo_q_seen.*,0) > 8) noop $_barna_cachecap127_delete_last_echo_q_now
- 4781 }
- 4782 elseif (%phase == 6) {
- 4783 set -u120 %barna_maintenance_last_task badnick
- 4784 if ($var(%barna_badnick.*,0) > 15) noop $_barna_cachecap127_delete_last_badnick_now
- 4785 }
- 4786 elseif (%phase == 7) {
- 4787 set -u120 %barna_maintenance_last_task saquit
- 4788 if ($var(%barna_saquit*,0) > 40) noop $_barna_cachecap127_delete_last_saquit_notimer
- 4789 }
- 4790 elseif (%phase == 8) {
- 4791 set -u120 %barna_maintenance_last_task sock_state
- 4792 if (($_barna_ipinfo_sock_count == 0) && ($_barna_sockvar_count > 15)) noop $_barna_sockvar_gc
- 4793 }
- 4794
- 4795 unset %barna_maintenance_busy
- 4796}
- 4797
- 4798; ------------------------------------------------------------
- 4799; BLOQUE 3.5
- 4800; ARRANQUE AUTOMATICO Y TIMERS PERMANENTES
- 4801; ------------------------------------------------------------
- 4802
- 4803alias _barna_core_ensure_timers {
- 4804 if (%barna_addon != 1) return
- 4805
- 4806 _barna_runtime_defaults
- 4807
- 4808 var %cdelay = %barna_core_tick_delay
- 4809 if (%cdelay !isnum 1-) var %cdelay = 2
- 4810
- 4811 var %adelay = %barna_asn_pump_delay
- 4812 if (%adelay !isnum 1-) var %adelay = 2
- 4813 if (%adelay < 2) var %adelay = 2
- 4814
- 4815 var %jdelay = %barna_joinfix_gc_delay
- 4816 if (%jdelay !isnum 3-) var %jdelay = 5
- 4817
- 4818 if ($timer(BarnaCoreTick) == $null) {
- 4819 set -u300 %barna_core_tick_running 1
- 4820 .timerBarnaCoreTick 0 %cdelay _barna_core_tick
- 4821 }
- 4822
- 4823 if ($timer(BarnaASNPump) == $null) {
- 4824 set -u300 %barna_asn_pump_running 1
- 4825 set -u300 %barna_asn_pump_armed 1
- 4826 .timerBarnaASNPump 0 %adelay _barna_asn_pump_tick
- 4827 }
- 4828
- 4829 if ($timer(barna_joinfix_gc) == $null) {
- 4830 .timerbarna_joinfix_gc 0 %jdelay barna.joinfixgc.run
- 4831 }
- 4832
- 4833 ; Build 133: mantenimiento pesado fuera de CoreTick, una familia por tick y capacidad adaptativa bajo presion.
- 4834 if ($timer(BarnaMaintenance) == $null) {
- 4835 .timerBarnaMaintenance 0 5 _barna_maintenance_tick
- 4836 }
- 4837}
- 4838
- 4839alias _barna_core_stop_timers {
- 4840 .timerBarnaCoreTick off
- 4841 .timerBarnaASNPump off
- 4842 .timerbarna_joinfix_gc off
- 4843 .timerBarnaMaintenance off
- 4844 unset %barna_maintenance_busy
- 4845 unset %barna_core_tick_running
- 4846 unset %barna_core_tick_busy
- 4847 unset %barna_asn_pump_running
- 4848 unset %barna_asn_pump_armed
- 4849}
- 4850
- 4851alias _barna_autostart {
- 4852 _barna_runtime_defaults
- 4853
- 4854 if (%barna_addon != 1) return
- 4855
- 4856 _barna_core_ensure_timers
- 4857 _barna_q_clear_ghost_light
- 4858 noop $_barna_sockto_orphan_gc
- 4859 noop $_barna_sockvar_gc_tick
- 4860 noop $_barna_q_idle_gc
- 4861 noop $_barna_ipkeep_gc_tick
- 4862
- 4863 ; VARHYGIENE20: compactacion ligera frecuente cuando el contador de variables
- 4864 ; crece mucho respecto a la cola real y no hay socket visible.
- 4865 if ($_barna_ipinfo_sock_count == 0) {
- 4866 var %qv_ct = $var(%barna_q_*,0)
- 4867 var %live_ct = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 4868 var %allow_ct = $calc((%live_ct * 10) + 40)
- 4869 if (%allow_ct < 40) var %allow_ct = 40
- 4870 if (%qv_ct > %allow_ct) noop $_barna_q_compact_vars
- 4871 }
- 4872
- 4873 noop $_barna_saquit_q_repair
- 4874 noop $_barna_saquit_gc_idle
- 4875
- 4876 if ($_barna_saquit_q_count > 0) _barna_saquit_q_start
- 4877
- 4878 if ($1 == manual) {
- 4879 echo -s [ASN] Inicializacion OK. Build: %barna_build
- 4880 }
- 4881}
- 4882
- 4883on *:START:{
- 4884 _barna_runtime_defaults
- 4885 if (%barna_addon == 1) .timerBarnaBoot 1 3 _barna_autostart START
- 4886}
- 4887
- 4888on *:CONNECT:{
- 4889 _barna_runtime_defaults
- 4890 if (%barna_addon == 1) .timerBarnaBoot 1 3 _barna_autostart CONNECT
- 4891}
- 4892
- 4893on *:LOAD:{
- 4894 _barna_runtime_defaults
- 4895 if (%barna_addon == 1) _barna_autostart LOAD
- 4896}
- 4897
- 4898alias barna.init {
- 4899 _barna_autostart manual
- 4900}
- 4901
- 4902alias barna.lagmode {
- 4903 _barna_runtime_defaults
- 4904
- 4905 ; Modo canal grande: más cobertura que el modo conservador,
- 4906 ; pero sin auditor JOIN, sin watchdog USERIP y sin reintentos lentos.
- 4907 ; La clave anti-lag es no acumular rescates; solo acelerar el vaciado de USERIP.
- 4908 set %barna_userip_q_delay 1
- 4909 set %barna_userip_q_batch_max 2
- 4910 set %barna_userip_q_batch_delay 1
- 4911 set %barna_userip_turbo_threshold 10
- 4912 set %barna_userip_turbo_batch_max 3
- 4913 set %barna_userip_turbo_delay 1
- 4914 set %barna_userip_emergency_threshold 30
- 4915 set %barna_userip_emergency_batch_max 3
- 4916 set %barna_userip_emergency_delay 1
- 4917 set %barna_userip_q_max_pending 400
- 4918 set %barna_userip_q_shed_to 0
- 4919 set %barna_userip_no_shed 1
- 4920
- 4921 set %barna_userip_retry_backlog_limit 0
- 4922 set %barna_userip_state_ttl 60
- 4923 set %barna_userip_max_inflight 0
- 4924 set %barna_userip_retry_max 0
- 4925 set %barna_userip_retry_delay 12
- 4926 set %barna_userip_retry_timer_mode 0
- 4927 set %barna_userip_watchdog 0
- 4928 set %barna_userip_watchdog_delay 20
- 4929 set %barna_userip_watchdog_batch 0
- 4930 set %barna_userip_watchdog_retry_max 0
- 4931 set %barna_userip_slow_retry_max 0
- 4932 set %barna_userip_slow_retry_delay 60
- 4933
- 4934 ; ASN limitado a 1 socket para evitar subida progresiva de lag.
- 4935 set %barna_q_max_workers 1
- 4936 set %barna_q_delay 3
- 4937 set %barna_q_low_delay 30
- 4938 set %barna_asn_pump_delay 1
- 4939 set %barna_asn_turbo_threshold 5
- 4940 set %barna_asn_turbo_workers 1
- 4941 set %barna_q_max_retries 0
- 4942 set %barna_sock_timeout_secs 6
- 4943 set %barna_q_start_grace_secs 2
- 4944 set %barna_q_ghost_grace_secs 0
- 4945 set %barna_asn_cache_ttl 1800
- 4946 set %barna_hygiene_secs 60
- 4947 set %barna_asn_cache_max_exact 120
- 4948 set %barna_q_var_max_idle 120
- 4949 set %barna_q_var_max_active 120
- 4950 set %barna_userip_var_max_idle 80
- 4951 set %barna_saquit_var_max_idle 80
- 4952
- 4953 set %barna_debug 0
- 4954 set %barna_debug_verbose 0
- 4955 set %barna_debug_rx 0
- 4956 set %barna_asn_echo_nonmatch 1
- 4957 set %barna_echo_all_common_chans 1
- 4958 set %barna_echo_queue 1
- 4959 set %barna_echo_q_batch_max 6
- 4960 set %barna_echo_q_delay 1
- 4961 set %barna_echo_q_max 160
- 4962
- 4963 set %barna_join_audit 0
- 4964 set %barna_join_audit_delay 60
- 4965 set %barna_join_audit_batch 0
- 4966 set %barna_join_audit_max_retries 0
- 4967
- 4968 set %barna_core_tick_delay 2
- 4969 _barna_core_start
- 4970 _barna_asn_pump_start_if_needed
- 4971 _barna_core_ensure_timers
- 4972 echo -s [ASN] Modo DIRECT107 aplicado: SAFEWHOIP + ECHOFAST + USERIP fallback + trace WHO directo + dedupe dinamico corregido. Avisos ASN locales: 6 cada 1s, cola max 160, sin tocar canales/ASN.
- 4973}
- 4974
- 4975
- 4976
- 4977alias barna.suave {
- 4978 barna.lagmode
- 4979}
- 4980
- 4981
- 4982alias barna.canalgrande {
- 4983 barna.lagmode
- 4984 barna.highflow silent
- 4985}
- 4986
- 4987alias barna.highflow {
- 4988 _barna_runtime_defaults
- 4989 set %barna_highflow_gc 1
- 4990 set %barna_heavy_gc_secs 8
- 4991 set %barna_sockvar_gc_secs 5
- 4992 set %barna_total_max_vars 900
- 4993 set %barna_lookup_max_vars 100
- 4994 set %barna_lastip_max_vars 120
- 4995 set %barna_lookup_total_max_vars 250
- 4996 set %barna_lookup_idle_total_max 200
- 4997 set %barna_sockvar_max_vars 25
- 4998 set %barna_seen_max_vars 220
- 4999 set %barna_echo_seen_max_vars 60
- 5000 set %barna_echo_asn_seen_max_vars 120
- 5001 set %barna_badnick_max_vars 90
- 5002 set %barna_badpfx2_max_vars 12
- 5003 set %barna_badpfx3_max_vars 25
- 5004 set %barna_ip_keep_ttl 600
- 5005 set %barna_ip_keep_max_vars 80
- 5006 set %barna_userip_var_max_idle 50
- 5007 set %barna_q_var_max_idle 60
- 5008 set %barna_q_var_max_active 80
- 5009 if ($1 != silent) echo -s [ASN] HIGHFLOW_GC activado: GC 8s, sockGC 5s, total max 900, limpieza agresiva de temporales sin tocar canales/ASN.
- 5010}
- 5011
- 5012alias barna.highflowoff {
- 5013 set %barna_highflow_gc 0
- 5014 echo -s [ASN] HIGHFLOW_GC desactivado. Los limites actuales no se restauran automaticamente; usa /barna.lagmode si quieres volver a modo equilibrado.
- 5015}
- 5016
- 5017
- 5018; ------------------------------------------------------------
- 5019; BLOQUE 4.9
- 5020; TRAZA Y RECHECK LIGERO POR NICK
- 5021; ------------------------------------------------------------
- 5022
- 5023alias _barna_trace_refresh_seen {
- 5024 if ($1 == $null) return
- 5025
- 5026 var %nick = $1
- 5027 var %i = 1
- 5028
- 5029 while (%i <= $comchan(%nick,0)) {
- 5030 var %c = $comchan(%nick,%i)
- 5031
- 5032 if ($_barna_is_chan_enabled(%c)) {
- 5033 _barna_seen_add %nick %c
- 5034 }
- 5035
- 5036 inc %i
- 5037 }
- 5038}
- 5039
- 5040
- 5041alias -l _barna_userip_q_has_item {
- 5042 if ($1 == $null) return 0
- 5043
- 5044 var %ln = $lower($1)
- 5045 var %head = %barna_userip_q_head
- 5046 var %tail = %barna_userip_q_tail
- 5047
- 5048 if (%head !isnum 1-) return 0
- 5049 if (%tail !isnum 1-) return 0
- 5050 if (%head > %tail) return 0
- 5051
- 5052 var %guard = 0
- 5053
- 5054 while ((%head <= %tail) && (%guard < 500)) {
- 5055 var %n = [ [ $+(%,barna_userip_q_item.,%head) ] ]
- 5056
- 5057 if (($lower(%n) == %ln) && (%n != $null)) return 1
- 5058
- 5059 inc %head
- 5060 inc %guard
- 5061 }
- 5062
- 5063 return 0
- 5064}
- 5065
- 5066alias -l _barna_whoip_has_real_work {
- 5067 if ($1 == $null) return 0
- 5068
- 5069 var %nick = $1
- 5070 var %ln = $lower(%nick)
- 5071
- 5072 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) return 1
- 5073 if (%barna_whoip_current_ln == %ln) return 1
- 5074
- 5075 if ([ [ $+(%,barna_userip_q_pending.,%ln) ] ] == 1) {
- 5076 if ($_barna_userip_q_has_item(%nick)) return 1
- 5077
- 5078 ; Build 105:
- 5079 ; q_pending sin item FIFO ni inflight es un fantasma. No debe bloquear rescates.
- 5080 unset %barna_userip_q_pending. $+ %ln
- 5081 unset %barna_userip_q_chans. $+ %ln
- 5082 unset %barna_userip_sent_recent. $+ %ln
- 5083 }
- 5084
- 5085 return 0
- 5086}
- 5087
- 5088alias _barna_trace_queue_find {
- 5089 if ($1 == $null) return
- 5090
- 5091 var %ln = $lower($1)
- 5092 var %id = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 5093
- 5094 if (%id != $null) return %id
- 5095
- 5096 var %ida = [ [ $+(%,barna_q_active.,%ln) ] ]
- 5097 if (%ida != $null) return %ida
- 5098
- 5099 var %i = 1
- 5100
- 5101 while (%i <= $numtok(%barna_q_items,44)) {
- 5102 var %qid = $gettok(%barna_q_items,%i,44)
- 5103 var %qn = [ [ $+(%,barna_q_nick.,%qid) ] ]
- 5104
- 5105 if ($lower(%qn) == %ln) return %qid
- 5106
- 5107 inc %i
- 5108 }
- 5109
- 5110 var %j = 1
- 5111
- 5112 while (%j <= $numtok(%barna_q_low_items,44)) {
- 5113 var %qid2 = $gettok(%barna_q_low_items,%j,44)
- 5114 var %qn2 = [ [ $+(%,barna_q_nick.,%qid2) ] ]
- 5115
- 5116 if ($lower(%qn2) == %ln) return %qid2
- 5117
- 5118 inc %j
- 5119 }
- 5120}
- 5121
- 5122; ------------------------------------------------------------
- 5123; BLOQUE 5.9.1
- 5124; IPKEEP: cache ligera de IP por nick para debug y Parseline2
- 5125; ------------------------------------------------------------
- 5126
- 5127alias _barna_ip_store {
- 5128 if ($1 == $null) return
- 5129 if ($2 == $null) return
- 5130
- 5131 var %nick = $1
- 5132 var %ip = $2
- 5133 var %ln = $lower(%nick)
- 5134
- 5135 if (!$_barna_is_ipv4(%ip)) return
- 5136
- 5137 ; last_ip sigue siendo cache temporal corta usada por lookup normal.
- 5138 set -u45 %barna_last_ip. $+ %ln %ip
- 5139 set -u45 %barna_last_ip_ts. $+ %ln $ctime
- 5140
- 5141 ; ip_keep sobrevive a LOOKCLEAN/LAGCLEAN para que Parseline2 y /barna.trace
- 5142 ; puedan mostrar IP aunque se limpien variables temporales de lookup.
- 5143 set -u90 %barna_ip_keep. $+ %ln %ip
- 5144}
- 5145
- 5146alias _barna_ip_get {
- 5147 if ($1 == $null) return
- 5148
- 5149 var %nick = $1
- 5150 var %ln = $lower(%nick)
- 5151 var %ip
- 5152
- 5153 %ip = [ [ $+(%,barna_last_ip.,%ln) ] ]
- 5154 if (%ip != $null) return %ip
- 5155
- 5156 %ip = [ [ $+(%,barna_ip_keep.,%ln) ] ]
- 5157 if (%ip != $null) return %ip
- 5158
- 5159 %ip = [ [ $+(%,barna_saquit_ip.,%ln) ] ]
- 5160 if (%ip != $null) return %ip
- 5161
- 5162 %ip = [ [ $+(%,barna_badnick_ip.,%ln) ] ]
- 5163 if (%ip != $null) return %ip
- 5164}
- 5165
- 5166; Build 80: IP fresca de lookup/WHOIP.
- 5167; Solo usa %barna_last_ip.* reciente, no ip_keep, para evitar IP antigua.
- 5168alias _barna_ip_get_fresh_lookup {
- 5169 if ($1 == $null) return
- 5170
- 5171 var %nick = $1
- 5172 var %ln = $lower(%nick)
- 5173 var %ip = [ [ $+(%,barna_last_ip.,%ln) ] ]
- 5174
- 5175 if (%ip == $null) return
- 5176 if (!$_barna_is_ipv4(%ip)) return
- 5177
- 5178 var %ts = [ [ $+(%,barna_last_ip_ts.,%ln) ] ]
- 5179 if (%ts isnum 1-) {
- 5180 var %age = $calc($ctime - %ts)
- 5181 if (%age > 120) return
- 5182 }
- 5183
- 5184 return %ip
- 5185}
- 5186
- 5187; Build 80: si ya hay IP fresca pero no cache ASN, no esperar a SEENGUARD.
- 5188; Lanza ASN directa y limpia el estado WHOIP/lookup.
- 5189alias _barna_fast_asn_if_ip_ready {
- 5190 if ($1 == $null) return 0
- 5191
- 5192 var %nick = $1
- 5193 var %reason = $2-
- 5194 var %ln = $lower(%nick)
- 5195 var %ip = $_barna_ip_get_fresh_lookup(%nick)
- 5196
- 5197 if ($_barna_is_privileged_nick(%nick)) {
- 5198 _barna_dbg PRIVSAFE FASTASN omite nick con @/+v: nick= %nick reason= %reason
- 5199 _barna_privileged_cleanup_nick %nick FASTASN
- 5200 return 1
- 5201 }
- 5202
- 5203 if (%ip == $null) return 0
- 5204
- 5205 var %chans = $_barna_nick_enabled_chans(%nick)
- 5206 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 5207 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 5208
- 5209 if (%chans == $null) return 0
- 5210
- 5211 var %key = $_barna_asn_cache_key(%ip)
- 5212
- 5213 ; Build 83:
- 5214 ; Si ya existe cache ASN/ISP para esta IP, no esperamos a RAW354/SEENGUARD
- 5215 ; ni reencolamos ASN. Aplicamos cache, emitimos aviso y limpiamos lookup/qry.
- 5216 if ($_barna_asn_cache_key_valid(%key)) {
- 5217 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 5218 _barna_dbg FASTCACHE cache ASN aplicada inmediata: nick= %nick ip= %ip chans= %chans reason= %reason
- 5219
- 5220 unset %barna_lookup. $+ %ln
- 5221 unset %barna_lookup_chans. $+ %ln
- 5222 unset %barna_qry. $+ %ln
- 5223 unset %barna_ipdone. $+ %ln
- 5224 unset %barna_userip_sent_recent. $+ %ln
- 5225 unset %barna_userip_retry. $+ %ln
- 5226 unset %barna_userip_sent_ts. $+ %ln
- 5227 unset %barna_userip_watchtry. $+ %ln
- 5228
- 5229 _barna_userip_q_release %nick FASTCACHE_HIT
- 5230 return 1
- 5231 }
- 5232
- 5233 return 0
- 5234 }
- 5235
- 5236 if ([ [ $+(%,barna_q_active.,%ln) ] ] != $null) return 0
- 5237 if ([ [ $+(%,barna_q_pending.,%ln) ] ] != $null) return 0
- 5238
- 5239 _barna_dbg FASTASN IP fresca sin cache, lanzo ASN directa: nick= %nick ip= %ip chans= %chans reason= %reason
- 5240
- 5241 unset %barna_lookup. $+ %ln
- 5242 unset %barna_qry. $+ %ln
- 5243 unset %barna_ipdone. $+ %ln
- 5244 unset %barna_userip_sent_recent. $+ %ln
- 5245
- 5246 _barna_userip_q_release %nick FASTASN_IP_READY
- 5247 _barna_q_clear_ghost_light
- 5248 _barna_q_add %nick %ip %chans
- 5249 _barna_q_process
- 5250 _barna_asn_pump_start_if_needed
- 5251
- 5252 return 1
- 5253}
- 5254
- 5255alias _barna_ipkeep_gc_tick {
- 5256 ; Build 53: GC especifico de ip_keep.
- 5257 ; ip_keep es util para Parseline2/trace, pero en canales grandes puede crecer muy rapido.
- 5258 if (%barna_addon != 1) return 0
- 5259 if (%barna_ipkeep_gc_busy == 1) return 0
- 5260
- 5261 var %now = $ctime
- 5262 if (%barna_ipkeep_gc_last != $null) {
- 5263 if ($calc(%now - %barna_ipkeep_gc_last) < 10) return 0
- 5264 }
- 5265
- 5266 set -u10 %barna_ipkeep_gc_busy 1
- 5267 set %barna_ipkeep_gc_last %now
- 5268
- 5269 var %n = $var(%barna_ip_keep.*,0)
- 5270 var %max = %barna_ip_keep_max_vars
- 5271 if (%max !isnum 100-) var %max = 700
- 5272 if (%max > 700) var %max = 700
- 5273
- 5274 if (%n > %max) {
- 5275 unset %barna_ip_keep.*
- 5276 _barna_dbg IPKEEPGC limpiado por limite: ip_keep= %n max= %max
- 5277 }
- 5278
- 5279 unset %barna_ipkeep_gc_busy
- 5280 return 0
- 5281}
- 5282
- 5283alias barna.ipkeepclean {
- 5284 unset %barna_ip_keep.*
- 5285 echo -s [ASN] IPKEEPCLEAN ejecutado. Limpieza de IP persistente ligera sin tocar canales/ASN.
- 5286}
- 5287
- 5288
- 5289; ------------------------------------------------------------
- 5290; BLOQUE 5.9.2
- 5291; TRACE/FORCEWHOIP: rescate manual inmediato de nicks sin IP
- 5292; ------------------------------------------------------------
- 5293
- 5294alias -l _barna_trace_force_whoip {
- 5295 if ($1 == $null) return 0
- 5296
- 5297 var %nick = $1
- 5298 var %ln = $lower(%nick)
- 5299 var %chans = $2-
- 5300 var %ttl = $_barna_userip_ttl
- 5301
- 5302 if ($_barna_is_join_exception(%nick)) {
- 5303 _barna_dbg EXCEPTIONSAFE TRACE/FORCEWHOIP omite nick exceptuado: nick= %nick
- 5304 _barna_exception_cleanup_nick %nick
- 5305 return 0
- 5306 }
- 5307
- 5308 if ($_barna_is_privileged_nick(%nick)) {
- 5309 _barna_dbg PRIVSAFE TRACE/FORCEWHOIP omite nick con @/+v: nick= %nick
- 5310 _barna_privileged_cleanup_nick %nick TRACE_FORCEWHOIP
- 5311 return 0
- 5312 }
- 5313
- 5314 if (%ttl !isnum 30-) var %ttl = 90
- 5315 if (%chans == $null) var %chans = $_barna_nick_enabled_chans(%nick)
- 5316 if (%chans == $null) return 0
- 5317
- 5318 ; Build 107:
- 5319 ; /barna.trace es una orden manual de rescate. El fallo observado en hpdk/agus14chileno
- 5320 ; era que lookup/qry/pending quedaban vivos pero no existia slot, qid, socket ni IP.
- 5321 ; Si reencolamos por FIFO, algunos nicks vuelven a quedar en pending fantasma.
- 5322 ; Por eso este rescate NO usa la cola: limpia estado ligero y lanza WHO directo,
- 5323 ; creando inflight/current reales para que RAW354 o RAW315 cierren el ciclo.
- 5324 _barna_userip_q_release %nick TRACE_FORCE_DIRECTWHO_RESET
- 5325 unset %barna_userip_q_pending. $+ %ln
- 5326 unset %barna_userip_q_chans. $+ %ln
- 5327 unset %barna_userip_q_slot. $+ %ln
- 5328 unset %barna_userip_sent_recent. $+ %ln
- 5329 unset %barna_userip_stuck_rescue_recent. $+ %ln
- 5330 unset %barna_seen_rescue_recent. $+ %ln
- 5331 unset %barna_ipdone. $+ %ln
- 5332 unset %barna_userip_inflight. $+ %ln
- 5333 unset %barna_lookup. $+ %ln
- 5334 unset %barna_lookup_chans. $+ %ln
- 5335 unset %barna_qry. $+ %ln
- 5336
- 5337 unset %barna_whoip_current_nick
- 5338 unset %barna_whoip_current_ln
- 5339 unset %barna_whoip_315_done_pending
- 5340
- 5341 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 5342 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 5343 set $+(-u,%ttl) %barna_qry. $+ %ln 1
- 5344 set -u15 %barna_userip_sent_recent. $+ %ln 1
- 5345 set $+(-u,%ttl) %barna_whoip_current_nick %nick
- 5346 set $+(-u,%ttl) %barna_whoip_current_ln %ln
- 5347 set $+(-u,%ttl) %barna_userip_inflight. $+ %ln 1
- 5348 set $+(-u,%ttl) %barna_whoip_sent. $+ %ln 1
- 5349 noop $_barna_whoip_315_inc
- 5350 _barna_userip_inflight_inc
- 5351
- 5352 _barna_dbg TRACE FORCEWHOIP WHO directo: nick= %nick chans= %chans
- 5353 .raw -q WHO %nick $+(n,$chr(37),ni)
- 5354
- 5355 ; Build 109: watchdog corto del WHO directo. Si no llega RAW354/IP a los 8s,
- 5356 ; el propio WHO directo se considera stale aunque current/inflight sigan vivos.
- 5357 ; Asi se fuerza USERIP fallback y/o se limpia lookup/qry fantasma.
- 5358 var %hk = $md5(%ln,0)
- 5359 var %tw = BarnaTraceWHOChk_ $+ %hk
- 5360 .timer $+ %tw 1 8 _barna_trace_directwho_check %nick
- 5361
- 5362 _barna_core_start
- 5363
- 5364 return 1
- 5365}
- 5366
- 5367alias -l _barna_trace_directwho_check {
- 5368 if ($1 == $null) return 0
- 5369
- 5370 var %nick = $1
- 5371 var %ln = $lower(%nick)
- 5372 var %chans = $_barna_nick_enabled_chans(%nick)
- 5373
- 5374 if ($_barna_is_privileged_nick(%nick)) {
- 5375 _barna_dbg PRIVSAFE TRACE DIRECTWHO CHECK cancela por @/+v: nick= %nick
- 5376 _barna_privileged_cleanup_nick %nick TRACE_DIRECTWHO_CHECK
- 5377 return 0
- 5378 }
- 5379
- 5380 ; Si el nick ya no esta online en canales activos, limpiar estado fantasma.
- 5381 if (%chans == $null) {
- 5382 _barna_dbg TRACE DIRECTWHO CHECK limpia offline: nick= %nick
- 5383 _barna_userip_q_release %nick TRACE_DIRECTWHO_CHECK_OFFLINE
- 5384 unset %barna_lookup. $+ %ln
- 5385 unset %barna_lookup_chans. $+ %ln
- 5386 unset %barna_qry. $+ %ln
- 5387 unset %barna_ipdone. $+ %ln
- 5388 unset %barna_userip_sent_recent. $+ %ln
- 5389 unset %barna_userip_fallback_recent. $+ %ln
- 5390 return 0
- 5391 }
- 5392
- 5393 ; Si ya tenemos IP fresca, empujar ASN/cache y cerrar lookup/qry.
- 5394 if ($_barna_fast_asn_if_ip_ready(%nick,TRACE_DIRECTWHO_CHECK_IP_READY)) return 1
- 5395
- 5396 var %ip = $_barna_ip_get(%nick)
- 5397 if (%ip != $null) {
- 5398 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 5399 _barna_dbg TRACE DIRECTWHO CHECK aplica cache por IP conservada: nick= %nick ip= %ip chans= %chans
- 5400 _barna_userip_q_release %nick TRACE_DIRECTWHO_CHECK_CACHE
- 5401 unset %barna_lookup. $+ %ln
- 5402 unset %barna_lookup_chans. $+ %ln
- 5403 unset %barna_qry. $+ %ln
- 5404 unset %barna_ipdone. $+ %ln
- 5405 unset %barna_userip_sent_recent. $+ %ln
- 5406 return 1
- 5407 }
- 5408
- 5409 if ($_barna_trace_queue_find(%nick) == $null) {
- 5410 _barna_dbg TRACE DIRECTWHO CHECK envia IP a ASN: nick= %nick ip= %ip chans= %chans
- 5411 _barna_userip_q_release %nick TRACE_DIRECTWHO_CHECK_IP_TO_ASN
- 5412 unset %barna_lookup. $+ %ln
- 5413 unset %barna_qry. $+ %ln
- 5414 unset %barna_ipdone. $+ %ln
- 5415 unset %barna_userip_sent_recent. $+ %ln
- 5416 _barna_q_add %nick %ip %chans
- 5417 _barna_q_process
- 5418 _barna_asn_pump_start_if_needed
- 5419 return 1
- 5420 }
- 5421 }
- 5422
- 5423 var %inflight = [ [ $+(%,barna_userip_inflight.,%ln) ] ]
- 5424 var %hascurrent = 0
- 5425 if (%barna_whoip_current_ln == %ln) var %hascurrent = 1
- 5426 var %qid = $_barna_trace_queue_find(%nick)
- 5427
- 5428 ; Build 109:
- 5429 ; Este check pertenece exclusivamente al WHO directo lanzado por /barna.trace.
- 5430 ; Si a los 8s no hay IP ni qid ASN, ese WHO se considera stale aunque todavia
- 5431 ; sigan vivos current/inflight. En builds anteriores eso mantenia lookup/qry=1
- 5432 ; sin qid/socket/IP durante varios traces.
- 5433 if (%qid == $null) {
- 5434 _barna_dbg TRACE DIRECTWHO CHECK stale sin IP: nick= %nick chans= %chans inflight= %inflight current= %hascurrent
- 5435 _barna_userip_q_release %nick TRACE_DIRECTWHO_CHECK_STALE_DIRECTWHO
- 5436 unset %barna_whoip_current_nick
- 5437 unset %barna_whoip_current_ln
- 5438 unset %barna_whoip_315_done_pending
- 5439
- 5440 if ([ [ $+(%,barna_userip_fallback_recent.,%ln) ] ] != 1) {
- 5441 if ($_barna_userip_fallback_send(%nick,TRACE_DIRECTWHO_CHECK_STALE_NO_RAW354)) {
- 5442 var %hk2 = $md5(%ln,0)
- 5443 var %tw2 = BarnaTraceWHOChk_ $+ %hk2
- 5444 .timer $+ %tw2 1 10 _barna_trace_directwho_check %nick
- 5445 return 1
- 5446 }
- 5447 }
- 5448
- 5449 _barna_dbg TRACE DIRECTWHO CHECK limpia fantasma sin IP tras fallback: nick= %nick chans= %chans
- 5450 _barna_userip_q_release %nick TRACE_DIRECTWHO_CHECK_STUCK_CLEAN
- 5451 unset %barna_lookup. $+ %ln
- 5452 unset %barna_lookup_chans. $+ %ln
- 5453 unset %barna_qry. $+ %ln
- 5454 unset %barna_ipdone. $+ %ln
- 5455 unset %barna_userip_sent_recent. $+ %ln
- 5456 unset %barna_seen_rescue_recent. $+ %ln
- 5457 unset %barna_userip_fallback_recent. $+ %ln
- 5458 return 0
- 5459 }
- 5460
- 5461 return 0
- 5462}
- 5463
- 5464alias barna.trace {
- 5465 _barna_runtime_defaults
- 5466
- 5467 if ($1 == $null) {
- 5468 echo -a $chr(3) $+ 4 $+ [ASN] $chr(15) Uso: /barna.trace <nick>
- 5469 return
- 5470 }
- 5471
- 5472 var %nick = $1
- 5473 var %ln = $lower(%nick)
- 5474
- 5475 if ($_barna_is_join_exception(%nick)) {
- 5476 _barna_exception_cleanup_nick %nick
- 5477 echo -a $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) nick= %nick estado= EXCEPCION_ONJOIN_NO_SCAN_NO_SANCION
- 5478 halt
- 5479 }
- 5480
- 5481 _barna_trace_refresh_seen %nick
- 5482
- 5483 var %seen = $_barna_seen_get(%nick)
- 5484 var %lookup = [ [ $+(%,barna_lookup.,%ln) ] ]
- 5485 var %lookupchans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 5486 var %qry = [ [ $+(%,barna_qry.,%ln) ] ]
- 5487 var %uqslot = [ [ $+(%,barna_userip_q_slot.,%ln) ] ]
- 5488 var %uqpend = [ [ $+(%,barna_userip_q_pending.,%ln) ] ]
- 5489 var %sent = [ [ $+(%,barna_userip_sent_recent.,%ln) ] ]
- 5490 var %lastip = $_barna_ip_get(%nick)
- 5491 var %ipdone = [ [ $+(%,barna_ipdone.,%ln) ] ]
- 5492 var %qid = $_barna_trace_queue_find(%nick)
- 5493 var %qstate = ninguno
- 5494 var %qip = $null
- 5495 var %qchans = $null
- 5496 var %qtry = $null
- 5497 var %qage = $null
- 5498 var %cacheasn = $null
- 5499 var %cachename = $null
- 5500 var %status = sin_estado
- 5501
- 5502 if (%lookup == $null) var %lookup = 0
- 5503 if (%qry == $null) var %qry = 0
- 5504 if (%uqslot == $null) var %uqslot = no
- 5505 if (%uqpend == $null) var %uqpend = no
- 5506 if (%sent == $null) var %sent = no
- 5507 if (%ipdone == $null) var %ipdone = 0
- 5508 if (%seen == $null) var %seen = ninguno
- 5509 if (%lookupchans == $null) var %lookupchans = ninguno
- 5510 if (%lastip == $null) var %lastip = ninguna
- 5511
- 5512 if (%qid != $null) {
- 5513 var %qactive = [ [ $+(%,barna_q_active.,%ln) ] ]
- 5514 var %qpending = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 5515
- 5516 if (%qactive == %qid) var %qstate = activa
- 5517 elseif (%qpending == %qid) var %qstate = pendiente
- 5518 else var %qstate = en_lista
- 5519
- 5520 if ([ [ $+(%,barna_q_low.,%qid) ] ] == 1) var %qstate = %qstate $+ /baja
- 5521 else var %qstate = %qstate $+ /normal
- 5522
- 5523 var %qip = [ [ $+(%,barna_q_ip.,%qid) ] ]
- 5524 var %qchans = [ [ $+(%,barna_q_chans.,%qid) ] ]
- 5525 var %qtry = [ [ $+(%,barna_q_try.,%qid) ] ]
- 5526 var %qts = [ [ $+(%,barna_q_ts.,%qid) ] ]
- 5527
- 5528 if (%qip == $null) var %qip = sin_ip
- 5529 if (%qchans == $null) var %qchans = sin_canales
- 5530 if (%qtry == $null) var %qtry = 0
- 5531 if (%qts != $null) var %qage = $calc($ctime - %qts) $+ s
- 5532 else var %qage = sin_ts
- 5533 }
- 5534
- 5535 if (%lastip != ninguna) {
- 5536 var %key = $_barna_asn_cache_key(%lastip)
- 5537 var %cacheasn = [ [ $+(%,barna_asn_cache_asn.,%key) ] ]
- 5538 var %cachename = [ [ $+(%,barna_asn_cache_name.,%key) ] ]
- 5539 }
- 5540
- 5541 if (!$_barna_asn_cache_val_ok(%cacheasn)) var %cacheasn = no
- 5542 if (!$_barna_asn_cache_val_ok(%cachename)) var %cachename = no
- 5543
- 5544 ; Build 96:
- 5545 ; Si el trace detecta cola ASN pendiente pero la cache ASN/ISP ya existe,
- 5546 ; aplica cache, emite aviso/sancion y elimina esa cola fantasma.
- 5547 if ((%cacheasn != no) && (%lastip != ninguna) && (%qid != $null)) {
- 5548 if ($_barna_q_fastcache_apply(%qid,TRACE_QFASTCACHE)) {
- 5549 unset %barna_lookup. $+ %ln
- 5550 unset %barna_lookup_chans. $+ %ln
- 5551 unset %barna_qry. $+ %ln
- 5552 unset %barna_ipdone. $+ %ln
- 5553 unset %barna_userip_sent_recent. $+ %ln
- 5554 _barna_userip_q_release %nick TRACE_QFASTCACHE
- 5555 var %lookup = 0
- 5556 var %qry = 0
- 5557 var %ipdone = 0
- 5558 var %lookupchans = ninguno
- 5559 var %qid = $null
- 5560 var %qstate = ninguno
- 5561 var %qip = $null
- 5562 var %qchans = $null
- 5563 var %qtry = $null
- 5564 var %qage = $null
- 5565 var %status = cache_ASN_aplicada_QFASTCACHE
- 5566 }
- 5567 }
- 5568
- 5569 ; Build 83:
- 5570 ; Si el trace detecta IP + cache ASN pero quedan lookup/qry vivos,
- 5571 ; aplica cache y limpia el estado pendiente. /barna.trace ya actua como
- 5572 ; herramienta de rescate en otros casos, asi que mantenemos esa filosofia.
- 5573 if ((%cacheasn != no) && (%lastip != ninguna) && (%lookup == 1) && (%qid == $null)) {
- 5574 var %trace_chans_fastcache = %lookupchans
- 5575 if (%trace_chans_fastcache == ninguno) var %trace_chans_fastcache = $_barna_seen_get(%nick)
- 5576 if (%trace_chans_fastcache == $null) var %trace_chans_fastcache = $_barna_nick_enabled_chans(%nick)
- 5577
- 5578 if (%trace_chans_fastcache != $null) {
- 5579 if ($_barna_asn_cache_apply(%nick,%lastip,%trace_chans_fastcache)) {
- 5580 unset %barna_lookup. $+ %ln
- 5581 unset %barna_lookup_chans. $+ %ln
- 5582 unset %barna_qry. $+ %ln
- 5583 unset %barna_ipdone. $+ %ln
- 5584 unset %barna_userip_sent_recent. $+ %ln
- 5585 _barna_userip_q_release %nick TRACE_FASTCACHE
- 5586 var %lookup = 0
- 5587 var %qry = 0
- 5588 var %ipdone = 0
- 5589 var %lookupchans = ninguno
- 5590 var %status = cache_ASN_aplicada_FASTCACHE
- 5591 }
- 5592 }
- 5593 }
- 5594
- 5595 if ((%status != cache_ASN_aplicada_FASTCACHE) && (%status != cache_ASN_aplicada_QFASTCACHE)) {
- 5596 if (%qid != $null) var %status = esperando_ASN
- 5597 elseif (%uqslot != no) var %status = esperando_WHOIP_en_cola
- 5598 elseif (%lookup == 1) var %status = WHOIP_enviado_o_esperando_RAW354
- 5599 elseif (%cacheasn != no) var %status = cache_ASN_disponible
- 5600 elseif (%seen != ninguno) var %status = visto_sin_consulta_activa
- 5601 }
- 5602
- 5603 ; Build 60: si el trace detecta exactamente el estado problematico y el nick sigue online,
- 5604 ; dispara un rescate manual seguro. Esto ayuda a confirmar/reparar casos reales en vivo.
- 5605 if (%status == visto_sin_consulta_activa) {
- 5606 var %livechans_trace = $_barna_nick_enabled_chans(%nick)
- 5607 if (%livechans_trace != $null) {
- 5608 if (!$_barna_seen_rescue_has_result(%nick)) {
- 5609 if (!$_barna_nick_has_lookup_work(%nick)) {
- 5610 set -u120 %barna_seen_rescue_recent. $+ %ln 1
- 5611 var %trace_ip = $_barna_ip_get(%nick)
- 5612
- 5613 if (%trace_ip != $null) {
- 5614 _barna_q_add %nick %trace_ip %livechans_trace
- 5615 var %status = visto_sin_consulta_activa_RESCATADO_ASN
- 5616 }
- 5617 else {
- 5618 if ($_barna_trace_force_whoip(%nick,%livechans_trace)) {
- 5619 var %status = visto_sin_consulta_activa_RESCATADO_WHOIP
- 5620 var %lookup = [ [ $+(%,barna_lookup.,%ln) ] ]
- 5621 var %lookupchans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 5622 var %qry = [ [ $+(%,barna_qry.,%ln) ] ]
- 5623 var %uqslot = [ [ $+(%,barna_userip_q_slot.,%ln) ] ]
- 5624 var %uqpend = [ [ $+(%,barna_userip_q_pending.,%ln) ] ]
- 5625 var %sent = [ [ $+(%,barna_userip_sent_recent.,%ln) ] ]
- 5626 if (%lookup == $null) var %lookup = 0
- 5627 if (%lookupchans == $null) var %lookupchans = ninguno
- 5628 if (%qry == $null) var %qry = 0
- 5629 if (%uqslot == $null) var %uqslot = no
- 5630 if (%uqpend == $null) var %uqpend = no
- 5631 if (%sent == $null) var %sent = no
- 5632 }
- 5633 }
- 5634 }
- 5635 }
- 5636 }
- 5637 }
- 5638
- 5639 ; Build 106:
- 5640 ; Si /barna.trace detecta lookup/qry vivos sin IP pero sin trabajo real
- 5641 ; (sin inflight/current, sin qid, sin socket y sin IP), fuerza rescate aunque haya
- 5642 ; q_pending/sent_recent fantasma o un q_item viejo que ya no tiene consulta viva.
- 5643 if (%status == WHOIP_enviado_o_esperando_RAW354) {
- 5644 var %trace_inflight = [ [ $+(%,barna_userip_inflight.,%ln) ] ]
- 5645 var %trace_has_current = 0
- 5646 if (%barna_whoip_current_ln == %ln) var %trace_has_current = 1
- 5647
- 5648 if ((%lastip == ninguna) && (%qid == $null) && (%trace_inflight != 1) && (%trace_has_current != 1)) {
- 5649 var %livechans_trace2 = $_barna_nick_enabled_chans(%nick)
- 5650
- 5651 if (%livechans_trace2 != $null) {
- 5652 if ($_barna_trace_force_whoip(%nick,%livechans_trace2)) {
- 5653 var %lookupchans = %livechans_trace2
- 5654 var %status = WHOIP_lookup_huerfano_RESCATADO_WHOIP
- 5655 var %lookup = [ [ $+(%,barna_lookup.,%ln) ] ]
- 5656 var %qry = [ [ $+(%,barna_qry.,%ln) ] ]
- 5657 var %uqslot = [ [ $+(%,barna_userip_q_slot.,%ln) ] ]
- 5658 var %uqpend = [ [ $+(%,barna_userip_q_pending.,%ln) ] ]
- 5659 var %sent = [ [ $+(%,barna_userip_sent_recent.,%ln) ] ]
- 5660 if (%lookup == $null) var %lookup = 0
- 5661 if (%qry == $null) var %qry = 0
- 5662 if (%uqslot == $null) var %uqslot = no
- 5663 if (%uqpend == $null) var %uqpend = no
- 5664 if (%sent == $null) var %sent = no
- 5665 }
- 5666 }
- 5667 else {
- 5668 unset %barna_lookup. $+ %ln
- 5669 unset %barna_lookup_chans. $+ %ln
- 5670 unset %barna_qry. $+ %ln
- 5671 unset %barna_ipdone. $+ %ln
- 5672 _barna_userip_q_release %nick TRACE_WHOIP_OFFLINE
- 5673 var %lookup = 0
- 5674 var %qry = 0
- 5675 var %ipdone = 0
- 5676 var %lookupchans = ninguno
- 5677 var %status = WHOIP_lookup_limpiado_nick_no_online
- 5678 }
- 5679 }
- 5680 }
- 5681
- 5682 window -a @BarnaTrace
- 5683 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) nick= %nick estado= %status
- 5684 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) canales= %seen lookup= %lookup lookup_chans= %lookupchans qry= %qry ipdone= %ipdone
- 5685 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) whoip_slot= %uqslot whoip_pending= %uqpend sent_recent= %sent
- 5686 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) last_ip= %lastip cache_asn= %cacheasn cache_isp= %cachename
- 5687 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) qid= $iif(%qid != $null,%qid,ninguno) qstate= %qstate qip= %qip qchans= %qchans qtry= %qtry qage= %qage running= $iif(%barna_q_running != $null,%barna_q_running,0) sockets= $_barna_ipinfo_sock_count
- 5688 echo @BarnaTrace $timestamp $chr(3) $+ 12 $+ [ASN-TRACE] $chr(15) seenguard enabled= %barna_seen_rescue seen= $var(%barna_seen.*,0) recent= $var(%barna_seen_rescue_recent.*,0) pos= %barna_seen_rescue_pos secs= %barna_seen_rescue_secs batch= %barna_seen_rescue_batch timer= CoreTick
- 5689}
- 5690
- 5691alias barna.recheck {
- 5692 _barna_runtime_defaults
- 5693
- 5694 if ($1 == $null) {
- 5695 echo -a $chr(3) $+ 4 $+ [ASN] $chr(15) Uso: /barna.recheck <nick>
- 5696 return
- 5697 }
- 5698
- 5699 var %nick = $1
- 5700 var %ln = $lower(%nick)
- 5701
- 5702 _barna_trace_refresh_seen %nick
- 5703
- 5704 var %seen = $_barna_seen_get(%nick)
- 5705
- 5706 if (%seen == $null) {
- 5707 echo -a $chr(3) $+ 4 $+ [ASN] $chr(15) No reencolo $chr(2) $+ %nick $+ $chr(15) $+ : no está en ningún canal activado común.
- 5708 return
- 5709 }
- 5710
- 5711 var %qid = $_barna_trace_queue_find(%nick)
- 5712
- 5713 if (%qid != $null) {
- 5714 _barna_q_schedule 1
- 5715 _barna_core_start
- 5716 _barna_asn_pump_start_if_needed
- 5717 echo -a $chr(3) $+ 12 $+ [ASN] $chr(15) $+ $chr(32) $+ %nick ya tiene consulta ASN pendiente/activa. id= %qid chans= [ [ $+(%,barna_q_chans.,%qid) ] ]
- 5718 return
- 5719 }
- 5720
- 5721 _barna_userip_q_release %nick RECHECK_FORCE
- 5722 unset %barna_lookup. $+ %ln
- 5723 unset %barna_lookup_chans. $+ %ln
- 5724 unset %barna_qry. $+ %ln
- 5725 unset %barna_ipdone. $+ %ln
- 5726 unset %barna_userip_q_chans. $+ %ln
- 5727 unset %barna_userip_sent_recent. $+ %ln
- 5728 unset %barna_userip_retry. $+ %ln
- 5729 unset %barna_userip_sent_ts. $+ %ln
- 5730 unset %barna_userip_sent_recent. $+ %ln
- 5731
- 5732 set -u90 %barna_qry. $+ %ln 1
- 5733 set -u90 %barna_lookup. $+ %ln 1
- 5734 set -u90 %barna_lookup_chans. $+ %ln %seen
- 5735
- 5736 _barna_userip_q_add %nick
- 5737
- 5738 echo -a $chr(3) $+ 12 $+ [ASN] $chr(15) Recheck encolado para $chr(2) $+ %nick $+ $chr(15) canales= %seen
- 5739}
- 5740
- 5741alias barna.userip {
- 5742 if ($1 == $null) {
- 5743 echo -a $chr(3) $+ 4 $+ [ASN] $chr(15) Uso: /barna.userip <nick>
- 5744 return
- 5745 }
- 5746
- 5747 var %nick = $1
- 5748 var %ln = $lower(%nick)
- 5749
- 5750 set -u20 %barna_manual_userip. $+ %ln 1
- 5751 set -u20 %barna_manual_userip_win. $+ %ln $active
- 5752
- 5753 _barna_whoip_send %nick
- 5754}
- 5755
- 5756alias barna.qstatus {
- 5757 _barna_runtime_defaults
- 5758 _barna_core_ensure_timers
- 5759
- 5760 ; Build 132: qstatus es realmente pasivo. No ejecuta STATECAP, compactaciones,
- 5761 ; GC de sockets, cache, USERIP ni SAQUIT mientras recopila el estado.
- 5762 ; Para mantenimiento manual usar los comandos especificos.
- 5763
- 5764 var %in = %barna_userip_inflight_count
- 5765 var %qn = $numtok(%barna_q_items,44)
- 5766 var %ql = $numtok(%barna_q_low_items,44)
- 5767 var %qr = %barna_q_running
- 5768
- 5769 if (%in == $null) var %in = 0
- 5770 if (%qn == $null) var %qn = 0
- 5771 if (%ql == $null) var %ql = 0
- 5772 if (%qr == $null) var %qr = 0
- 5773
- 5774 var %pt = $timer(BarnaASNPump)
- 5775 if (%pt == $null) var %pt = OFF
- 5776 else var %pt = ON
- 5777
- 5778 var %ct = $timer(BarnaCoreTick)
- 5779 if (%ct == $null) var %ct = OFF
- 5780 else var %ct = ON
- 5781
- 5782 echo -s [ASN] Build: %barna_build
- 5783 echo -s [ASN] WHOIP pendientes: $_barna_userip_q_count max: %barna_userip_q_max_pending drop: %barna_userip_drop_count modo: BALANCEDSHED_ASNFAST autowhorescue= %barna_userip_stuck_rescue joinfix: $_barna_joinfix_q_count
- 5784 echo -s [ASN] ASN normal: %qn ASN baja: %ql ASN running: %qr ASN heartbeat: %pt core: %ct directASN: ON asnfast: ON qbusy: %barna_q_process_busy ASN turbo desde: %barna_asn_turbo_threshold workers: $_barna_asn_workers_now sockets: $_barna_ipinfo_sock_count firstid: $_barna_asn_first_id firstnick: $_barna_asn_first_nick firstip: $_barna_asn_first_ip lastid: %barna_q_last_start_id lastsock: %barna_q_last_start_sock SAQUIT cola: $_barna_saquit_q_count
- 5785 echo -s [ASN] Higiene: cacheASN= $var(%barna_asn_cache_asn.*,0) max= %barna_asn_cache_max_exact hard= %barna_asn_cache_hard_limit cachecap117= %barna_cachecap117_enabled qvars= $var(%barna_q_*,0) whoipvars= $var(%barna_userip_*,0) joinfixvars= $var(%barna_joinfix_*,0) saquitvars= $var(%barna_saquit*,0) echoqvars= $var(%barna_echo_q_*,0)
- 5786 echo -s [ASN] Ritmo WHOIP normal: %barna_userip_q_batch_max cada %barna_userip_q_batch_delay $+ s
- 5787 echo -s [ASN] Ritmo WHOIP turbo: desde %barna_userip_turbo_threshold pendientes, %barna_userip_turbo_batch_max cada %barna_userip_turbo_delay $+ s
- 5788 echo -s [ASN] Ritmo WHOIP emergencia: desde %barna_userip_emergency_threshold pendientes, %barna_userip_emergency_batch_max cada %barna_userip_emergency_delay $+ s
- 5789 echo -s [ASN] Modo WHOIP: DIRECT136_IPINFO_HTTPS / CoreTick solo colas + una familia por tick + capacidad adaptativa bajo presion + MARKGC cache seguro
- 5790}
- 5791
- 5792alias barna.asnkick {
- 5793 _barna_runtime_defaults
- 5794 _barna_q_force_start
- 5795 ; No ejecutar sanidad inmediatamente tras arrancar sockopen: mIRC puede tardar
- 5796 ; un instante en exponer el socket en $sock(0).
- 5797
- 5798 var %qn = $numtok(%barna_q_items,44)
- 5799 var %ql = $numtok(%barna_q_low_items,44)
- 5800 var %qr = %barna_q_running
- 5801
- 5802 if (%qn == $null) var %qn = 0
- 5803 if (%ql == $null) var %ql = 0
- 5804 if (%qr == $null) var %qr = 0
- 5805
- 5806 echo -s [ASN] Motor ASN forzado. normal= %qn baja= %ql running= %qr heartbeat= $iif($timer(BarnaASNPump),ON,OFF) sockets= $_barna_ipinfo_sock_count
- 5807}
- 5808
- 5809; ------------------------------------------------------------
- 5810; BLOQUE 6.1
- 5811; COLA LOCAL DE AVISOS EN CANALES
- 5812; Evita congelar mIRC cuando se resuelven muchos ASN seguidos
- 5813; ------------------------------------------------------------
- 5814
- 5815; Build 89: devuelve el nick con el case real que tiene mIRC en canal.
- 5816; Si no se puede resolver, conserva el recibido.
- 5817alias _barna_nick_display {
- 5818 if ($1 == $null) return
- 5819
- 5820 ; Build 93: cero coste por aviso. No buscar en nicklist ni usar cache seen_display.
- 5821 ; Se devuelve el nick recibido por RAW354/JOIN; el dedupe canonico usa minusculas.
- 5822 return $1
- 5823}
- 5824
- 5825; Build 92: dedupe ASN canonico por canal + nick en minusculas durante 90s, con GC/cap anti-lag.
- 5826; No depende del texto completo ni de mayusculas/minusculas, asi que TERESARELAGUARR/teresarelaguarr
- 5827; o FASTCACHE/rescate repetido no pueden duplicar el aviso en ventana corta.
- 5828alias _barna_channel_echo_asn {
- 5829 if ($1 == $null) return
- 5830 if ($2 == $null) return
- 5831 if ($3 == $null) return
- 5832 if ($4 == $null) return
- 5833
- 5834 var %chan = $1
- 5835 var %nick = $2
- 5836 var %ip = $3
- 5837 var %asn = $_barna_norm_asn($4)
- 5838 var %msg = $5-
- 5839
- 5840 if (%msg == $null) return
- 5841 if (%asn == $null) var %asn = $4
- 5842
- 5843 var %ck = $_barna_chan_key(%chan)
- 5844 var %nk = $lower(%nick)
- 5845 var %ipk = $replace(%ip,.,_)
- 5846 var %ak = $remove($upper(%asn),AS)
- 5847
- 5848 ; Build 104: dedupe exacto por canal+nick+IP+ASN.
- 5849 ; Evita doble aviso si WHOIP/cache/USERIP fallback resuelven el mismo nick casi a la vez,
- 5850 ; pero no bloquea futuros cambios reales de IP/ASN del mismo nick.
- 5851 var %dupe = $+(%,barna_echo_asn_seen.,%ck,.,%nk,.,%ipk,.,%ak)
- 5852 var %ttl = %barna_echo_dedupe_secs
- 5853
- 5854 if (%ttl !isnum 1-) var %ttl = 90
- 5855 if (%ttl > 90) var %ttl = 90
- 5856 if (%ttl < 45) var %ttl = 45
- 5857
- 5858 if ($eval(%dupe,2) == 1) {
- 5859 _barna_dbg ASN ECHO dedupe exacto: nick= %nick ip= %ip asn= %asn chan= %chan
- 5860 return
- 5861 }
- 5862
- 5863 ; Build 106: set dinamico real. Usar %dupe aqui creaba la variable literal %dupe
- 5864 ; y no la marca %barna_echo_asn_seen.*, por eso el dedupe 104 no frenaba duplicados.
- 5865 set $+(-u,%ttl) $+(%,barna_echo_asn_seen.,%ck,.,%nk,.,%ipk,.,%ak) 1
- 5866
- 5867 ; Build 93: ASN ya tiene dedupe canonico. No pasar por _barna_channel_echo
- 5868 ; para evitar crear ademas %barna_echo_seen.<md5>, que crecia con cada aviso.
- 5869 if (%barna_echo_queue != 1) {
- 5870 echo %chan $timestamp %msg
- 5871 return
- 5872 }
- 5873
- 5874 _barna_echo_q_add %chan %msg
- 5875}
- 5876
- 5877alias _barna_channel_echo {
- 5878 if ($1 == $null) return
- 5879
- 5880 var %chan = $1
- 5881 var %msg = $2-
- 5882
- 5883 if (%msg == $null) return
- 5884
- 5885 var %ck = $_barna_chan_key(%chan)
- 5886 var %mk = $md5(%msg,0)
- 5887 var %dupe = $+(%,barna_echo_seen.,%ck,.,%mk)
- 5888 var %ttl = %barna_echo_dedupe_secs
- 5889
- 5890 if (%ttl !isnum 1-) var %ttl = 90
- 5891 if (%ttl > 90) var %ttl = 90
- 5892 if (%ttl < 45) var %ttl = 45
- 5893 if ($eval(%dupe,2) == 1) return
- 5894
- 5895 ; Build 29: set directo del nombre dinamico real, no de la variable %dupe.
- 5896 set $+(-u,%ttl) %barna_echo_seen. $+ %ck $+ . $+ %mk 1
- 5897
- 5898 if (%barna_echo_queue != 1) {
- 5899 echo %chan $timestamp %msg
- 5900 return
- 5901 }
- 5902
- 5903 _barna_echo_q_add %chan %msg
- 5904}
- 5905
- 5906alias _barna_echo_q_add {
- 5907 if ($1 == $null) return
- 5908 if ($2 == $null) return
- 5909
- 5910 ; Build 104: dedupe exacto de cola por canal+mensaje.
- 5911 ; Es una segunda barrera por si dos rutas llegan antes de que el eco salga del buffer.
- 5912 var %qck = $_barna_chan_key($1)
- 5913 var %qmk = $md5($2-,0)
- 5914 var %qdupe = $+(%,barna_echo_q_seen.,%qck,.,%qmk)
- 5915 if ($eval(%qdupe,2) == 1) return
- 5916 ; Build 106: set dinamico real de la marca de cola, no variable literal %qdupe.
- 5917 set -u45 $+(%,barna_echo_q_seen.,%qck,.,%qmk) 1
- 5918
- 5919 if ($var(%barna_echo_q_seen.*,0) > 80) unset %barna_echo_q_seen.*
- 5920
- 5921 var %tail = %barna_echo_q_tail
- 5922 if (%tail == $null) var %tail = 0
- 5923 inc %tail
- 5924
- 5925 set %barna_echo_q_tail %tail
- 5926 if (%barna_echo_q_head == $null) set %barna_echo_q_head 1
- 5927
- 5928 ; Build 93: limite duro de cola de avisos para que una rafaga no congele mIRC.
- 5929 var %emax = %barna_echo_q_max
- 5930 if (%emax !isnum 10-) var %emax = 160
- 5931 if ($calc(%tail - %barna_echo_q_head) > %emax) {
- 5932 var %old = %barna_echo_q_head
- 5933 unset %barna_echo_q_chan. $+ %old
- 5934 unset %barna_echo_q_msg. $+ %old
- 5935 set %barna_echo_q_head $calc(%old + 1)
- 5936 }
- 5937
- 5938 set -u300 %barna_echo_q_chan. $+ %tail $1
- 5939 set -u300 %barna_echo_q_msg. $+ %tail $2-
- 5940
- 5941 _barna_echo_q_process
- 5942}
- 5943
- 5944alias _barna_echo_q_fire {
- 5945 unset %barna_echo_q_scheduled
- 5946 _barna_echo_q_process
- 5947}
- 5948
- 5949alias _barna_echo_q_process {
- 5950 if (%barna_echo_q_running == 1) return
- 5951
- 5952 if (%barna_echo_q_head == $null) set %barna_echo_q_head 1
- 5953 if (%barna_echo_q_tail == $null) return
- 5954
- 5955 var %head = %barna_echo_q_head
- 5956 var %tail = %barna_echo_q_tail
- 5957
- 5958 if (%head > %tail) {
- 5959 unset %barna_echo_q_head
- 5960 unset %barna_echo_q_tail
- 5961 unset %barna_echo_q_scheduled
- 5962 return
- 5963 }
- 5964
- 5965 set -u10 %barna_echo_q_running 1
- 5966
- 5967 var %max = %barna_echo_q_batch_max
- 5968 if (%max !isnum 1-) var %max = 6
- 5969 if (%max < 6) var %max = 6
- 5970 if (%max > 8) var %max = 8
- 5971
- 5972 var %n = 0
- 5973
- 5974 while ((%n < %max) && (%head <= %tail)) {
- 5975 var %chan = [ [ $+(%,barna_echo_q_chan.,%head) ] ]
- 5976 var %msg = [ [ $+(%,barna_echo_q_msg.,%head) ] ]
- 5977
- 5978 unset %barna_echo_q_chan. $+ %head
- 5979 unset %barna_echo_q_msg. $+ %head
- 5980
- 5981 if (%chan != $null) && (%msg != $null) {
- 5982 echo %chan $timestamp %msg
- 5983 }
- 5984
- 5985 inc %head
- 5986 inc %n
- 5987 }
- 5988
- 5989 set %barna_echo_q_head %head
- 5990 unset %barna_echo_q_running
- 5991
- 5992 if (%head > %tail) {
- 5993 unset %barna_echo_q_head
- 5994 unset %barna_echo_q_tail
- 5995 unset %barna_echo_q_scheduled
- 5996 return
- 5997 }
- 5998
- 5999 if (%barna_echo_q_scheduled == 1) return
- 6000
- 6001 var %delay = %barna_echo_q_delay
- 6002 if (%delay !isnum 1-) var %delay = 1
- 6003 if (%delay > 1) var %delay = 1
- 6004
- 6005 set -u30 %barna_echo_q_scheduled 1
- 6006 .timerBarnaEchoQ 1 %delay _barna_echo_q_fire
- 6007}
- 6008
- 6009alias _barna_cleanup_done {
- 6010 var %ln = $lower($1)
- 6011
- 6012 _barna_lookup_timer_off $1
- 6013
- 6014 unset %barna_sock. $+ %ln
- 6015 unset %barna_rx. $+ %ln
- 6016 unset %barna_asn_done. $+ %ln
- 6017 unset %temp_ip_ $+ $1
- 6018 unset %asn_val. $+ $1
- 6019 unset %as_name_val. $+ $1
- 6020 unset %barna_ipdone. $+ %ln
- 6021 unset %barna_userip_retry. $+ %ln
- 6022 noop $_barna_join_guard_remove(%ln)
- 6023}
- 6024
- 6025alias _barna_cleanup_leave {
- 6026 var %ln = $lower($1)
- 6027
- 6028 _barna_lookup_timer_off $1
- 6029
- 6030 unset %barna_qry. $+ %ln
- 6031 unset %barna_seen. $+ %ln
- 6032 unset %barna_userip_retry. $+ %ln
- 6033 unset %barna_lookup. $+ %ln
- 6034 unset %barna_lookup_chans. $+ %ln
- 6035 unset %barna_last_ip. $+ %ln
- 6036
- 6037 _barna_userip_q_release $1 LEAVE
- 6038 noop $_barna_join_guard_remove(%ln)
- 6039 _barna_join_audit_done $1 LEAVE
- 6040
- 6041 _barna_dbg LEAVE no cancela SAQUIT diferido ni consulta finalizada: nick= $1
- 6042}
- 6043
- 6044; ------------------------------------------------------------
- 6045; BLOQUE 6.9
- 6046; AVISO @Parseline2 SOLO AL VER QUIT TRAS SAQUIT
- 6047; ------------------------------------------------------------
- 6048
- 6049alias _barna_parseline_if_saquit_quit {
- 6050 if ($1 == $null) return
- 6051
- 6052 var %nick = $1
- 6053 var %ln = $lower(%nick)
- 6054 var %sent = [ [ $+(%,barna_saquit_sent.,%ln) ] ]
- 6055 var %pending = [ [ $+(%,barna_saquit_pending.,%ln) ] ]
- 6056
- 6057 ; Build 46:
- 6058 ; Antes solo se escribia en @Parseline2 si ya se habia enviado el SAQUIT.
- 6059 ; Si el nick salia antes de vencer el timer de 120s, quedaba cazado pero sin registro.
- 6060 ; Ahora tambien se registra si tenia SAQUIT pendiente.
- 6061 if ((%sent != 1) && (%pending != 1)) return
- 6062
- 6063 var %ip = [ [ $+(%,barna_saquit_ip.,%ln) ] ]
- 6064 if (%ip == $null) var %ip = $_barna_ip_get(%nick)
- 6065 var %chans = [ [ $+(%,barna_saquit_chans.,%ln) ] ]
- 6066 var %msg = [ [ $+(%,barna_saquit_msg.,%ln) ] ]
- 6067
- 6068 if (%ip == $null) return
- 6069 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 6070 if (%msg == $null) {
- 6071 var %showchans = $replace(%chans,$chr(44),$+(,$chr(32)))
- 6072 if (%sent == 1) var %msg = El usuario $chr(2) $+ %nick $+ $chr(15) (IP: $+ $chr(2) $+ %ip $+ $chr(15) $+ ) fue expulsado tras SAQUIT por ASN/prefijo bloqueado
- 6073 else var %msg = El usuario $chr(2) $+ %nick $+ $chr(15) (IP: $+ $chr(2) $+ %ip $+ $chr(15) $+ ) estaba pendiente de SAQUIT por ASN/prefijo bloqueado y salio antes del temporizador
- 6074 }
- 6075
- 6076 _barna_parseline_cazado %nick %ip %chans %msg
- 6077
- 6078 if (%sent == 1) _barna_saquit_cleanup_nick %nick QUIT_OK
- 6079 else _barna_saquit_cleanup_nick %nick QUIT_PENDING_OK
- 6080}
- 6081
- 6082alias _barna_saquit_cleanup_nick {
- 6083 if ($1 == $null) return
- 6084
- 6085 var %nick = $1
- 6086 var %ln = $lower(%nick)
- 6087 var %t = [ [ $+(%,barna_saquit_timer.,%ln) ] ]
- 6088
- 6089 if (%t != $null) .timer $+ %t off
- 6090
- 6091 set -u2 $+(%,barna_saquit_ip.,%ln) 0
- 6092 set -u2 $+(%,barna_saquit_chans.,%ln) 0
- 6093 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 6094 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 6095 set -u2 $+(%,barna_saquit_sent.,%ln) 0
- 6096 set -u2 $+(%,barna_saquit_msg.,%ln) 0
- 6097 set -u2 $+(%,barna_saquit_showchans.,%ln) 0
- 6098 set -u2 $+(%,barna_saquit_q_slot.,%ln) 0
- 6099}
- 6100
- 6101alias _barna_saquit_gc_idle {
- 6102 if ($_barna_saquit_q_count > 0) return 0
- 6103
- 6104 ; VARHYGIENE48:
- 6105 ; No purgar %barna_saquit_pending/msg/ip/chans si hay timers BarnaSAQUIT_*
- 6106 ; pendientes. En builds anteriores el GC podia borrar el estado antes del QUIT,
- 6107 ; y entonces @Parseline2 no registraba los nicks que salian antes de 120s.
- 6108 var %hascheck = 0
- 6109 var %i = $timer(0)
- 6110
- 6111 while (%i > 0) {
- 6112 var %t = $lower($timer(%i))
- 6113
- 6114 if (barnacheck_* iswm %t) var %hascheck = 1
- 6115 if (barnafinal_* iswm %t) var %hascheck = 1
- 6116 if (barnasaquit_* iswm %t) var %hascheck = 1
- 6117
- 6118 dec %i
- 6119 }
- 6120
- 6121 if (%hascheck == 1) return 0
- 6122
- 6123 var %before = $var(%barna_saquit*,0)
- 6124
- 6125 if (%before <= 1) return 0
- 6126
- 6127 unset %barna_saquit_showchans.*
- 6128 unset %barna_saquit_msg.*
- 6129 unset %barna_saquit_ip.*
- 6130 unset %barna_saquit_chans.*
- 6131 unset %barna_saquit_pending.*
- 6132 unset %barna_saquit_timer.*
- 6133 unset %barna_saquit_sent.*
- 6134 unset %barna_saquit_q_item.*
- 6135 unset %barna_saquit_q_due.*
- 6136 unset %barna_saquit_q_slot.*
- 6137 unset %barna_saquit_q_head
- 6138 unset %barna_saquit_q_tail
- 6139 unset %barna_saquit_q_count_real
- 6140
- 6141 _barna_dbg SAQUITGC idle: antes= %before despues= $var(%barna_saquit*,0)
- 6142
- 6143 return 1
- 6144}
- 6145
- 6146; ------------------------------------------------------------
- 6147; BLOQUE 7
- 6148; EVENTOS DE SALIDA
- 6149; ------------------------------------------------------------
- 6150
- 6151on *:QUIT:{
- 6152 if (%barna_addon != 1) return
- 6153
- 6154 ; VARHYGIENE48:
- 6155 ; Parseline2 debe comprobarse ANTES de depender de %barna_seen.*.
- 6156 ; LOOKCLEAN/LAGCLEAN pueden limpiar seen/lookup antes del QUIT real, pero si hay
- 6157 ; %barna_saquit_pending.* o %barna_saquit_sent.* el nick debe quedar registrado.
- 6158 _barna_parseline_if_saquit_quit $nick
- 6159
- 6160 if ($_barna_seen_get($nick) == $null) return
- 6161
- 6162 _barna_cleanup_leave $nick
- 6163}
- 6164
- 6165on *:PART:#:{
- 6166 if (%barna_addon != 1) return
- 6167 if (!$_barna_is_chan_enabled($chan)) return
- 6168
- 6169 _barna_seen_del $nick $chan
- 6170
- 6171 if ($_barna_seen_get($nick) == $null) {
- 6172 _barna_cleanup_leave $nick
- 6173 }
- 6174}
- 6175
- 6176on *:KICK:#:{
- 6177 if (%barna_addon != 1) return
- 6178 if (!$_barna_is_chan_enabled($chan)) return
- 6179
- 6180 _barna_seen_del $knick $chan
- 6181
- 6182 if ($_barna_seen_get($knick) == $null) {
- 6183 _barna_cleanup_leave $knick
- 6184 }
- 6185}
- 6186
- 6187on *:OP:#:{
- 6188 if (%barna_addon != 1) return
- 6189 if (!$_barna_is_chan_enabled($chan)) return
- 6190
- 6191 _barna_privileged_cleanup_nick $opnick OP
- 6192 _barna_dbg PRIVSAFE OP/@ protegido: nick= $opnick canal= $chan
- 6193}
- 6194
- 6195on *:VOICE:#:{
- 6196 if (%barna_addon != 1) return
- 6197 if (!$_barna_is_chan_enabled($chan)) return
- 6198
- 6199 _barna_privileged_cleanup_nick $vnick VOICE
- 6200 _barna_dbg PRIVSAFE VOICE/+v protegido: nick= $vnick canal= $chan
- 6201}
- 6202
- 6203on *:NICK:{
- 6204 if (%barna_addon != 1) return
- 6205
- 6206 var %old = $nick
- 6207 var %new = $newnick
- 6208 var %oldln = $lower(%old)
- 6209 var %newln = $lower(%new)
- 6210
- 6211 ; Build 95: no se migra %barna_seen.* porque ya no se guarda estado seen por JOIN.
- 6212 unset %barna_seen. $+ %oldln
- 6213 unset %barna_seen_display. $+ %oldln
- 6214
- 6215 var %lookup = [ [ $+(%,barna_lookup.,%oldln) ] ]
- 6216 if (%lookup == 1) {
- 6217 var %ttl = $_barna_userip_ttl
- 6218 var %lookup_chans = [ [ $+(%,barna_lookup_chans.,%oldln) ] ]
- 6219 var %retry = [ [ $+(%,barna_userip_retry.,%oldln) ] ]
- 6220 var %slowretry = [ [ $+(%,barna_userip_slow_retry.,%oldln) ] ]
- 6221
- 6222 set $+(-u,%ttl) %barna_lookup. $+ %newln 1
- 6223 set $+(-u,%ttl) %barna_qry. $+ %newln 1
- 6224 set $+(-u,%ttl) %barna_userip_q_nick. $+ %newln %new
- 6225
- 6226 if (%lookup_chans != $null) set $+(-u,%ttl) %barna_lookup_chans. $+ %newln %lookup_chans
- 6227 if (%retry != $null) set $+(-u,%ttl) %barna_userip_retry. $+ %newln %retry
- 6228 if (%slowretry != $null) set -u3600 %barna_userip_slow_retry. $+ %newln %slowretry
- 6229
- 6230 if ([ [ $+(%,barna_userip_q_pending.,%oldln) ] ] == 1) {
- 6231 var %slot = [ [ $+(%,barna_userip_q_slot.,%oldln) ] ]
- 6232
- 6233 unset %barna_userip_q_pending. $+ %oldln
- 6234 unset %barna_userip_q_slot. $+ %oldln
- 6235
- 6236 set $+(-u,%ttl) %barna_userip_q_pending. $+ %newln 1
- 6237
- 6238 if (%slot != $null) {
- 6239 set $+(-u,%ttl) %barna_userip_q_slot. $+ %newln %slot
- 6240 set $+(-u,%ttl) %barna_userip_q_item. $+ %slot %newln
- 6241 }
- 6242 else {
- 6243 unset %barna_userip_q_pending. $+ %newln
- 6244 _barna_userip_q_add %new
- 6245 }
- 6246 }
- 6247
- 6248 if ([ [ $+(%,barna_userip_inflight.,%oldln) ] ] == 1) {
- 6249 _barna_lookup_timer_off %old
- 6250 unset %barna_userip_inflight. $+ %oldln
- 6251 unset %barna_userip_sent_ts. $+ %oldln
- 6252 unset %barna_userip_watchtry. $+ %oldln
- 6253 _barna_userip_inflight_dec
- 6254 _barna_userip_q_add %new
- 6255 }
- 6256
- 6257 unset %barna_lookup. $+ %oldln
- 6258 unset %barna_lookup_chans. $+ %oldln
- 6259 unset %barna_qry. $+ %oldln
- 6260 unset %barna_userip_retry. $+ %oldln
- 6261 unset %barna_userip_slow_retry. $+ %oldln
- 6262 unset %barna_userip_q_nick. $+ %oldln
- 6263
- 6264 _barna_dbg WHOIP COLA migrada por cambio de nick: old= %old new= %new
- 6265 }
- 6266
- 6267 var %ip = [ [ $+(%,barna_saquit_ip.,%oldln) ] ]
- 6268 var %chans = [ [ $+(%,barna_saquit_chans.,%oldln) ] ]
- 6269 var %msg = [ [ $+(%,barna_saquit_msg.,%oldln) ] ]
- 6270 var %showchans = [ [ $+(%,barna_saquit_showchans.,%oldln) ] ]
- 6271 var %pending = [ [ $+(%,barna_saquit_pending.,%oldln) ] ]
- 6272 var %oldt = [ [ $+(%,barna_saquit_timer.,%oldln) ] ]
- 6273
- 6274 if (%pending == 1) {
- 6275 if (%oldt != $null) .timer $+ %oldt off
- 6276
- 6277 unset %barna_saquit_ip. $+ %oldln
- 6278 unset %barna_saquit_chans. $+ %oldln
- 6279 unset %barna_saquit_msg. $+ %oldln
- 6280 unset %barna_saquit_showchans. $+ %oldln
- 6281 unset %barna_saquit_pending. $+ %oldln
- 6282 unset %barna_saquit_timer. $+ %oldln
- 6283
- 6284 if (%chans == $null) var %chans = %seen
- 6285
- 6286 _barna_dbg SAQUIT migrado por cambio de nick: old= %old new= %new ip= %ip chans= %chans
- 6287
- 6288 if (%ip != $null) && (%chans != $null) {
- 6289 if (%msg != $null) set -u900 %barna_saquit_msg. $+ %newln %msg
- 6290 if (%showchans != $null) set -u900 %barna_saquit_showchans. $+ %newln %showchans
- 6291
- 6292 _barna_shun_nick %new Molestias en Canales (A)
- 6293 _barna_schedule_delayed_saquit %new %ip %chans
- 6294 }
- 6295 }
- 6296
- 6297 noop $_barna_joinfix_recheck_if_needed(%new,NICK_CHANGE_FROM_ $+ %old)
- 6298}
- 6299
- 6300
- 6301; ------------------------------------------------------------
- 6302; BLOQUE 7.5
- 6303; AUDITOR DE JOIN PARA EVITAR NICKS SALTADOS
- 6304; ------------------------------------------------------------
- 6305
- 6306alias _barna_join_audit_q_count {
- 6307 var %n = %barna_join_audit_q_count_real
- 6308
- 6309 if (%n !isnum 1-) return 0
- 6310
- 6311 return %n
- 6312}
- 6313
- 6314alias _barna_join_audit_q_count_inc {
- 6315 var %n = %barna_join_audit_q_count_real
- 6316
- 6317 if (%n == $null) var %n = 0
- 6318 inc %n
- 6319 set -u900 %barna_join_audit_q_count_real %n
- 6320}
- 6321
- 6322alias _barna_join_audit_q_count_dec {
- 6323 var %n = %barna_join_audit_q_count_real
- 6324
- 6325 if (%n == $null) var %n = 0
- 6326 dec %n
- 6327
- 6328 if (%n < 0) var %n = 0
- 6329
- 6330 if (%n == 0) unset %barna_join_audit_q_count_real
- 6331 else set -u900 %barna_join_audit_q_count_real %n
- 6332}
- 6333
- 6334alias _barna_join_audit_schedule {
- 6335 if (%barna_join_audit != 1) return
- 6336
- 6337 var %delay = %barna_join_audit_delay
- 6338 if (%delay !isnum 5-) var %delay = 18
- 6339
- 6340 if (%barna_join_audit_q_scheduled == 1) return
- 6341
- 6342 set -u120 %barna_join_audit_q_scheduled 1
- 6343 .timerBarnaJoinAudit 1 %delay _barna_join_audit_process
- 6344}
- 6345
- 6346alias _barna_join_audit_enqueue {
- 6347 if ($1 == $null) return
- 6348
- 6349 var %ln = $1
- 6350 var %tail = %barna_join_audit_q_tail
- 6351
- 6352 if (%tail == $null) var %tail = 0
- 6353 inc %tail
- 6354
- 6355 set %barna_join_audit_q_tail %tail
- 6356 if (%barna_join_audit_q_head == $null) set %barna_join_audit_q_head 1
- 6357
- 6358 set -u900 %barna_join_audit_q_item. $+ %tail %ln
- 6359 set -u900 %barna_join_audit_q_slot. $+ %ln %tail
- 6360 _barna_join_audit_q_count_inc
- 6361}
- 6362
- 6363alias _barna_join_audit_mark {
- 6364 if (%barna_join_audit != 1) return
- 6365 if ($1 == $null) return
- 6366
- 6367 var %nick = $1
- 6368 var %ln = $lower(%nick)
- 6369 var %chans = $_barna_seen_get(%nick)
- 6370
- 6371 if (%chans == $null) return
- 6372
- 6373 set -u900 %barna_join_audit_nick. $+ %ln %nick
- 6374 set -u900 %barna_join_audit_chans. $+ %ln %chans
- 6375 set -u900 %barna_join_audit_ts. $+ %ln $ctime
- 6376
- 6377 if ([ [ $+(%,barna_join_audit_q_slot.,%ln) ] ] == $null) {
- 6378 _barna_join_audit_enqueue %ln
- 6379 }
- 6380
- 6381 _barna_join_audit_schedule
- 6382}
- 6383
- 6384alias _barna_join_audit_done {
- 6385 if ($1 == $null) return
- 6386
- 6387 var %nick = $1
- 6388 var %ln = $lower(%nick)
- 6389 var %slot = [ [ $+(%,barna_join_audit_q_slot.,%ln) ] ]
- 6390
- 6391 if (%slot != $null) {
- 6392 if ([ [ $+(%,barna_join_audit_q_item.,%slot) ] ] != $null) _barna_join_audit_q_count_dec
- 6393 unset %barna_join_audit_q_item. $+ %slot
- 6394 unset %barna_join_audit_q_slot. $+ %ln
- 6395 }
- 6396
- 6397 unset %barna_join_audit_nick. $+ %ln
- 6398 unset %barna_join_audit_chans. $+ %ln
- 6399 unset %barna_join_audit_ts. $+ %ln
- 6400 unset %barna_join_audit_try. $+ %ln
- 6401
- 6402 _barna_dbg JOIN AUDIT done: nick= %nick reason= $2-
- 6403}
- 6404
- 6405alias _barna_join_audit_requeue {
- 6406 if ($1 == $null) return
- 6407
- 6408 var %ln = $1
- 6409
- 6410 if ([ [ $+(%,barna_join_audit_q_slot.,%ln) ] ] != $null) return
- 6411
- 6412 _barna_join_audit_enqueue %ln
- 6413}
- 6414
- 6415alias _barna_join_audit_process {
- 6416 if (%barna_join_audit != 1) return
- 6417
- 6418 unset %barna_join_audit_q_scheduled
- 6419
- 6420 if ($_barna_join_audit_q_count == 0) {
- 6421 unset %barna_join_audit_q_head
- 6422 unset %barna_join_audit_q_tail
- 6423 return
- 6424 }
- 6425
- 6426 var %batch = %barna_join_audit_batch
- 6427 if (%batch !isnum 5-) var %batch = 60
- 6428
- 6429 var %done = 0
- 6430 var %guard = 0
- 6431
- 6432 while ((%done < %batch) && (%guard < 300) && ($_barna_join_audit_q_count > 0)) {
- 6433 inc %guard
- 6434 inc %done
- 6435
- 6436 var %head = %barna_join_audit_q_head
- 6437 var %tail = %barna_join_audit_q_tail
- 6438
- 6439 if (%head == $null) break
- 6440 if (%tail == $null) break
- 6441
- 6442 if (%head > %tail) {
- 6443 unset %barna_join_audit_q_head
- 6444 unset %barna_join_audit_q_tail
- 6445 break
- 6446 }
- 6447
- 6448 var %ln = [ [ $+(%,barna_join_audit_q_item.,%head) ] ]
- 6449
- 6450 if (%ln != $null) _barna_join_audit_q_count_dec
- 6451 unset %barna_join_audit_q_item. $+ %head
- 6452 set %barna_join_audit_q_head $calc(%head + 1)
- 6453
- 6454 if (%ln == $null) continue
- 6455
- 6456 unset %barna_join_audit_q_slot. $+ %ln
- 6457
- 6458 var %nick = [ [ $+(%,barna_join_audit_nick.,%ln) ] ]
- 6459 if (%nick == $null) var %nick = %ln
- 6460
- 6461 var %chans = $_barna_seen_get(%nick)
- 6462 if (%chans == $null) var %chans = [ [ $+(%,barna_join_audit_chans.,%ln) ] ]
- 6463
- 6464 if (%chans == $null) {
- 6465 _barna_join_audit_done %nick SIN_CANALES
- 6466 continue
- 6467 }
- 6468
- 6469 if ([ [ $+(%,barna_q_active.,%ln) ] ] != $null) {
- 6470 _barna_join_audit_requeue %ln
- 6471 continue
- 6472 }
- 6473
- 6474 if ([ [ $+(%,barna_q_pending.,%ln) ] ] != $null) {
- 6475 _barna_join_audit_requeue %ln
- 6476 continue
- 6477 }
- 6478
- 6479 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) {
- 6480 _barna_join_audit_requeue %ln
- 6481 continue
- 6482 }
- 6483
- 6484 if ([ [ $+(%,barna_userip_q_pending.,%ln) ] ] == 1) {
- 6485 _barna_join_audit_requeue %ln
- 6486 continue
- 6487 }
- 6488
- 6489 var %try = [ [ $+(%,barna_join_audit_try.,%ln) ] ]
- 6490 if (%try == $null) var %try = 0
- 6491 inc %try
- 6492
- 6493 var %max = %barna_join_audit_max_retries
- 6494 if (%max !isnum 0-) var %max = 2
- 6495
- 6496 if (%try > %max) {
- 6497 _barna_dbg JOIN AUDIT agotado sin RAW340: nick= %nick chans= %chans try= %try
- 6498 _barna_join_audit_done %nick AGOTADO
- 6499 continue
- 6500 }
- 6501
- 6502 set -u60 %barna_join_audit_try. $+ %ln %try
- 6503 set -u60 %barna_lookup. $+ %ln 1
- 6504 set -u60 %barna_lookup_chans. $+ %ln %chans
- 6505 set -u60 %barna_qry. $+ %ln 1
- 6506
- 6507 unset %barna_ipdone. $+ %ln
- 6508 unset %barna_userip_sent_ts. $+ %ln
- 6509 unset %barna_userip_watchtry. $+ %ln
- 6510
- 6511 _barna_dbg JOIN AUDIT reencola USERIP: nick= %nick chans= %chans try= %try
- 6512
- 6513 _barna_userip_q_add %nick
- 6514 _barna_join_audit_requeue %ln
- 6515 }
- 6516
- 6517 if ($_barna_join_audit_q_count > 0) _barna_join_audit_schedule
- 6518}
- 6519
- 6520; ------------------------------------------------------------
- 6521; BLOQUE 7.6
- 6522; CAPTURA IP USERIP/WHOIP
- 6523; ------------------------------------------------------------
- 6524
- 6525
- 6526
- 6527; ------------------------------------------------------------
- 6528; BLOQUE 8.7.5
- 6529; COMPACTACION DE VARIABLES Huerfanas
- 6530; ------------------------------------------------------------
- 6531
- 6532alias _barna_q_compact_vars {
- 6533 _barna_runtime_defaults
- 6534
- 6535 ; VARHYGIENE5: antes de compactar, elimina running fantasma.
- 6536 ; Si hay socket real, no se toca nada. Si running>0 pero sockets=0,
- 6537 ; _barna_q_clear_ghost_running decide si ya ha pasado la gracia.
- 6538 if ($_barna_ipinfo_sock_count > 0) return 0
- 6539 _barna_q_clear_ghost_light
- 6540 noop $_barna_sockto_orphan_gc
- 6541
- 6542 var %running = %barna_q_running
- 6543 if (%running == $null) var %running = 0
- 6544 if (%running > 0) return 0
- 6545 if ($_barna_ipinfo_sock_count > 0) return 0
- 6546
- 6547 var %qv_before = $var(%barna_q_*,0)
- 6548 var %items = %barna_q_items
- 6549 var %lowitems = %barna_q_low_items
- 6550 var %newitems = $null
- 6551 var %newlow = $null
- 6552 var %i = 1
- 6553
- 6554 if ($hget(barna_q_keep)) hfree barna_q_keep
- 6555 hmake barna_q_keep 500
- 6556
- 6557 while (%i <= $numtok(%items,44)) {
- 6558 var %id = $gettok(%items,%i,44)
- 6559 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 6560 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 6561 var %chans = [ [ $+(%,barna_q_chans.,%id) ] ]
- 6562 var %try = [ [ $+(%,barna_q_try.,%id) ] ]
- 6563 var %ts = [ [ $+(%,barna_q_ts.,%id) ] ]
- 6564
- 6565 if ((%id != $null) && (%nick != $null) && (%ip != $null)) {
- 6566 if (%newitems == $null) var %newitems = %id
- 6567 else if (!$istok(%newitems,%id,44)) var %newitems = $addtok(%newitems,%id,44)
- 6568 hadd -m barna_q_keep $+(nick.,%id) %nick
- 6569 hadd -m barna_q_keep $+(ip.,%id) %ip
- 6570 if (%chans != $null) hadd -m barna_q_keep $+(chans.,%id) %chans
- 6571 if (%try == $null) var %try = 0
- 6572 hadd -m barna_q_keep $+(try.,%id) %try
- 6573 if (%ts == $null) var %ts = $ctime
- 6574 hadd -m barna_q_keep $+(ts.,%id) %ts
- 6575 }
- 6576
- 6577 inc %i
- 6578 }
- 6579
- 6580 var %j = 1
- 6581 while (%j <= $numtok(%lowitems,44)) {
- 6582 var %id2 = $gettok(%lowitems,%j,44)
- 6583 var %nick2 = [ [ $+(%,barna_q_nick.,%id2) ] ]
- 6584 var %ip2 = [ [ $+(%,barna_q_ip.,%id2) ] ]
- 6585 var %chans2 = [ [ $+(%,barna_q_chans.,%id2) ] ]
- 6586 var %try2 = [ [ $+(%,barna_q_try.,%id2) ] ]
- 6587 var %ts2 = [ [ $+(%,barna_q_ts.,%id2) ] ]
- 6588
- 6589 if ((%id2 != $null) && (%nick2 != $null) && (%ip2 != $null)) {
- 6590 if (%newlow == $null) var %newlow = %id2
- 6591 else if (!$istok(%newlow,%id2,44)) var %newlow = $addtok(%newlow,%id2,44)
- 6592 hadd -m barna_q_keep $+(nick.,%id2) %nick2
- 6593 hadd -m barna_q_keep $+(ip.,%id2) %ip2
- 6594 if (%chans2 != $null) hadd -m barna_q_keep $+(chans.,%id2) %chans2
- 6595 if (%try2 == $null) var %try2 = 0
- 6596 hadd -m barna_q_keep $+(try.,%id2) %try2
- 6597 if (%ts2 == $null) var %ts2 = $ctime
- 6598 hadd -m barna_q_keep $+(ts.,%id2) %ts2
- 6599 hadd -m barna_q_keep $+(low.,%id2) 1
- 6600 }
- 6601
- 6602 inc %j
- 6603 }
- 6604
- 6605 unset %barna_q_*
- 6606 _barna_runtime_defaults
- 6607
- 6608 if (%newitems != $null) set %barna_q_items %newitems
- 6609 if (%newlow != $null) set %barna_q_low_items %newlow
- 6610
- 6611 var %k = 1
- 6612 var %all = %newitems
- 6613 var %l = 1
- 6614 while (%l <= $numtok(%newlow,44)) {
- 6615 var %lid = $gettok(%newlow,%l,44)
- 6616 if ((%lid != $null) && (!$istok(%all,%lid,44))) var %all = $addtok(%all,%lid,44)
- 6617 inc %l
- 6618 }
- 6619
- 6620 while (%k <= $numtok(%all,44)) {
- 6621 var %rid = $gettok(%all,%k,44)
- 6622 var %rnick = $hget(barna_q_keep,$+(nick.,%rid))
- 6623 var %rip = $hget(barna_q_keep,$+(ip.,%rid))
- 6624 var %rchans = $hget(barna_q_keep,$+(chans.,%rid))
- 6625 var %rtry = $hget(barna_q_keep,$+(try.,%rid))
- 6626 var %rts = $hget(barna_q_keep,$+(ts.,%rid))
- 6627
- 6628 if ((%rid != $null) && (%rnick != $null) && (%rip != $null)) {
- 6629 set -u600 %barna_q_nick. $+ %rid %rnick
- 6630 set -u120 %barna_q_ip. $+ %rid %rip
- 6631 if (%rchans != $null) set -u120 %barna_q_chans. $+ %rid %rchans
- 6632 if (%rtry == $null) var %rtry = 0
- 6633 set -u120 %barna_q_try. $+ %rid %rtry
- 6634 if (%rts == $null) var %rts = $ctime
- 6635 set -u120 %barna_q_ts. $+ %rid %rts
- 6636 set -u120 %barna_q_pending. $+ $lower(%rnick) %rid
- 6637 if ($hget(barna_q_keep,$+(low.,%rid)) == 1) set -u600 %barna_q_low. $+ %rid 1
- 6638 }
- 6639
- 6640 inc %k
- 6641 }
- 6642
- 6643 if ($hget(barna_q_keep)) hfree barna_q_keep
- 6644
- 6645 var %qv_after = $var(%barna_q_*,0)
- 6646 if (%qv_before > %qv_after) {
- 6647 _barna_dbg HIGIENE cola ASN compactada: antes= %qv_before despues= %qv_after normal= $numtok(%barna_q_items,44) baja= $numtok(%barna_q_low_items,44)
- 6648 _barna_asn_pump_start_if_needed
- 6649 return 1
- 6650 }
- 6651
- 6652 return 0
- 6653}
- 6654
- 6655
- 6656alias _barna_q_idle_gc {
- 6657 ; VARHYGIENE12:
- 6658 ; Si la cola ASN real esta vacia, no tiene sentido conservar cientos de
- 6659 ; variables %barna_q_* de IDs ya terminados. Esto evita lag acumulativo
- 6660 ; al abrir/cerrar editor y al evaluar $var(%barna_q_*,0).
- 6661 _barna_runtime_defaults
- 6662
- 6663 var %live = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 6664 var %running = %barna_q_running
- 6665 if (%running == $null) var %running = 0
- 6666
- 6667 if ((%live == 0) && (%running == 0) && ($_barna_ipinfo_sock_count == 0)) {
- 6668 var %before = $var(%barna_q_*,0)
- 6669
- 6670 if (%before > 40) {
- 6671 noop $_barna_q_temp_clear
- 6672 _barna_dbg HIGIENE cola ASN idle limpiada completa: antes= %before despues= $var(%barna_q_*,0)
- 6673 return 1
- 6674 }
- 6675 }
- 6676
- 6677 return 0
- 6678}
- 6679
- 6680alias _barna_userip_vartrim_idle {
- 6681 _barna_runtime_defaults
- 6682
- 6683 var %qcnt = $_barna_userip_q_count
- 6684 var %before = $var(%barna_userip_*,0)
- 6685 if (%before <= 0) return 0
- 6686
- 6687 ; VARHYGIENE5: si hay muy pocos USERIP pendientes pero cientos de variables,
- 6688 ; es mejor descartar esos pocos pendientes que dejar mIRC ahogado.
- 6689 var %umax = %barna_userip_var_max_idle
- 6690 if (%umax !isnum 50-) var %umax = 80
- 6691
- 6692 if ((%qcnt == 0) && ($timer(BarnaUserIPBatch) == $null) && (%before > 40)) goto barna_userip_trim_ok
- 6693 if ((%qcnt > 0) && (%before <= %umax)) return 0
- 6694 if (%qcnt > 20) return 0
- 6695
- 6696 :barna_userip_trim_ok
- 6697
- 6698 var %delay = %barna_userip_q_delay
- 6699 var %batch = %barna_userip_q_batch_max
- 6700 var %batchdelay = %barna_userip_q_batch_delay
- 6701 var %turbo_th = %barna_userip_turbo_threshold
- 6702 var %turbo_batch = %barna_userip_turbo_batch_max
- 6703 var %turbo_delay = %barna_userip_turbo_delay
- 6704 var %emerg_th = %barna_userip_emergency_threshold
- 6705 var %emerg_batch = %barna_userip_emergency_batch_max
- 6706 var %emerg_delay = %barna_userip_emergency_delay
- 6707 var %maxp = %barna_userip_q_max_pending
- 6708 var %shedto = %barna_userip_q_shed_to
- 6709 var %drop = %barna_userip_drop_count
- 6710 var %ttl = %barna_userip_state_ttl
- 6711 var %maxin = %barna_userip_max_inflight
- 6712
- 6713 unset %barna_userip_*
- 6714 _barna_runtime_defaults
- 6715
- 6716 if (%delay != $null) set %barna_userip_q_delay %delay
- 6717 if (%batch != $null) set %barna_userip_q_batch_max %batch
- 6718 if (%batchdelay != $null) set %barna_userip_q_batch_delay %batchdelay
- 6719 if (%turbo_th != $null) set %barna_userip_turbo_threshold %turbo_th
- 6720 if (%turbo_batch != $null) set %barna_userip_turbo_batch_max %turbo_batch
- 6721 if (%turbo_delay != $null) set %barna_userip_turbo_delay %turbo_delay
- 6722 if (%emerg_th != $null) set %barna_userip_emergency_threshold %emerg_th
- 6723 if (%emerg_batch != $null) set %barna_userip_emergency_batch_max %emerg_batch
- 6724 if (%emerg_delay != $null) set %barna_userip_emergency_delay %emerg_delay
- 6725 if (%maxp != $null) set %barna_userip_q_max_pending %maxp
- 6726 if (%shedto != $null) set %barna_userip_q_shed_to %shedto
- 6727 if (%drop != $null) set %barna_userip_drop_count %drop
- 6728 if (%ttl != $null) set %barna_userip_state_ttl %ttl
- 6729 if (%maxin != $null) set %barna_userip_max_inflight %maxin
- 6730
- 6731 _barna_dbg HIGIENE USERIP trim idle: antes= %before despues= $var(%barna_userip_*,0)
- 6732 return 1
- 6733}
- 6734
- 6735
- 6736alias _barna_saquit_compact_vars {
- 6737 _barna_runtime_defaults
- 6738
- 6739 var %before = $var(%barna_saquit*,0)
- 6740 if (%before <= 0) return 0
- 6741
- 6742 if ($hget(barna_saquit_keep)) hfree barna_saquit_keep
- 6743 hmake barna_saquit_keep 500
- 6744
- 6745 var %head = %barna_saquit_q_head
- 6746 var %tail = %barna_saquit_q_tail
- 6747 var %i
- 6748 var %newtail = 0
- 6749
- 6750 if (%head !isnum 1-) var %head = 1
- 6751 if (%tail !isnum 1-) var %tail = 0
- 6752
- 6753 var %i = %head
- 6754 while (%i <= %tail) {
- 6755 var %nick = [ [ $+(%,barna_saquit_q_item.,%i) ] ]
- 6756 var %due = [ [ $+(%,barna_saquit_q_due.,%i) ] ]
- 6757
- 6758 if ((%nick != $null) && (%due != $null)) {
- 6759 inc %newtail
- 6760 var %ln = $lower(%nick)
- 6761 hadd -m barna_saquit_keep $+(item.,%newtail) %nick
- 6762 hadd -m barna_saquit_keep $+(due.,%newtail) %due
- 6763 hadd -m barna_saquit_keep $+(slot.,%ln) %newtail
- 6764 hadd -m barna_saquit_keep $+(pending.,%ln) 1
- 6765
- 6766 var %ip = [ [ $+(%,barna_saquit_ip.,%ln) ] ]
- 6767 var %chans = [ [ $+(%,barna_saquit_chans.,%ln) ] ]
- 6768 var %msg = [ [ $+(%,barna_saquit_msg.,%ln) ] ]
- 6769 var %show = [ [ $+(%,barna_saquit_showchans.,%ln) ] ]
- 6770
- 6771 if (%ip != $null) hadd -m barna_saquit_keep $+(ip.,%ln) %ip
- 6772 if (%chans != $null) hadd -m barna_saquit_keep $+(chans.,%ln) %chans
- 6773 if (%msg != $null) hadd -m barna_saquit_keep $+(msg.,%ln) %msg
- 6774 if (%show != $null) hadd -m barna_saquit_keep $+(show.,%ln) %show
- 6775 }
- 6776
- 6777 inc %i
- 6778 }
- 6779
- 6780 var %sv = $var(%barna_saquit_sent.*,0)
- 6781 while (%sv > 0) {
- 6782 var %vname = $var(%barna_saquit_sent.*,%sv)
- 6783 var %ln2 = $gettok(%vname,2-,46)
- 6784
- 6785 if (%ln2 != $null) {
- 6786 var %sentv = [ [ %vname ] ]
- 6787 if (%sentv != $null) {
- 6788 hadd -m barna_saquit_keep $+(sent.,%ln2) %sentv
- 6789
- 6790 var %ip2 = [ [ $+(%,barna_saquit_ip.,%ln2) ] ]
- 6791 var %chans2 = [ [ $+(%,barna_saquit_chans.,%ln2) ] ]
- 6792 var %msg2 = [ [ $+(%,barna_saquit_msg.,%ln2) ] ]
- 6793 var %show2 = [ [ $+(%,barna_saquit_showchans.,%ln2) ] ]
- 6794
- 6795 if (%ip2 != $null) hadd -m barna_saquit_keep $+(ip.,%ln2) %ip2
- 6796 if (%chans2 != $null) hadd -m barna_saquit_keep $+(chans.,%ln2) %chans2
- 6797 if (%msg2 != $null) hadd -m barna_saquit_keep $+(msg.,%ln2) %msg2
- 6798 if (%show2 != $null) hadd -m barna_saquit_keep $+(show.,%ln2) %show2
- 6799 }
- 6800 }
- 6801
- 6802 dec %sv
- 6803 }
- 6804
- 6805 unset %barna_saquit_ip.*
- 6806 unset %barna_saquit_chans.*
- 6807 unset %barna_saquit_pending.*
- 6808 unset %barna_saquit_timer.*
- 6809 unset %barna_saquit_msg.*
- 6810 unset %barna_saquit_showchans.*
- 6811 unset %barna_saquit_sent.*
- 6812 unset %barna_saquit_q_*
- 6813 unset %barna_saquitq_*
- 6814
- 6815 if (%newtail > 0) {
- 6816 set %barna_saquit_q_head 1
- 6817 set %barna_saquit_q_tail %newtail
- 6818 set %barna_saquit_q_count_real %newtail
- 6819
- 6820 var %r = 1
- 6821 while (%r <= %newtail) {
- 6822 var %rnick = $hget(barna_saquit_keep,$+(item.,%r))
- 6823 var %rdue = $hget(barna_saquit_keep,$+(due.,%r))
- 6824 var %rln = $lower(%rnick)
- 6825
- 6826 if ((%rnick != $null) && (%rdue != $null)) {
- 6827 set -u600 %barna_saquit_q_item. $+ %r %rnick
- 6828 set -u600 %barna_saquit_q_due. $+ %r %rdue
- 6829 set -u600 %barna_saquit_q_slot. $+ %rln %r
- 6830 set -u600 %barna_saquit_pending. $+ %rln 1
- 6831 }
- 6832
- 6833 inc %r
- 6834 }
- 6835 }
- 6836
- 6837 var %all = $hget(barna_saquit_keep,0).item
- 6838 var %di = 1
- 6839 while (%di <= %all) {
- 6840 var %key = $hget(barna_saquit_keep,%di).item
- 6841
- 6842 if ($left(%key,3) == ip.) {
- 6843 var %ln3 = $right(%key,-3)
- 6844 set -u600 %barna_saquit_ip. $+ %ln3 $hget(barna_saquit_keep,%key)
- 6845 }
- 6846 elseif ($left(%key,6) == chans.) {
- 6847 var %ln4 = $right(%key,-6)
- 6848 set -u600 %barna_saquit_chans. $+ %ln4 $hget(barna_saquit_keep,%key)
- 6849 }
- 6850 elseif ($left(%key,4) == msg.) {
- 6851 var %ln5 = $right(%key,-4)
- 6852 set -u600 %barna_saquit_msg. $+ %ln5 $hget(barna_saquit_keep,%key)
- 6853 }
- 6854 elseif ($left(%key,5) == show.) {
- 6855 var %ln6 = $right(%key,-5)
- 6856 set -u600 %barna_saquit_showchans. $+ %ln6 $hget(barna_saquit_keep,%key)
- 6857 }
- 6858 elseif ($left(%key,5) == sent.) {
- 6859 var %ln7 = $right(%key,-5)
- 6860 set -u300 %barna_saquit_sent. $+ %ln7 $hget(barna_saquit_keep,%key)
- 6861 }
- 6862
- 6863 inc %di
- 6864 }
- 6865
- 6866 if ($hget(barna_saquit_keep)) hfree barna_saquit_keep
- 6867
- 6868 if ($_barna_saquit_q_count > 0) _barna_saquit_q_start
- 6869 else _barna_saquit_q_compact_if_empty
- 6870
- 6871 var %after = $var(%barna_saquit*,0)
- 6872 if (%before > %after) {
- 6873 _barna_dbg HIGIENE SAQUIT compactado: antes= %before despues= %after cola= $_barna_saquit_q_count
- 6874 return 1
- 6875 }
- 6876
- 6877 return 0
- 6878}
- 6879
- 6880
- 6881; ------------------------------------------------------------
- 6882; BLOQUE 8.7B
- 6883; LAGRELIEF / GC PESADO CONTROLADO
- 6884; ------------------------------------------------------------
- 6885
- 6886alias _barna_heavy_gc_tick {
- 6887 if (%barna_addon != 1) return
- 6888 if (%barna_heavy_gc_busy == 1) return
- 6889
- 6890 var %now = $ctime
- 6891 var %secs = %barna_heavy_gc_secs
- 6892 if (%secs !isnum 10-) var %secs = 20
- 6893
- 6894 if (%barna_heavy_gc_last != $null) {
- 6895 if ($calc(%now - %barna_heavy_gc_last) < %secs) return
- 6896 }
- 6897
- 6898 set -u30 %barna_heavy_gc_busy 1
- 6899 set %barna_heavy_gc_last %now
- 6900 noop $_barna_heavy_gc_run(auto)
- 6901}
- 6902
- 6903alias barna.lagclean {
- 6904 var %r = $_barna_heavy_gc_run(manual)
- 6905 echo -s [ASN] LAGCLEAN ejecutado. acciones= %r highflow= %barna_highflow_gc total= $var(%barna_*,0) totalmax= %barna_total_max_vars q= $var(%barna_q_*,0) userip= $var(%barna_userip_*,0) lookup= $var(%barna_lookup.*,0) lookup_chans= $var(%barna_lookup_chans.*,0) last_ip= $var(%barna_last_ip.*,0) ip_keep= $var(%barna_ip_keep.*,0) qry= $var(%barna_qry.*,0) ipdone= $var(%barna_ipdone.*,0) badpfx2= $var(%barna_badpfx2.*,0) badpfx3= $var(%barna_badpfx3.*,0) badnick= $var(%barna_badnick.*,0) badnick_ip= $var(%barna_badnick_ip.*,0) badnick_chans= $var(%barna_badnick_chans.*,0) sock= $var(%barna_sock_*,0) sockdot= $var(%barna_sock.*,0) rx= $var(%barna_rx.*,0) asn_done= $var(%barna_asn_done.*,0) seen= $var(%barna_seen.*,0) jguard= $var(%barna_jguard*,0) seenguard= $var(%barna_seen_rescue_recent.*,0) saquit= $var(%barna_saquit*,0)
- 6906}
- 6907
- 6908alias barna.lookclean {
- 6909 unset %barna_lookup.*
- 6910 unset %barna_lookup_chans.*
- 6911 unset %barna_lookup_timer.*
- 6912 unset %barna_qry.*
- 6913 unset %barna_ipdone.*
- 6914 unset %barna_last_ip.*
- 6915 echo -s [ASN] LOOKCLEAN ejecutado. Limpieza de lookup/last_ip sin tocar canales/ASN ni ip_keep.
- 6916}
- 6917
- 6918alias _barna_ipkeep_safe_look_gc {
- 6919 ; Build 52: limpieza automatica de lookup/last_ip cuando USERIP esta idle.
- 6920 ; Mantiene %barna_ip_keep.* para debug, trace y Parseline2.
- 6921 if ($_barna_userip_q_count > 0) return 0
- 6922 if ($timer(BarnaUserIPBatch) != $null) return 0
- 6923
- 6924 var %lookup = $var(%barna_lookup.*,0)
- 6925 var %lookupchans = $var(%barna_lookup_chans.*,0)
- 6926 var %lastip = $var(%barna_last_ip.*,0)
- 6927 var %qry = $var(%barna_qry.*,0)
- 6928 var %ipdone = $var(%barna_ipdone.*,0)
- 6929 var %total = $calc(%lookup + %lookupchans + %lastip + %qry + %ipdone)
- 6930 var %max = %barna_lookup_idle_total_max
- 6931 if (%max !isnum 50-) var %max = 200
- 6932
- 6933 if (%total > %max) {
- 6934 unset %barna_lookup.*
- 6935 unset %barna_lookup_chans.*
- 6936 unset %barna_lookup_timer.*
- 6937 unset %barna_qry.*
- 6938 unset %barna_ipdone.*
- 6939 unset %barna_last_ip.*
- 6940 return 1
- 6941 }
- 6942
- 6943 return 0
- 6944}
- 6945
- 6946alias barna.badnickclean {
- 6947 unset %barna_badnick.*
- 6948 unset %barna_badnick_ip.*
- 6949 unset %barna_badnick_chans.*
- 6950 echo -s [ASN] BADNICKCLEAN ejecutado. Limpieza de badnick temporal por canal sin tocar canales/ASN.
- 6951}
- 6952
- 6953alias _barna_heavy_gc_run {
- 6954 _barna_runtime_defaults
- 6955
- 6956 var %mode = $1
- 6957 var %actions = 0
- 6958
- 6959 ; Nunca tocar aqui %barna_chan.* ni %barna_asn.*.
- 6960
- 6961 var %p2 = $var(%barna_badpfx2.*,0)
- 6962 var %p3 = $var(%barna_badpfx3.*,0)
- 6963 var %p2max = %barna_badpfx2_max_vars
- 6964 var %p3max = %barna_badpfx3_max_vars
- 6965 if (%p2max !isnum 10-) var %p2max = 40
- 6966 if (%p3max !isnum 20-) var %p3max = 80
- 6967
- 6968 if ((%p2 > %p2max) || (%p3 > %p3max)) {
- 6969 unset %barna_badpfx2.*
- 6970 unset %barna_badpfx3.*
- 6971 inc %actions
- 6972 if (%mode == manual) echo -s [ASN] LAGCLEAN badpfx limpiado: pfx2= %p2 pfx3= %p3
- 6973 }
- 6974
- 6975 var %seen = $var(%barna_seen.*,0)
- 6976 var %seenmax = %barna_seen_max_vars
- 6977 if (%seenmax !isnum 100-) var %seenmax = 700
- 6978
- 6979 if (%seen > %seenmax) {
- 6980 unset %barna_seen.*
- 6981 inc %actions
- 6982 if (%mode == manual) echo -s [ASN] LAGCLEAN seen limpiado: seen= %seen max= %seenmax
- 6983 }
- 6984
- 6985 var %echoseen = $var(%barna_echo_seen.*,0)
- 6986 var %echomax = %barna_echo_seen_max_vars
- 6987 if (%echomax !isnum 100-) var %echomax = 400
- 6988
- 6989 if (%echoseen > %echomax) {
- 6990 unset %barna_echo_seen.*
- 6991 inc %actions
- 6992 if (%mode == manual) echo -s [ASN] LAGCLEAN echo_seen limpiado: vars= %echoseen
- 6993 }
- 6994
- 6995 ; Build 92: dedupe ASN/case/SEENGUARD tambien son temporales.
- 6996 var %echoasn = $var(%barna_echo_asn_seen.*,0)
- 6997 var %echoasnmax = %barna_echo_asn_seen_max_vars
- 6998 if (%echoasnmax !isnum 20-) var %echoasnmax = 80
- 6999 if (%echoasn > %echoasnmax) {
- 7000 unset %barna_echo_asn_seen.*
- 7001 inc %actions
- 7002 if (%mode == manual) echo -s [ASN] LAGCLEAN echo_asn_seen limpiado: vars= %echoasn max= %echoasnmax
- 7003 }
- 7004
- 7005 var %displayv = $var(%barna_seen_display.*,0)
- 7006 if (%displayv > %seenmax) {
- 7007 unset %barna_seen_display.*
- 7008 inc %actions
- 7009 if (%mode == manual) echo -s [ASN] LAGCLEAN seen_display limpiado: vars= %displayv max= %seenmax
- 7010 }
- 7011
- 7012 var %seengr = $var(%barna_seen_rescue_recent.*,0)
- 7013 if (%seengr > 40) {
- 7014 unset %barna_seen_rescue_recent.*
- 7015 inc %actions
- 7016 if (%mode == manual) echo -s [ASN] LAGCLEAN seenguard_recent limpiado: vars= %seengr
- 7017 }
- 7018
- 7019 ; VARHYGIENE49: badnick/badnick_ip/badnick_chans es memoria temporal por canal.
- 7020 var %bn = $var(%barna_badnick.*,0)
- 7021 var %bnip = $var(%barna_badnick_ip.*,0)
- 7022 var %bnch = $var(%barna_badnick_chans.*,0)
- 7023 var %bnmax = %barna_badnick_max_vars
- 7024 if (%bnmax !isnum 50-) var %bnmax = 300
- 7025
- 7026 if ($calc(%bn + %bnip + %bnch) > %bnmax) {
- 7027 unset %barna_badnick.*
- 7028 unset %barna_badnick_ip.*
- 7029 unset %barna_badnick_chans.*
- 7030 inc %actions
- 7031 if (%mode == manual) echo -s [ASN] LAGCLEAN badnick limpiado: badnick= %bn badnick_ip= %bnip badnick_chans= %bnch max= %bnmax
- 7032 }
- 7033
- 7034 ; Build 51: ip_keep conserva IPs para trazas y Parseline2 aunque se limpie last_ip.
- 7035 ; Es temporal y acotado para evitar volver al lag por variables masivas.
- 7036 var %ipkeep = $var(%barna_ip_keep.*,0)
- 7037 var %ipkeepmax = %barna_ip_keep_max_vars
- 7038 if (%ipkeepmax !isnum 100-) var %ipkeepmax = 700
- 7039 if (%ipkeepmax > 700) var %ipkeepmax = 700
- 7040 if (%ipkeep > %ipkeepmax) {
- 7041 unset %barna_ip_keep.*
- 7042 inc %actions
- 7043 if (%mode == manual) echo -s [ASN] LAGCLEAN ip_keep limpiado por limite: ip_keep= %ipkeep max= %ipkeepmax
- 7044 }
- 7045
- 7046 ; VARHYGIENE37: las familias lookup/last_ip crecen mucho con joins masivos.
- 7047 ; Son estado temporal; no contienen configuracion de canales ni ASN.
- 7048 var %lookup = $var(%barna_lookup.*,0)
- 7049 var %lookupchans = $var(%barna_lookup_chans.*,0)
- 7050 var %lastip = $var(%barna_last_ip.*,0)
- 7051 var %qry = $var(%barna_qry.*,0)
- 7052 var %ipdone = $var(%barna_ipdone.*,0)
- 7053 var %lookuptotal = $calc(%lookup + %lookupchans + %lastip + %qry + %ipdone)
- 7054 var %lookupmax = %barna_lookup_max_vars
- 7055 var %lastipmax = %barna_lastip_max_vars
- 7056 var %lookuptotalmax = %barna_lookup_total_max_vars
- 7057 if (%lookupmax !isnum 100-) var %lookupmax = 400
- 7058 if (%lastipmax !isnum 100-) var %lastipmax = 400
- 7059 if (%lookuptotalmax !isnum 300-) var %lookuptotalmax = 900
- 7060
- 7061 if ((%lookup > %lookupmax) || (%lookupchans > %lookupmax) || (%lastip > %lastipmax) || (%lookuptotal > %lookuptotalmax)) {
- 7062 unset %barna_lookup.*
- 7063 unset %barna_lookup_chans.*
- 7064 unset %barna_lookup_timer.*
- 7065 unset %barna_qry.*
- 7066 unset %barna_ipdone.*
- 7067 unset %barna_last_ip.*
- 7068 inc %actions
- 7069 if (%mode == manual) echo -s [ASN] LAGCLEAN lookup/last_ip limpiado: lookup= %lookup lookup_chans= %lookupchans last_ip= %lastip qry= %qry ipdone= %ipdone total_lookup= %lookuptotal
- 7070 }
- 7071
- 7072 ; VARHYGIENE43: restos de sockets ASN antiguos. Son estado temporal.
- 7073 ; Solo se purgan si no hay sockets reales ni running ASN.
- 7074 var %sockvars = $_barna_sockvar_count
- 7075 var %sockmax = %barna_sockvar_max_vars
- 7076 if (%sockmax !isnum 50-) var %sockmax = 150
- 7077 if (%sockvars > %sockmax) {
- 7078 var %cleaned_sockvars = $_barna_sockvar_gc
- 7079 if (%cleaned_sockvars > 0) {
- 7080 inc %actions
- 7081 if (%mode == manual) echo -s [ASN] LAGCLEAN sock/rx/asn_done limpiado: vars= %cleaned_sockvars max= %sockmax
- 7082 }
- 7083 }
- 7084
- 7085 var %sqv = $var(%barna_saquit*,0)
- 7086 var %sqc = $_barna_saquit_q_count
- 7087 var %sqvmax = %barna_saquit_emergency_max_vars
- 7088 var %sqcmax = %barna_saquit_emergency_max_queue
- 7089 if (%sqvmax !isnum 100-) var %sqvmax = 300
- 7090 if (%sqcmax !isnum 10-) var %sqcmax = 50
- 7091
- 7092 if ((%sqv > %sqvmax) || (%sqc > %sqcmax)) {
- 7093 .timerBarnaSAQUITPump off
- 7094 unset %barna_saquit_ip.*
- 7095 unset %barna_saquit_chans.*
- 7096 unset %barna_saquit_pending.*
- 7097 unset %barna_saquit_timer.*
- 7098 unset %barna_saquit_sent.*
- 7099 unset %barna_saquit_msg.*
- 7100 unset %barna_saquit_showchans.*
- 7101 unset %barna_saquit_q_*
- 7102 unset %barna_saquitq_*
- 7103 inc %actions
- 7104 echo -s [ASN] LAGCLEAN SAQUIT emergencia: se purga cola pesada. vars= %sqv cola= %sqc
- 7105 }
- 7106
- 7107 var %uv = $var(%barna_userip_*,0)
- 7108 var %uq = $_barna_userip_q_count
- 7109 if ((%uv > 80) && (%uq <= 5)) {
- 7110 noop $_barna_userip_vartrim_idle
- 7111 inc %actions
- 7112 }
- 7113
- 7114 var %qv = $var(%barna_q_*,0)
- 7115 var %liveq = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 7116 if ((%qv > 40) && (%liveq == 0) && (%barna_q_running == 0) && ($_barna_ipinfo_sock_count == 0)) {
- 7117 unset %barna_q_*
- 7118 _barna_runtime_defaults
- 7119 inc %actions
- 7120 }
- 7121
- 7122 if ($var(%barna*joinfix*,0) > 40) {
- 7123 barna.joinfixgc.run
- 7124 inc %actions
- 7125 }
- 7126
- 7127 var %jgv = $var(%barna_jguard*,0)
- 7128 var %jgmax = %barna_join_guard_max
- 7129 if (%jgmax !isnum 20-) var %jgmax = 60
- 7130 if (%jgv > $calc(%jgmax * 4)) {
- 7131 _barna_join_guard_gc
- 7132 inc %actions
- 7133 }
- 7134
- 7135 var %total = $var(%barna_*,0)
- 7136 var %totalmax = %barna_total_max_vars
- 7137 if (%totalmax !isnum 1000-) var %totalmax = 2500
- 7138 if (%total > %totalmax) {
- 7139 if ($var(%barna_badpfx2.*,0) > 0) unset %barna_badpfx2.*
- 7140 if ($var(%barna_badpfx3.*,0) > 0) unset %barna_badpfx3.*
- 7141 if ($var(%barna_seen.*,0) > 0) unset %barna_seen.*
- 7142 if ($var(%barna_echo_seen.*,0) > 0) unset %barna_echo_seen.*
- 7143 if ($var(%barna_echo_asn_seen.*,0) > 0) unset %barna_echo_asn_seen.*
- 7144 if ($var(%barna_seen_display.*,0) > 0) unset %barna_seen_display.*
- 7145 if ($var(%barna_seen_rescue_recent.*,0) > 0) unset %barna_seen_rescue_recent.*
- 7146 if ($var(%barna_badnick.*,0) > 0) unset %barna_badnick.*
- 7147 if ($var(%barna_badnick_ip.*,0) > 0) unset %barna_badnick_ip.*
- 7148 if ($var(%barna_badnick_chans.*,0) > 0) unset %barna_badnick_chans.*
- 7149 if ($var(%barna_lookup.*,0) > 0) unset %barna_lookup.*
- 7150 if ($var(%barna_lookup_chans.*,0) > 0) unset %barna_lookup_chans.*
- 7151 if ($var(%barna_lookup_timer.*,0) > 0) unset %barna_lookup_timer.*
- 7152 if ($var(%barna_qry.*,0) > 0) unset %barna_qry.*
- 7153 if ($var(%barna_ipdone.*,0) > 0) unset %barna_ipdone.*
- 7154 if ($var(%barna_last_ip.*,0) > 0) unset %barna_last_ip.*
- 7155 if ($var(%barna_jguard*,0) > 0) {
- 7156 unset %barna_jguard_items
- 7157 unset %barna_jguard.*
- 7158 unset %barna_jguard_ts.*
- 7159 unset %barna_jguard_nick.*
- 7160 }
- 7161 if (($_barna_ipinfo_sock_count == 0) && (%barna_q_running <= 0)) {
- 7162 noop $_barna_sockvar_gc
- 7163 }
- 7164 inc %actions
- 7165 echo -s [ASN] LAGCLEAN total alto: purga extra sin tocar canales/ASN. total= %total
- 7166 }
- 7167
- 7168 return %actions
- 7169}
- 7170
- 7171; ------------------------------------------------------------
- 7172; BLOQUE 8.8
- 7173; HIGIENE DE VARIABLES PARA EVITAR LAG ACUMULATIVO
- 7174; ------------------------------------------------------------
- 7175
- 7176alias _barna_hygiene_tick {
- 7177 var %now = $ctime
- 7178 var %secs = %barna_hygiene_secs
- 7179
- 7180 if (%secs !isnum 60-) var %secs = 300
- 7181 if (%barna_hygiene_busy == 1) return
- 7182
- 7183 if (%barna_hygiene_last != $null) {
- 7184 if ($calc(%now - %barna_hygiene_last) < %secs) return
- 7185 }
- 7186
- 7187 set -u30 %barna_hygiene_busy 1
- 7188 set %barna_hygiene_last %now
- 7189
- 7190 var %cachemax = %barna_asn_cache_max_exact
- 7191 if (%cachemax !isnum 50-) var %cachemax = 120
- 7192
- 7193 if ($var(%barna_asn_cache_asn.*,0) > %cachemax) {
- 7194 _barna_dbg HIGIENE cache ASN exacta excede limite, limpiando silenciosamente: actual= $var(%barna_asn_cache_asn.*,0) max= %cachemax
- 7195 barna.cachereset silent
- 7196 }
- 7197
- 7198 ; Build 92: temporales de dedupe/trace tienen cap bajo para no crear lag acumulado.
- 7199 var %echoasn_h = $var(%barna_echo_asn_seen.*,0)
- 7200 var %echoasnmax_h = %barna_echo_asn_seen_max_vars
- 7201 if (%echoasnmax_h !isnum 20-) var %echoasnmax_h = 80
- 7202 if (%echoasn_h > %echoasnmax_h) unset %barna_echo_asn_seen.*
- 7203
- 7204 if ($var(%barna_echo_seen.*,0) > %barna_echo_seen_max_vars) unset %barna_echo_seen.*
- 7205 if ($var(%barna_seen_rescue_recent.*,0) > 40) unset %barna_seen_rescue_recent.*
- 7206
- 7207 var %qv = $var(%barna_q_*,0)
- 7208 var %liveq = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 7209
- 7210 ; VARHYGIENE12: si no hay cola ASN real, primero purga total idle.
- 7211 if (!$_barna_q_idle_gc) {
- 7212 var %qallow = $calc((%liveq * 10) + 40)
- 7213 var %qmaxa = %barna_q_var_max_active
- 7214 if (%qmaxa !isnum 50-) var %qmaxa = 120
- 7215 if (%qallow > %qmaxa) var %qallow = %qmaxa
- 7216
- 7217 if (%qv > %qallow) {
- 7218 noop $_barna_q_compact_vars
- 7219 }
- 7220 }
- 7221
- 7222 var %uv = $var(%barna_userip_*,0)
- 7223 var %uq = $_barna_userip_q_count
- 7224 var %umax = %barna_userip_var_max_idle
- 7225 if (%umax !isnum 50-) var %umax = 80
- 7226
- 7227 ; VARHYGIENE5: limpia USERIP tambien con pocos pendientes reales.
- 7228 if ((%uv > %umax) && (%uq <= 20)) {
- 7229 noop $_barna_userip_vartrim_idle
- 7230 }
- 7231
- 7232 var %sv = $var(%barna_saquit*,0)
- 7233 var %lives = $_barna_saquit_q_count
- 7234 var %sallow = $calc((%lives * 12) + 40)
- 7235 var %smax = %barna_saquit_var_max_idle
- 7236 if (%smax !isnum 50-) var %smax = 80
- 7237 if (%sallow > %smax) var %sallow = %smax
- 7238
- 7239 if (%sv > %sallow) {
- 7240 noop $_barna_saquit_compact_vars
- 7241 }
- 7242
- 7243 unset %barna_hygiene_busy
- 7244}
- 7245
- 7246
- 7247; ------------------------------------------------------------
- 7248; BLOQUE 8.8.5
- 7249; ARRANQUE ASN DIRECTO DE RESCATE
- 7250; ------------------------------------------------------------
- 7251
- 7252
- 7253alias _barna_asn_first_id {
- 7254 if (%barna_q_items != $null) return $gettok(%barna_q_items,1,44)
- 7255 if (%barna_q_low_items != $null) return $gettok(%barna_q_low_items,1,44)
- 7256}
- 7257
- 7258alias _barna_asn_first_nick {
- 7259 var %id = $_barna_asn_first_id
- 7260 if (%id == $null) return
- 7261 return [ [ $+(%,barna_q_nick.,%id) ] ]
- 7262}
- 7263
- 7264alias _barna_asn_first_ip {
- 7265 var %id = $_barna_asn_first_id
- 7266 if (%id == $null) return
- 7267 return [ [ $+(%,barna_q_ip.,%id) ] ]
- 7268}
- 7269
- 7270alias _barna_asn_queue_has_items {
- 7271 if (%barna_q_items != $null) return 1
- 7272 if (%barna_q_low_items != $null) return 1
- 7273 return 0
- 7274}
- 7275
- 7276alias _barna_asn_direct_start_one {
- 7277 if (%barna_addon != 1) return 0
- 7278
- 7279 ; VARHYGIENE11 FAILFAST:
- 7280 ; Motor directo de ASN. No depende de q_process ni de qbusy.
- 7281 ; Extrae hasta 40 IDs, descarta inválidos, y abre un socket real con nombre simple ipinfo<ID>.
- 7282 _barna_q_clear_ghost_light
- 7283
- 7284 var %running = %barna_q_running
- 7285 if (%running == $null) var %running = 0
- 7286 if (%running > 0) return 0
- 7287
- 7288 var %id
- 7289 var %lowmode = 0
- 7290 var %tries = 0
- 7291
- 7292 while (%tries < 40) {
- 7293 inc %tries
- 7294
- 7295 if (%barna_q_items != $null) {
- 7296 %id = $gettok(%barna_q_items,1,44)
- 7297 var %newitems = $remtok(%barna_q_items,%id,1,44)
- 7298 %lowmode = 0
- 7299
- 7300 if (%newitems == $null) unset %barna_q_items
- 7301 else set %barna_q_items %newitems
- 7302 }
- 7303 else {
- 7304 if (%barna_q_low_items != $null) {
- 7305 %id = $gettok(%barna_q_low_items,1,44)
- 7306 var %newlowitems = $remtok(%barna_q_low_items,%id,1,44)
- 7307 %lowmode = 1
- 7308
- 7309 if (%newlowitems == $null) unset %barna_q_low_items
- 7310 else set %barna_q_low_items %newlowitems
- 7311 }
- 7312 else return 0
- 7313 }
- 7314
- 7315 if (%id == $null) return 0
- 7316
- 7317 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 7318 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 7319 var %chans = [ [ $+(%,barna_q_chans.,%id) ] ]
- 7320
- 7321 if ((%nick != $null) && (%ip != $null)) break
- 7322
- 7323 _barna_dbg DIRECTASN descarta ID invalido: id= %id nick= %nick ip= %ip
- 7324 _barna_q_remove %id
- 7325 %id = $null
- 7326 }
- 7327
- 7328 if (%id == $null) return 0
- 7329
- 7330 var %ln = $lower(%nick)
- 7331 unset %barna_q_pending. $+ %ln
- 7332 set -u120 %barna_q_active. $+ %ln %id
- 7333
- 7334 var %try = [ [ $+(%,barna_q_try.,%id) ] ]
- 7335 if (%try == $null) var %try = 0
- 7336 inc %try
- 7337 set -u180 %barna_q_try. $+ %id %try
- 7338
- 7339 set -u90 %temp_ip_ $+ %nick %ip
- 7340 unset %asn_val. $+ %nick
- 7341 unset %as_name_val. $+ %nick
- 7342 unset %barna_asn_done. $+ %ln
- 7343 unset %barna_sock_timeout_seen. $+ %ln
- 7344 set -u30 %barna_rx. $+ %ln 0
- 7345
- 7346 var %sock_name = $_barna_sock_name(%nick,%id)
- 7347
- 7348 if ($sock(%sock_name)) sockclose %sock_name
- 7349
- 7350 set -u20 %barna_sock_nick. $+ %id %nick
- 7351 set -u20 %barna_sock_ip. $+ %id %ip
- 7352 set -u20 %barna_sock_id. $+ %id %id
- 7353 set -u20 %barna_sock_expected. $+ %id %sock_name
- 7354 unset %barna_sock_opened. $+ %id
- 7355
- 7356 _barna_q_running_inc
- 7357 set -u60 %barna_q_last_start_ts $ctime
- 7358 set -u60 %barna_q_last_start_id %id
- 7359 set -u60 %barna_q_last_start_sock %sock_name
- 7360
- 7361 if (%lowmode == 1) {
- 7362 _barna_dbg DIRECTASN baja abre socket: id= %id try= %try nick= %nick ip= %ip sock= %sock_name normal_total= $numtok(%barna_q_items,44) low_total= $numtok(%barna_q_low_items,44)
- 7363 }
- 7364 else {
- 7365 _barna_dbg DIRECTASN abre socket: id= %id try= %try nick= %nick ip= %ip sock= %sock_name normal_total= $numtok(%barna_q_items,44) low_total= $numtok(%barna_q_low_items,44)
- 7366 }
- 7367
- 7368 sockopen -e %sock_name api.ipinfo.io 443
- 7369
- 7370 ; VARHYGIENE19: si mIRC no crea el socket tras sockopen, no dejamos running fantasma.
- 7371 if (!$sock(%sock_name)) {
- 7372 _barna_dbg DIRECTASN sockopen sin socket visible: id= %id nick= %nick ip= %ip sock= %sock_name
- 7373 _barna_q_retry_or_done %nick SOCKOPEN_NO_SOCKET
- 7374 return 0
- 7375 }
- 7376
- 7377 var %sockto = %barna_sock_timeout_secs
- 7378 if (%sockto !isnum 5-) var %sockto = 10
- 7379
- 7380 var %totimer = BarnaSockTO_ $+ %id
- 7381 set -u300 %barna_q_totimer. $+ %id %totimer
- 7382 .timer $+ %totimer 1 %sockto _barna_sock_timeout %nick %sock_name %id
- 7383
- 7384 return 1
- 7385}
- 7386
- 7387
- 7388; ------------------------------------------------------------
- 7389; BUILD 99: CAP DURO DE ESTADO POSTCONSULTA
- 7390; ------------------------------------------------------------
- 7391; ------------------------------------------------------------
- 7392; BUILD 99: LIMPIEZA SELECTIVA DE COLA ASN TEMPORAL
- 7393; ------------------------------------------------------------
- 7394alias _barna_q_temp_clear {
- 7395 ; No usar unset %barna_q_* porque borraria configuracion q_delay/q_workers/etc.
- 7396 ; Solo limpia estado temporal de consultas ASN ya huerfano.
- 7397 var %i = $timer(0)
- 7398 while (%i > 0) {
- 7399 var %t = $timer(%i)
- 7400 var %lt = $lower(%t)
- 7401 if (($left(%lt,12) == barnasockto_) || ($left(%lt,12) == barnaqretry_)) .timer $+ %t off
- 7402 dec %i
- 7403 }
- 7404
- 7405 .unset %barna_q_pending.*
- 7406 .unset %barna_q_active.*
- 7407 .unset %barna_q_state.*
- 7408 .unset %barna_q_ip.*
- 7409 .unset %barna_q_chans.*
- 7410 .unset %barna_q_try.*
- 7411 .unset %barna_q_nick.*
- 7412 .unset %barna_q_ts.*
- 7413 .unset %barna_q_low.*
- 7414 .unset %barna_q_deferred.*
- 7415 .unset %barna_q_retry_timer.*
- 7416 .unset %barna_q_totimer.*
- 7417 .unset %barna_q_finished.*
- 7418 .unset %barna_q_items
- 7419 .unset %barna_q_low_items
- 7420 .unset %barna_q_running
- 7421 .unset %barna_q_process_busy
- 7422 .unset %barna_q_last_start_ts
- 7423 .unset %barna_q_last_start_id
- 7424 .unset %barna_q_last_start_sock
- 7425 .unset %barna_q_scheduled
- 7426 .unset %barna_q_prune_last
- 7427
- 7428 noop $_barna_sockto_orphan_gc
- 7429 return 1
- 7430}
- 7431
- 7432alias _barna_statecap_hardgc {
- 7433 ; Limpieza fuerte pero acotada. No toca %barna_chan.* ni %barna_asn.*.
- 7434 if (%barna_addon != 1) return 0
- 7435 if (%barna_statecap_hard_busy == 1) return 0
- 7436
- 7437 set -u6 %barna_statecap_hard_busy 1
- 7438
- 7439 var %changed = 0
- 7440 var %ucnt = $_barna_userip_q_count
- 7441 var %infvars = $var(%barna_userip_inflight.*,0)
- 7442 var %infcount = %barna_userip_inflight_count
- 7443 var %cur = %barna_whoip_current_ln
- 7444 var %curnick = %barna_whoip_current_nick
- 7445
- 7446 if (%infcount !isnum 1-) var %infcount = 0
- 7447
- 7448 ; DIRECT100: no purgar inflight activos mientras hay cola WHOIP real.
- 7449 ; En esta red el RAW354 trae nick+IP, por lo que varios inflight son seguros para
- 7450 ; aceptar respuestas; el build 99 los reducia a 1 y rompia el debug/ASN tras JOIN.
- 7451 ; Solo limpiamos inflight si ya no hay cola WHOIP ni WHO actual, o si el crecimiento
- 7452 ; es claramente patologico.
- 7453 if (((%infvars > 0) && (%ucnt == 0) && (%cur == $null)) || (%infvars > 180)) {
- 7454 .unset %barna_userip_inflight.*
- 7455 .unset %barna_userip_inflight_count
- 7456 .unset %barna_whoip_current_nick
- 7457 .unset %barna_whoip_current_ln
- 7458 .unset %barna_whoip_315_pending
- 7459 .unset %barna_whoip_315_done_pending
- 7460 inc %changed
- 7461 }
- 7462
- 7463 ; Si la cola WHOIP real esta vacia y no hay WHO actual, limpia restos de cola/sent.
- 7464 if (($_barna_userip_q_count == 0) && (%barna_whoip_current_ln == $null)) {
- 7465 if ($var(%barna_userip_q_*,0) > 5) {
- 7466 .unset %barna_userip_q_item.*
- 7467 .unset %barna_userip_q_chans.*
- 7468 .unset %barna_userip_q_pending.*
- 7469 .unset %barna_userip_q_nick.*
- 7470 .unset %barna_userip_q_slot.*
- 7471 .unset %barna_userip_q_head
- 7472 .unset %barna_userip_q_tail
- 7473 .unset %barna_userip_q_count_real
- 7474 .unset %barna_userip_q_scheduled
- 7475 .unset %barna_userip_q_processing
- 7476 inc %changed
- 7477 }
- 7478
- 7479 .unset %barna_userip_sent_recent.*
- 7480 .unset %barna_userip_sent_ts.*
- 7481 .unset %barna_userip_retry.*
- 7482 .unset %barna_userip_watchtry.*
- 7483 }
- 7484
- 7485 var %running = %barna_q_running
- 7486 if (%running !isnum 1-) var %running = 0
- 7487 var %socks = $_barna_ipinfo_sock_count
- 7488 var %live = $calc($numtok(%barna_q_items,44) + $numtok(%barna_q_low_items,44))
- 7489 var %qvars = $var(%barna_q_*,0)
- 7490
- 7491 ; Si no hay cola ASN viva ni sockets, q_pending/q_ip/q_chans/q_try son basura.
- 7492 if ((%live == 0) && (%running == 0) && (%socks == 0) && (%qvars > 20)) {
- 7493 noop $_barna_q_temp_clear
- 7494 inc %changed
- 7495 }
- 7496
- 7497 ; Si no hay trabajo real, lookup/qry/ipdone/last_ip/ip_keep no deben acumularse.
- 7498 if ((%live == 0) && (%running == 0) && (%socks == 0) && ($_barna_userip_q_count == 0) && ($var(%barna_userip_inflight.*,0) == 0)) {
- 7499 if (($var(%barna_lookup.*,0) > 0) || ($var(%barna_qry.*,0) > 0) || ($var(%barna_ipdone.*,0) > 0) || ($var(%barna_last_ip.*,0) > 30) || ($var(%barna_ip_keep.*,0) > 60)) {
- 7500 .unset %barna_lookup.*
- 7501 .unset %barna_lookup_chans.*
- 7502 .unset %barna_lookup_timer.*
- 7503 .unset %barna_qry.*
- 7504 .unset %barna_ipdone.*
- 7505 .unset %barna_last_ip.*
- 7506 .unset %barna_last_ip_ts.*
- 7507 .unset %barna_ip_keep.*
- 7508 inc %changed
- 7509 }
- 7510 }
- 7511
- 7512 ; Socket state: si no hay sockets/running, no conservar sock/rx/done.
- 7513 if ((%running == 0) && (%socks == 0) && ($_barna_sockvar_count > 20)) {
- 7514 noop $_barna_sockvar_gc
- 7515 inc %changed
- 7516 }
- 7517
- 7518 ; Dedupe ASN visible: util, pero no puede crecer por encima del cap.
- 7519 var %emax = %barna_echo_asn_seen_max_vars
- 7520 if (%emax !isnum 10-) var %emax = 160
- 7521 if ($var(%barna_echo_asn_seen.*,0) > %emax) {
- 7522 .unset %barna_echo_asn_seen.*
- 7523 inc %changed
- 7524 }
- 7525
- 7526 .unset %barna_statecap_hard_busy
- 7527 return %changed
- 7528}
- 7529
- 7530alias _barna_statecap_tick {
- 7531 if (%barna_addon != 1) return 0
- 7532 if (%barna_statecap_busy == 1) return 0
- 7533
- 7534 var %now = $ctime
- 7535 if (%barna_statecap_last != $null) {
- 7536 if ($calc(%now - %barna_statecap_last) < 6) return 0
- 7537 }
- 7538
- 7539 set -u6 %barna_statecap_busy 1
- 7540 set %barna_statecap_last %now
- 7541
- 7542 ; Build 99: mirar el total cada pocos segundos. Si supera el limite,
- 7543 ; purgar familias incoherentes aunque no estemos en idle perfecto.
- 7544 var %total = $var(%barna_*,0)
- 7545 var %max = %barna_total_max_vars
- 7546 if (%max !isnum 300-) var %max = 900
- 7547
- 7548 ; DIRECT100: no llamar al hardgc solo por tener varios inflight si hay cola WHOIP;
- 7549 ; esos inflight son necesarios para aceptar RAW354 y emitir debug/ASN.
- 7550 if ((%total > %max) || (($var(%barna_userip_inflight.*,0) > 180) && ($_barna_userip_q_count == 0)) || ($var(%barna_q_pending.*,0) > 20) || ($_barna_sockvar_count > 20) || ($var(%barna_ip_keep.*,0) > 60) || ($var(%barna_echo_asn_seen.*,0) > %barna_echo_asn_seen_max_vars)) {
- 7551 noop $_barna_statecap_hardgc
- 7552 }
- 7553
- 7554 ; Si no hay trabajo real en curso, purga agresiva de temporales.
- 7555 var %running = %barna_q_running
- 7556 if (%running !isnum 1-) var %running = 0
- 7557
- 7558 if (($_barna_userip_q_count == 0) && ($var(%barna_userip_inflight.*,0) == 0) && (%barna_q_items == $null) && (%barna_q_low_items == $null) && (%running == 0) && ($_barna_ipinfo_sock_count == 0)) {
- 7559 noop $_barna_userip_idle_gc
- 7560 noop $_barna_sockvar_gc
- 7561 .unset %barna_rx.*
- 7562 .unset %barna_asn_done.*
- 7563 .unset %temp_ip_*
- 7564 .unset %asn_val.*
- 7565 .unset %as_name_val.*
- 7566 .unset %barna_q_finished.*
- 7567 }
- 7568
- 7569 ; Si hay crecimiento peligroso de estado socket pero no hay sockets reales, limpiarlo aunque haya caches.
- 7570 if (($_barna_ipinfo_sock_count == 0) && ($_barna_sockvar_count > 20)) noop $_barna_sockvar_gc
- 7571
- 7572 .unset %barna_statecap_busy
- 7573 return 0
- 7574}
- 7575
- 7576; ------------------------------------------------------------
- 7577; BLOQUE 8.9
- 7578; CORE TICK ULTRA-LIGERO
- 7579; ------------------------------------------------------------
- 7580
- 7581alias _barna_core_start {
- 7582 if (%barna_addon != 1) return
- 7583 _barna_core_ensure_timers
- 7584}
- 7585
- 7586alias _barna_core_tick {
- 7587 if (%barna_addon != 1) {
- 7588 .timerBarnaCoreTick off
- 7589 unset %barna_core_tick_running
- 7590 unset %barna_core_tick_busy
- 7591 return
- 7592 }
- 7593
- 7594 if (%barna_core_tick_busy == 1) return
- 7595 set -u5 %barna_core_tick_busy 1
- 7596
- 7597 _barna_runtime_defaults
- 7598 _barna_core_ensure_timers
- 7599
- 7600 ; Build 132: CoreTick REALMENTE minimo.
- 7601 ; STATECAP, CACHECAP, JOIN GC y WHOIPRESCUE se ejecutan escalonados desde
- 7602 ; BarnaMaintenance. Aqui solo se despiertan colas y timers operativos.
- 7603
- 7604 if ($_barna_userip_q_count > 0) {
- 7605 if ($timer(BarnaUserIPBatch) == $null) _barna_userip_q_process
- 7606 }
- 7607
- 7608 var %running = %barna_q_running
- 7609 if (%running == $null) var %running = 0
- 7610
- 7611 if ((%barna_q_items != $null) || (%barna_q_low_items != $null) || (%running > 0)) {
- 7612 if (%running == 0) {
- 7613 unset %barna_q_process_busy
- 7614 _barna_q_process
- 7615 var %running2 = %barna_q_running
- 7616 if (%running2 == $null) var %running2 = 0
- 7617 if ((%running2 == 0) && ($_barna_asn_queue_has_items == 1)) _barna_asn_direct_start_one
- 7618 }
- 7619 _barna_asn_pump_start_if_needed
- 7620 }
- 7621
- 7622 if ($_barna_saquit_q_count > 0) _barna_saquit_q_start
- 7623
- 7624 if (%barna_echo_q_tail != $null) {
- 7625 if ($timer(BarnaEchoQ) == $null) _barna_echo_q_process
- 7626 }
- 7627
- 7628 unset %barna_core_tick_busy
- 7629}
- 7630
- 7631alias _barna_userip_ttl {
- 7632 var %ttl = %barna_userip_state_ttl
- 7633
- 7634 ; Build 99: TTL corto real para que inflight/lookup/qry no sobrevivan minutos.
- 7635 if (%ttl !isnum 30-) var %ttl = 60
- 7636 if (%ttl > 60) var %ttl = 60
- 7637 if (%ttl < 30) var %ttl = 30
- 7638
- 7639 return %ttl
- 7640}
- 7641
- 7642alias _barna_userip_q_sanity {
- 7643 ; Build 94: sanidad O(1), sin recorrer head..tail.
- 7644 ; No se cuenta slot por slot porque eso fue una fuente de lag.
- 7645 var %cnt = %barna_userip_q_count_real
- 7646
- 7647 if (%cnt !isnum 1-) {
- 7648 unset %barna_userip_q_count_real
- 7649 if ((%barna_userip_q_head == $null) || (%barna_userip_q_tail == $null)) {
- 7650 unset %barna_userip_q_head
- 7651 unset %barna_userip_q_tail
- 7652 unset %barna_userip_q_scheduled
- 7653 .timerBarnaUserIPBatch off
- 7654 }
- 7655 return 0
- 7656 }
- 7657
- 7658 if ((%barna_userip_q_head == $null) || (%barna_userip_q_tail == $null)) {
- 7659 unset %barna_userip_q_head
- 7660 unset %barna_userip_q_tail
- 7661 unset %barna_userip_q_count_real
- 7662 unset %barna_userip_q_scheduled
- 7663 .timerBarnaUserIPBatch off
- 7664 return 0
- 7665 }
- 7666
- 7667 if (%barna_userip_q_head > %barna_userip_q_tail) {
- 7668 unset %barna_userip_q_head
- 7669 unset %barna_userip_q_tail
- 7670 unset %barna_userip_q_count_real
- 7671 unset %barna_userip_q_scheduled
- 7672 .timerBarnaUserIPBatch off
- 7673 return 0
- 7674 }
- 7675
- 7676 return %cnt
- 7677}
- 7678alias _barna_userip_q_count {
- 7679 ; Build 94: contador O(1). Evita escanear cientos de slots en cada JOIN/tick.
- 7680 var %n = %barna_userip_q_count_real
- 7681 if (%n !isnum 1-) return 0
- 7682 return %n
- 7683}
- 7684
- 7685alias _barna_userip_q_count_inc {
- 7686 var %n = %barna_userip_q_count_real
- 7687
- 7688 if (%n == $null) var %n = 0
- 7689 inc %n
- 7690 set -u900 %barna_userip_q_count_real %n
- 7691}
- 7692
- 7693alias _barna_userip_q_count_dec {
- 7694 var %n = %barna_userip_q_count_real
- 7695
- 7696 if (%n == $null) var %n = 0
- 7697 dec %n
- 7698
- 7699 if (%n < 0) var %n = 0
- 7700
- 7701 if (%n == 0) unset %barna_userip_q_count_real
- 7702 else set -u900 %barna_userip_q_count_real %n
- 7703}
- 7704
- 7705
- 7706alias _barna_userip_q_drop_oldest_one {
- 7707 var %head = %barna_userip_q_head
- 7708 var %tail = %barna_userip_q_tail
- 7709 var %guard = 0
- 7710
- 7711 if ((%head == $null) || (%tail == $null)) return 0
- 7712
- 7713 while ((%head <= %tail) && (%guard < 200)) {
- 7714 inc %guard
- 7715
- 7716 var %ln = [ [ $+(%,barna_userip_q_item.,%head) ] ]
- 7717 unset %barna_userip_q_item. $+ %head
- 7718 set %barna_userip_q_head $calc(%head + 1)
- 7719
- 7720 if (%ln != $null) {
- 7721 unset %barna_userip_q_slot. $+ %ln
- 7722 unset %barna_userip_q_pending. $+ %ln
- 7723 unset %barna_userip_q_nick. $+ %ln
- 7724 unset %barna_lookup. $+ %ln
- 7725 unset %barna_lookup_chans. $+ %ln
- 7726 unset %barna_qry. $+ %ln
- 7727 _barna_userip_q_count_dec
- 7728
- 7729 var %d = %barna_userip_drop_count
- 7730 if (%d == $null) var %d = 0
- 7731 inc %d
- 7732 set -u3600 %barna_userip_drop_count %d
- 7733
- 7734 return 1
- 7735 }
- 7736
- 7737 var %head = %barna_userip_q_head
- 7738 }
- 7739
- 7740 return 0
- 7741}
- 7742
- 7743alias _barna_userip_q_shed_if_needed {
- 7744 ; Build 93: no hacer shed ni escanear cola en cada JOIN.
- 7745 ; La capacidad de consultar cada nick se conserva: la cola FIFO regula ritmo sin descartar.
- 7746 return 0
- 7747}
- 7748
- 7749alias _barna_userip_watch_q_count {
- 7750 var %n = %barna_userip_watch_q_count_real
- 7751
- 7752 if (%n !isnum 1-) return 0
- 7753
- 7754 return %n
- 7755}
- 7756
- 7757alias _barna_userip_watch_q_count_inc {
- 7758 var %n = %barna_userip_watch_q_count_real
- 7759
- 7760 if (%n == $null) var %n = 0
- 7761 inc %n
- 7762 set -u900 %barna_userip_watch_q_count_real %n
- 7763}
- 7764
- 7765alias _barna_userip_watch_q_count_dec {
- 7766 var %n = %barna_userip_watch_q_count_real
- 7767
- 7768 if (%n == $null) var %n = 0
- 7769 dec %n
- 7770
- 7771 if (%n < 0) var %n = 0
- 7772
- 7773 if (%n == 0) unset %barna_userip_watch_q_count_real
- 7774 else set -u900 %barna_userip_watch_q_count_real %n
- 7775}
- 7776
- 7777alias _barna_userip_inflight_inc {
- 7778 var %n = %barna_userip_inflight_count
- 7779 if (%n == $null) var %n = 0
- 7780 inc %n
- 7781 set -u20 %barna_userip_inflight_count %n
- 7782}
- 7783
- 7784alias _barna_userip_inflight_dec {
- 7785 var %n = %barna_userip_inflight_count
- 7786 if (%n == $null) var %n = 0
- 7787 dec %n
- 7788 if (%n < 0) var %n = 0
- 7789
- 7790 if (%n == 0) unset %barna_userip_inflight_count
- 7791 else set -u20 %barna_userip_inflight_count %n
- 7792}
- 7793
- 7794alias _barna_userip_q_schedule {
- 7795 _barna_core_start
- 7796
- 7797 var %delay = $1
- 7798
- 7799 if (%delay !isnum 1-) var %delay = %barna_userip_q_delay
- 7800 if (%delay !isnum 1-) var %delay = 3
- 7801
- 7802 if (%barna_userip_q_scheduled == 1) return
- 7803
- 7804 set -u60 %barna_userip_q_scheduled 1
- 7805 .timerBarnaUserIPBatch 1 %delay _barna_userip_q_process
- 7806}
- 7807
- 7808alias _barna_userip_q_enqueue {
- 7809 ; Build 94: FIFO ligero. Solo guarda el nick real en el slot.
- 7810 ; No crea q_slot por nick ni q_nick duplicado.
- 7811 if ($1 == $null) return
- 7812
- 7813 var %nick = $1
- 7814 var %ttl = $_barna_userip_ttl
- 7815 var %tail = %barna_userip_q_tail
- 7816
- 7817 if (%tail == $null) var %tail = 0
- 7818 inc %tail
- 7819
- 7820 set %barna_userip_q_tail %tail
- 7821
- 7822 if (%barna_userip_q_head == $null) set %barna_userip_q_head 1
- 7823
- 7824 set $+(-u,%ttl) %barna_userip_q_item. $+ %tail %nick
- 7825 _barna_userip_q_count_inc
- 7826}
- 7827
- 7828alias _barna_userip_q_add {
- 7829 if ($1 == $null) return
- 7830
- 7831 var %nick = $1
- 7832 var %ln = $lower(%nick)
- 7833 var %ttl = $_barna_userip_ttl
- 7834 var %chans = $_barna_seen_get(%nick)
- 7835
- 7836 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 7837
- 7838 if ($_barna_is_privileged_nick(%nick)) {
- 7839 _barna_dbg PRIVSAFE WHOIP COLA no add por @/+v: nick= %nick
- 7840 _barna_privileged_cleanup_nick %nick WHOIP_Q_ADD
- 7841 return
- 7842 }
- 7843
- 7844 if (%chans == $null) {
- 7845 _barna_dbg WHOIP COLA no add sin canales: nick= %nick
- 7846 return
- 7847 }
- 7848
- 7849 ; Build 94: no crear lookup/qry al ENCOLAR. Eso multiplicaba variables.
- 7850 ; lookup/qry se activan solo al ENVIAR WHO real.
- 7851 if ([ [ $+(%,barna_userip_q_pending.,%ln) ] ] == 1) {
- 7852 ; Build 106:
- 7853 ; Pending solo es valido si hay item FIFO real de este nick o inflight vivo.
- 7854 ; Si no, es fantasma aunque la cola global tenga otros nicks; se limpia y se reencola.
- 7855 if (([ [ $+(%,barna_userip_inflight.,%ln) ] ] != 1) && (!$_barna_userip_q_has_item(%nick))) {
- 7856 _barna_dbg WHOIP COLA pending huerfano estricto, reencolo: nick= %nick chans= %chans
- 7857 unset %barna_userip_q_pending. $+ %ln
- 7858 unset %barna_userip_q_chans. $+ %ln
- 7859 unset %barna_userip_sent_recent. $+ %ln
- 7860 unset %barna_lookup. $+ %ln
- 7861 unset %barna_lookup_chans. $+ %ln
- 7862 unset %barna_qry. $+ %ln
- 7863 unset %barna_ipdone. $+ %ln
- 7864 }
- 7865 else {
- 7866 set $+(-u,%ttl) %barna_userip_q_chans. $+ %ln %chans
- 7867 _barna_dbg WHOIP COLA ya pendiente, actualizo canales: nick= %nick chans= %chans
- 7868 return
- 7869 }
- 7870 }
- 7871
- 7872 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) {
- 7873 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 7874 _barna_dbg WHOIP COLA ya consultado, actualizo canales: nick= %nick chans= %chans
- 7875 return
- 7876 }
- 7877
- 7878 if ([ [ $+(%,barna_userip_sent_recent.,%ln) ] ] == 1) {
- 7879 set $+(-u,%ttl) %barna_userip_q_chans. $+ %ln %chans
- 7880 _barna_dbg WHOIP COLA ya enviado recientemente, no duplico: nick= %nick chans= %chans
- 7881 return
- 7882 }
- 7883
- 7884 set $+(-u,%ttl) %barna_userip_q_pending. $+ %ln 1
- 7885 set $+(-u,%ttl) %barna_userip_q_chans. $+ %ln %chans
- 7886 _barna_userip_q_enqueue %nick
- 7887
- 7888 _barna_dbg WHOIP COLA add light: nick= %nick chans= %chans total= $_barna_userip_q_count
- 7889
- 7890 _barna_core_start
- 7891 _barna_userip_q_schedule %barna_userip_q_delay
- 7892}
- 7893
- 7894alias _barna_userip_q_process {
- 7895 if (%barna_addon != 1) return
- 7896 if (%barna_userip_q_processing == 1) return
- 7897 set -u10 %barna_userip_q_processing 1
- 7898
- 7899 unset %barna_userip_q_scheduled
- 7900
- 7901 ; Build 94: FIFO directo y variables minimas. No sanear ni escanear.
- 7902 if ($_barna_userip_q_count == 0) {
- 7903 unset %barna_userip_q_head
- 7904 unset %barna_userip_q_tail
- 7905 unset %barna_userip_q_count_real
- 7906 .timerBarnaUserIPBatch off
- 7907 noop $_barna_userip_idle_gc
- 7908 unset %barna_userip_q_processing
- 7909 return
- 7910 }
- 7911
- 7912 var %max = %barna_userip_q_batch_max
- 7913 var %delay = %barna_userip_q_batch_delay
- 7914
- 7915 if (%max !isnum 1-) var %max = 1
- 7916 if (%delay !isnum 1-) var %delay = 1
- 7917
- 7918 ; DIRECT100: RAW354 trae nick consultado; permitimos varios inflight capados.
- 7919 ; Esto evita que un WHO sin RAW315/RAW354 deje muda la cola tras JOIN masivo.
- 7920 var %maxin = 12
- 7921 var %pending_now = $_barna_userip_q_count
- 7922
- 7923 if (%pending_now >= %barna_userip_emergency_threshold) {
- 7924 var %max = %barna_userip_emergency_batch_max
- 7925 var %delay = %barna_userip_emergency_delay
- 7926 }
- 7927 elseif (%pending_now >= %barna_userip_turbo_threshold) {
- 7928 var %max = %barna_userip_turbo_batch_max
- 7929 var %delay = %barna_userip_turbo_delay
- 7930 }
- 7931
- 7932 if (%max !isnum 1-) var %max = 1
- 7933 if (%delay !isnum 1-) var %delay = 1
- 7934 if (%max > 3) var %max = 3
- 7935
- 7936 var %sent = 0
- 7937 var %sendlist
- 7938 var %guard = 0
- 7939 var %running = %barna_userip_inflight_count
- 7940 if (%running !isnum 1-) var %running = 0
- 7941
- 7942 ; Build 100: usar solo el contador ligero y capado para ritmo.
- 7943 ; No bloquear por $var(%barna_userip_inflight.*) ni por current_ln: el RAW354 real trae
- 7944 ; nick consultado, asi que aceptar varios inflight evita que la cola se quede muda.
- 7945
- 7946 while ((%sent < %max) && (%running < %maxin) && (%guard < 80)) {
- 7947 inc %guard
- 7948
- 7949 var %head = %barna_userip_q_head
- 7950 var %tail = %barna_userip_q_tail
- 7951
- 7952 if ((%head == $null) || (%tail == $null) || (%head > %tail)) {
- 7953 unset %barna_userip_q_head
- 7954 unset %barna_userip_q_tail
- 7955 unset %barna_userip_q_count_real
- 7956 break
- 7957 }
- 7958
- 7959 var %nick = [ [ $+(%,barna_userip_q_item.,%head) ] ]
- 7960 unset %barna_userip_q_item. $+ %head
- 7961 set %barna_userip_q_head $calc(%head + 1)
- 7962
- 7963 if (%nick == $null) continue
- 7964
- 7965 _barna_userip_q_count_dec
- 7966
- 7967 var %ln = $lower(%nick)
- 7968
- 7969 if ($_barna_is_privileged_nick(%nick)) {
- 7970 _barna_dbg PRIVSAFE WHOIP COLA descarta nick con @/+v: nick= %nick
- 7971 _barna_privileged_cleanup_nick %nick WHOIP_Q_PROCESS
- 7972 continue
- 7973 }
- 7974
- 7975 if ([ [ $+(%,barna_userip_q_pending.,%ln) ] ] != 1) {
- 7976 _barna_dbg WHOIP COLA descarta item ya no pendiente: nick= %nick
- 7977 continue
- 7978 }
- 7979
- 7980 unset %barna_userip_q_pending. $+ %ln
- 7981
- 7982 var %chans = [ [ $+(%,barna_userip_q_chans.,%ln) ] ]
- 7983 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 7984 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 7985
- 7986 if (%chans == $null) {
- 7987 _barna_dbg WHOIP COLA descarta sin canales: nick= %nick
- 7988 unset %barna_userip_q_chans. $+ %ln
- 7989 unset %barna_lookup. $+ %ln
- 7990 unset %barna_lookup_chans. $+ %ln
- 7991 unset %barna_qry. $+ %ln
- 7992 unset %barna_ipdone. $+ %ln
- 7993 continue
- 7994 }
- 7995
- 7996 ; Si ya tenemos IP fresca/cache, no pedir WHO otra vez.
- 7997 if ($_barna_fast_asn_if_ip_ready(%nick,COLA_IP_READY)) {
- 7998 unset %barna_userip_q_chans. $+ %ln
- 7999 continue
- 8000 }
- 8001
- 8002 var %ttl = $_barna_userip_ttl
- 8003
- 8004 ; Estado de consulta SOLO al enviar WHO real.
- 8005 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 8006 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 8007 set $+(-u,%ttl) %barna_qry. $+ %ln 1
- 8008 set -u15 %barna_userip_sent_recent. $+ %ln 1
- 8009
- 8010 if (%sendlist == $null) var %sendlist = %nick
- 8011 else if ($len(%sendlist) < 220) var %sendlist = %sendlist $+ $chr(32) $+ %nick
- 8012
- 8013 _barna_dbg WHOIP COLA prepara light: nick= %nick chans= %chans
- 8014
- 8015 if ($_barna_whoip_send(%nick)) {
- 8016 inc %sent
- 8017 inc %running
- 8018 }
- 8019 else {
- 8020 unset %barna_userip_q_chans. $+ %ln
- 8021 }
- 8022 }
- 8023
- 8024 if (%sent > 0) {
- 8025 _barna_dbg WHOIP COLA consulta light: nicks= %sendlist enviados= %sent pendientes= $_barna_userip_q_count inflight= %barna_userip_inflight_count
- 8026 }
- 8027
- 8028 unset %barna_userip_q_processing
- 8029
- 8030 if ($_barna_userip_q_count > 0) _barna_userip_q_schedule %delay
- 8031 else noop $_barna_userip_idle_gc
- 8032}
- 8033alias _barna_userip_q_release {
- 8034 if ($1 == $null) return
- 8035
- 8036 var %nick = $1
- 8037 var %ln = $lower(%nick)
- 8038 var %reason = $2-
- 8039 var %whoip_timer = BarnaWHOIPChk_ $+ $md5(%ln,0)
- 8040 if ($timer(%whoip_timer) != $null) .timer $+ %whoip_timer off
- 8041 ; Build 94: la cola ya no usa q_slot por nick.
- 8042 ; Si el nick estaba pendiente, se marca como no pendiente; el item FIFO viejo se saltara al llegar al head.
- 8043 unset %barna_userip_q_pending. $+ %ln
- 8044 unset %barna_userip_q_chans. $+ %ln
- 8045
- 8046 var %wslot = [ [ $+(%,barna_userip_watch_q_slot.,%ln) ] ]
- 8047
- 8048 if (%wslot != $null) {
- 8049 if ([ [ $+(%,barna_userip_watch_q_item.,%wslot) ] ] != $null) _barna_userip_watch_q_count_dec
- 8050 unset %barna_userip_watch_q_item. $+ %wslot
- 8051 unset %barna_userip_watch_q_slot. $+ %ln
- 8052 }
- 8053
- 8054 unset %barna_userip_q_pending. $+ %ln
- 8055 unset %barna_userip_q_chans. $+ %ln
- 8056 unset %barna_userip_q_nick. $+ %ln
- 8057
- 8058 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) {
- 8059 unset %barna_userip_inflight. $+ %ln
- 8060 _barna_userip_inflight_dec
- 8061 }
- 8062
- 8063 unset %barna_userip_retry. $+ %ln
- 8064 unset %barna_userip_sent_ts. $+ %ln
- 8065 unset %barna_userip_sent_recent. $+ %ln
- 8066 if (%barna_whoip_current_ln == %ln) {
- 8067 unset %barna_whoip_current_nick
- 8068 unset %barna_whoip_current_ln
- 8069 }
- 8070
- 8071 ; Build 94: sin tokens WHOX por consulta.
- 8072
- 8073 _barna_lookup_timer_off %nick
- 8074
- 8075 _barna_dbg WHOIP COLA release: nick= %nick reason= %reason inflight= %barna_userip_inflight_count
- 8076
- 8077 if ($_barna_userip_q_count == 0) noop $_barna_userip_idle_gc
- 8078
- 8079 if ($_barna_userip_q_count > 0) {
- 8080 if (%barna_userip_q_processing == 1) {
- 8081 _barna_userip_q_schedule 1
- 8082 }
- 8083 else {
- 8084 if (!$_barna_whoip_next_fast) _barna_userip_q_schedule 1
- 8085 }
- 8086 }
- 8087}
- 8088
- 8089; ------------------------------------------------------------
- 8090; BLOQUE 7.6.1
- 8091; WATCHDOG WHOIP FIFO
- 8092; Evita escanear cientos de variables con $var() en cada ciclo.
- 8093; ------------------------------------------------------------
- 8094
- 8095alias _barna_userip_watch_q_enqueue {
- 8096 if ($1 == $null) return
- 8097
- 8098 var %ln = $1
- 8099 var %ttl = $_barna_userip_ttl
- 8100 var %oldslot = [ [ $+(%,barna_userip_watch_q_slot.,%ln) ] ]
- 8101
- 8102 if (%oldslot != $null) {
- 8103 set $+(-u,%ttl) %barna_userip_watch_q_item. $+ %oldslot %ln
- 8104 return
- 8105 }
- 8106
- 8107 var %tail = %barna_userip_watch_q_tail
- 8108
- 8109 if (%tail == $null) var %tail = 0
- 8110 inc %tail
- 8111
- 8112 set %barna_userip_watch_q_tail %tail
- 8113
- 8114 if (%barna_userip_watch_q_head == $null) set %barna_userip_watch_q_head 1
- 8115
- 8116 set $+(-u,%ttl) %barna_userip_watch_q_item. $+ %tail %ln
- 8117 set $+(-u,%ttl) %barna_userip_watch_q_slot. $+ %ln %tail
- 8118 _barna_userip_watch_q_count_inc
- 8119}
- 8120
- 8121; ------------------------------------------------------------
- 8122; BLOQUE 7.6.2
- 8123; WATCHDOG WHOIP UNICO
- 8124; No usa $var(%barna_userip_inflight.*) para no cargar mIRC.
- 8125; ------------------------------------------------------------
- 8126
- 8127alias _barna_userip_watchdog_schedule {
- 8128 if (%barna_userip_watchdog != 1) return
- 8129 if (%barna_userip_watchdog_scheduled == 1) return
- 8130
- 8131 var %delay = %barna_userip_watchdog_delay
- 8132 if (%delay !isnum 5-) var %delay = 18
- 8133
- 8134 set -u120 %barna_userip_watchdog_scheduled 1
- 8135 .timerBarnaUserIPWatchdog 1 %delay _barna_userip_watchdog_process
- 8136}
- 8137
- 8138alias _barna_userip_watchdog_process {
- 8139 unset %barna_userip_watchdog_scheduled
- 8140
- 8141 if (%barna_addon != 1) return
- 8142 if (%barna_userip_watchdog != 1) return
- 8143
- 8144 var %head = %barna_userip_watch_q_head
- 8145 var %tail = %barna_userip_watch_q_tail
- 8146 var %batch = %barna_userip_watchdog_batch
- 8147 var %delay = %barna_userip_watchdog_delay
- 8148 var %maxtry = %barna_userip_watchdog_retry_max
- 8149 var %now = $ctime
- 8150 var %checked = 0
- 8151
- 8152 if (%batch !isnum 1-) var %batch = 25
- 8153 if (%delay !isnum 5-) var %delay = 15
- 8154 if (%maxtry !isnum 0-) var %maxtry = 0
- 8155
- 8156 if (%head == $null) return
- 8157 if (%tail == $null) return
- 8158
- 8159 if ($_barna_userip_watch_q_count == 0) {
- 8160 unset %barna_userip_watch_q_head
- 8161 unset %barna_userip_watch_q_tail
- 8162 return
- 8163 }
- 8164
- 8165 while ((%head <= %tail) && (%checked < %batch)) {
- 8166 var %ln = [ [ $+(%,barna_userip_watch_q_item.,%head) ] ]
- 8167
- 8168 if (%ln == $null) {
- 8169 unset %barna_userip_watch_q_item. $+ %head
- 8170 inc %head
- 8171 set %barna_userip_watch_q_head %head
- 8172 inc %checked
- 8173 continue
- 8174 }
- 8175
- 8176 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] != 1) {
- 8177 _barna_userip_watch_q_count_dec
- 8178 unset %barna_userip_watch_q_item. $+ %head
- 8179 unset %barna_userip_watch_q_slot. $+ %ln
- 8180 inc %head
- 8181 set %barna_userip_watch_q_head %head
- 8182 inc %checked
- 8183 continue
- 8184 }
- 8185
- 8186 var %nick = [ [ $+(%,barna_userip_q_nick.,%ln) ] ]
- 8187 var %sent = [ [ $+(%,barna_userip_sent_ts.,%ln) ] ]
- 8188 var %age = 0
- 8189
- 8190 if (%nick == $null) var %nick = %ln
- 8191 if (%sent != $null) var %age = $calc(%now - %sent)
- 8192
- 8193 ; FIFO: si el primero aun no ha caducado, los siguientes son mas nuevos.
- 8194 if ((%sent != $null) && (%age < %delay)) break
- 8195
- 8196 _barna_userip_watch_q_count_dec
- 8197 unset %barna_userip_watch_q_item. $+ %head
- 8198 unset %barna_userip_watch_q_slot. $+ %ln
- 8199 inc %head
- 8200 set %barna_userip_watch_q_head %head
- 8201 inc %checked
- 8202
- 8203 var %seen = $_barna_seen_get(%nick)
- 8204 var %try = [ [ $+(%,barna_userip_watchtry.,%ln) ] ]
- 8205
- 8206 if (%try == $null) var %try = 0
- 8207
- 8208 if (%seen == $null) {
- 8209 _barna_dbg WHOIP watchdog libera sin canales: nick= %nick age= %age
- 8210 _barna_userip_q_release %nick WATCHDOG_LEAVE
- 8211 unset %barna_lookup. $+ %ln
- 8212 unset %barna_lookup_chans. $+ %ln
- 8213 unset %barna_qry. $+ %ln
- 8214 unset %barna_ipdone. $+ %ln
- 8215 unset %barna_userip_watchtry. $+ %ln
- 8216 }
- 8217 elseif (%try < %maxtry) {
- 8218 var %backlog = $_barna_userip_q_count
- 8219 var %retry_limit = %barna_userip_retry_backlog_limit
- 8220 if (%retry_limit !isnum 0-) var %retry_limit = 8
- 8221
- 8222 if (%backlog <= %retry_limit) {
- 8223 inc %try
- 8224 set -u600 %barna_userip_watchtry. $+ %ln %try
- 8225 _barna_dbg WHOIP watchdog reintento en cola: nick= %nick try= %try age= %age backlog= %backlog chans= %seen
- 8226 _barna_userip_q_release %nick WATCHDOG_RETRY
- 8227 unset %barna_ipdone. $+ %ln
- 8228 _barna_lookup_start %nick
- 8229 }
- 8230 else {
- 8231 _barna_dbg WHOIP watchdog sin retry por atasco: nick= %nick try= %try age= %age backlog= %backlog limit= %retry_limit
- 8232 _barna_userip_q_release %nick WATCHDOG_BACKLOG_TIMEOUT
- 8233 unset %barna_lookup. $+ %ln
- 8234 unset %barna_lookup_chans. $+ %ln
- 8235 unset %barna_qry. $+ %ln
- 8236 unset %barna_ipdone. $+ %ln
- 8237 unset %barna_userip_watchtry. $+ %ln
- 8238 }
- 8239 }
- 8240 else {
- 8241 _barna_dbg WHOIP watchdog agotado: nick= %nick try= %try age= %age
- 8242 _barna_userip_q_release %nick WATCHDOG_TIMEOUT
- 8243 unset %barna_lookup. $+ %ln
- 8244 unset %barna_lookup_chans. $+ %ln
- 8245 unset %barna_qry. $+ %ln
- 8246 unset %barna_ipdone. $+ %ln
- 8247 unset %barna_userip_watchtry. $+ %ln
- 8248 }
- 8249 }
- 8250
- 8251 if (%head > %tail) {
- 8252 unset %barna_userip_watch_q_head
- 8253 unset %barna_userip_watch_q_tail
- 8254 }
- 8255
- 8256 if ($_barna_userip_watch_q_count > 0) {
- 8257 _barna_userip_watchdog_schedule
- 8258 }
- 8259 else {
- 8260 unset %barna_userip_watch_q_head
- 8261 unset %barna_userip_watch_q_tail
- 8262 }
- 8263}
- 8264
- 8265alias _barna_userip_slow_retry_schedule {
- 8266 if ($1 == $null) return
- 8267
- 8268 ; Modo conservador anti-lag: sin reintentos lentos.
- 8269 _barna_dbg WHOIP lento omitido por modo conservador: nick= $1 reason= $2-
- 8270}
- 8271
- 8272alias _barna_userip_slow_retry_now {
- 8273 if ($1 == $null) return
- 8274
- 8275 ; Modo conservador anti-lag: no reencola WHOIP desde timer lento.
- 8276}
- 8277
- 8278alias _barna_lookup_start {
- 8279 if ($1 == $null) return
- 8280
- 8281 var %nick = $1
- 8282 var %ln = $lower(%nick)
- 8283 var %chans = $_barna_seen_get(%nick)
- 8284 var %ttl = $_barna_userip_ttl
- 8285
- 8286 if ($_barna_is_join_exception(%nick)) {
- 8287 _barna_dbg EXCEPTIONSAFE no inicia LOOKUP/WHOIP: nick= %nick
- 8288 _barna_exception_cleanup_nick %nick
- 8289 return
- 8290 }
- 8291
- 8292 if ($_barna_is_privileged_nick(%nick)) {
- 8293 _barna_dbg PRIVSAFE no inicia LOOKUP/WHOIP por @/+v: nick= %nick
- 8294 _barna_privileged_cleanup_nick %nick LOOKUP_START
- 8295 return
- 8296 }
- 8297
- 8298 if (%chans == $null) return
- 8299
- 8300 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 8301 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 8302 set $+(-u,%ttl) %barna_userip_retry. $+ %ln 0
- 8303 set $+(-u,%ttl) %barna_qry. $+ %ln 1
- 8304 unset %barna_ipdone. $+ %ln
- 8305
- 8306 _barna_lookup_timer_off %nick
- 8307
- 8308 _barna_dbg LOOKUP start WHOIP en cola: nick= %nick chans= %chans
- 8309
- 8310 _barna_userip_q_add %nick
- 8311}
- 8312
- 8313alias _barna_lookup_retry {
- 8314 if ($1 == $null) return
- 8315
- 8316 ; Modo conservador anti-lag: sin reintentos automaticos de WHOIP.
- 8317 ; Reintentar por timer fue una de las causas de acumulación y lag.
- 8318 _barna_userip_q_release $1 RETRY_DISABLED
- 8319}
- 8320
- 8321alias _barna_ip_found {
- 8322 if ($1 == $null) return
- 8323 if ($2 == $null) return
- 8324
- 8325 var %nick = $1
- 8326 var %ip = $2
- 8327 var %src = $3
- 8328 var %ln = $lower(%nick)
- 8329
- 8330 if ($_barna_is_join_exception(%nick)) {
- 8331 _barna_dbg EXCEPTIONSAFE IP_FOUND ignora nick exceptuado: nick= %nick ip= %ip src= %src
- 8332 _barna_exception_cleanup_nick %nick
- 8333 return
- 8334 }
- 8335
- 8336 if ($_barna_is_privileged_nick(%nick)) {
- 8337 _barna_dbg PRIVSAFE IP_FOUND ignora nick con @/+v: nick= %nick ip= %ip src= %src
- 8338 _barna_privileged_cleanup_nick %nick IP_FOUND
- 8339 return
- 8340 }
- 8341
- 8342 _barna_lookup_timer_off %nick
- 8343
- 8344 var %slowt = [ [ $+(%,barna_userip_slow_timer.,%ln) ] ]
- 8345 if (%slowt != $null) .timer $+ %slowt off
- 8346 unset %barna_userip_slow_retry. $+ %ln
- 8347 unset %barna_userip_slow_timer. $+ %ln
- 8348
- 8349 if (!$_barna_is_ipv4(%ip)) {
- 8350 _barna_dbg IP ignorada no IPv4: nick= %nick ip= %ip src= %src
- 8351 _barna_userip_q_release %nick IP_NO_IPV4
- 8352 unset %barna_lookup. $+ %ln
- 8353 unset %barna_lookup_chans. $+ %ln
- 8354 unset %barna_qry. $+ %ln
- 8355 unset %barna_ipdone. $+ %ln
- 8356 unset %barna_userip_retry. $+ %ln
- 8357 unset %barna_userip_sent_ts. $+ %ln
- 8358 unset %barna_userip_watchtry. $+ %ln
- 8359 return
- 8360 }
- 8361
- 8362 _barna_ip_store %nick %ip
- 8363 var %ida = [ [ $+(%,barna_q_active.,%ln) ] ]
- 8364 var %idp = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 8365
- 8366 var %chans = $_barna_seen_get(%nick)
- 8367
- 8368 if (%chans == $null) {
- 8369 var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 8370 }
- 8371
- 8372 if (%chans == $null) && (%ida != $null) {
- 8373 var %chans = [ [ $+(%,barna_q_chans.,%ida) ] ]
- 8374 }
- 8375
- 8376 if (%chans == $null) && (%idp != $null) {
- 8377 var %chans = [ [ $+(%,barna_q_chans.,%idp) ] ]
- 8378 }
- 8379
- 8380 if (%chans == $null) {
- 8381 _barna_dbg IP encontrada sin canales, ignoro: nick= %nick ip= %ip src= %src
- 8382 _barna_userip_q_release %nick IP_SIN_CANALES
- 8383 unset %barna_lookup. $+ %ln
- 8384 unset %barna_lookup_chans. $+ %ln
- 8385 unset %barna_qry. $+ %ln
- 8386 unset %barna_ipdone. $+ %ln
- 8387 unset %barna_userip_retry. $+ %ln
- 8388 unset %barna_userip_sent_ts. $+ %ln
- 8389 unset %barna_userip_watchtry. $+ %ln
- 8390 return
- 8391 }
- 8392
- 8393 set -u60 %barna_lookup_chans. $+ %ln %chans
- 8394
- 8395 ; Build 83:
- 8396 ; Si la IP ya tiene cache ASN/ISP, aplicamos cache inmediatamente y
- 8397 ; cerramos el estado WHOIP. Esto evita retrasos donde /barna.trace muestra
- 8398 ; last_ip + cache_asn pero sigue en WHOIP_enviado_o_esperando_RAW354.
- 8399 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 8400 _barna_dbg FASTCACHE en IP_FOUND: nick= %nick ip= %ip src= %src chans= %chans
- 8401
- 8402 _barna_userip_q_release %nick FASTCACHE_IP_FOUND
- 8403 unset %barna_lookup. $+ %ln
- 8404 unset %barna_lookup_chans. $+ %ln
- 8405 unset %barna_qry. $+ %ln
- 8406 unset %barna_ipdone. $+ %ln
- 8407 unset %barna_userip_retry. $+ %ln
- 8408 unset %barna_userip_sent_ts. $+ %ln
- 8409 unset %barna_userip_watchtry. $+ %ln
- 8410 unset %barna_userip_sent_recent. $+ %ln
- 8411 return
- 8412 }
- 8413
- 8414 if ([ [ $+(%,barna_ipdone.,%ln) ] ] == 1) {
- 8415 if (%ida != $null) {
- 8416 set -u90 %barna_q_chans. $+ %ida %chans
- 8417 _barna_dbg IP duplicada con consulta activa, actualizo canales: nick= %nick ip= %ip src= %src id= %ida chans= %chans
- 8418 return
- 8419 }
- 8420
- 8421 if (%idp != $null) {
- 8422 set -u120 %barna_q_ip. $+ %idp %ip
- 8423 set -u90 %barna_q_chans. $+ %idp %chans
- 8424 set -u120 %barna_q_ts. $+ %idp $ctime
- 8425 _barna_dbg IP duplicada con consulta pendiente, actualizo y proceso: nick= %nick ip= %ip src= %src id= %idp chans= %chans
- 8426 _barna_q_schedule 1
- 8427 return
- 8428 }
- 8429
- 8430 _barna_dbg IP duplicada pero sin cola activa/pendiente, reencolo ASN: nick= %nick ip= %ip src= %src chans= %chans
- 8431 unset %barna_ipdone. $+ %ln
- 8432 _barna_q_add %nick %ip %chans
- 8433 return
- 8434 }
- 8435
- 8436 set -u30 %barna_ipdone. $+ %ln 1
- 8437
- 8438 _barna_dbg IP encontrada: nick= %nick ip= %ip src= %src chans= %chans
- 8439
- 8440 if ($_barna_ip_known_bad_prefix(%ip,%chans)) {
- 8441 _barna_bad_prefix_punish %nick %ip %src %chans
- 8442 _barna_lookup_timer_off %nick
- 8443 _barna_userip_q_release %nick BADPFX_LOW_ASN
- 8444 unset %barna_lookup. $+ %ln
- 8445 unset %barna_lookup_chans. $+ %ln
- 8446 unset %barna_qry. $+ %ln
- 8447 unset %barna_ipdone. $+ %ln
- 8448 unset %barna_userip_retry. $+ %ln
- 8449 unset %barna_userip_sent_ts. $+ %ln
- 8450 unset %barna_userip_watchtry. $+ %ln
- 8451 _barna_q_add_low %nick %ip %chans
- 8452 return
- 8453 }
- 8454
- 8455 unset %barna_userip_sent_ts. $+ %ln
- 8456 unset %barna_userip_watchtry. $+ %ln
- 8457 _barna_userip_q_release %nick IP_OK
- 8458 _barna_q_clear_ghost_light
- 8459 _barna_q_add %nick %ip %chans
- 8460 _barna_q_process
- 8461 _barna_asn_pump_start_if_needed
- 8462}
- 8463
- 8464; ------------------------------------------------------------
- 8465; BLOQUE 8
- 8466; JOIN
- 8467; ------------------------------------------------------------
- 8468
- 8469; JOINONLY_DELAYSAFE: solo se consulta por JOIN real, con delay.
- 8470; Build 115: elimina AUTONICKSCAN/nicklist rescan. El JOIN programa
- 8471; una espera corta; si el nick recibe +v/@/%/&/~ o es excepcion, se cancela todo.
- 8472; ------------------------------------------------------------
- 8473
- 8474alias _barna_join_delay_timer_name {
- 8475 if ($1 == $null) return
- 8476 return BarnaJoinDelay_ $+ $md5($lower($1),0)
- 8477}
- 8478
- 8479; Build 115: contador ligero de JOIN delay.
- 8480; Contamos %barna_join_delay_chan.* porque ya no guardamos nick/timer/chans por cada JOIN.
- 8481alias _barna_join_delay_count {
- 8482 return $var(%barna_join_delay_chan.*,0)
- 8483}
- 8484
- 8485; Build 115: GC ligero para evitar que un flood de JOIN deje muchas variables
- 8486; de delay si algun timer no llega a disparar o el nick ya no esta.
- 8487
- 8488; Build 122: si entran muchos JOIN, no esperamos a que todos los timers de 4s/2s
- 8489; venzan uno por uno. Bajo presion, procesa anticipadamente un lote pequeno de JOIN_DELAY
- 8490; ya maduros. No cancela consultas: llama a _barna_join_delay_fire y apaga su timer para evitar duplicados.
- 8491alias _barna_join_delay_pressure_tick {
- 8492 if (%barna_addon != 1) return 0
- 8493
- 8494 var %total = $_barna_join_delay_count
- 8495 if (%total <= 0) return 0
- 8496
- 8497 var %th = %barna_join_delay_fast_threshold
- 8498 if (%th !isnum 1-) var %th = 35
- 8499 if (%total < %th) return 0
- 8500
- 8501 var %batch = %barna_join_delay_fast_batch
- 8502 if (%batch !isnum 1-) var %batch = 10
- 8503 if (%batch > 28) var %batch = 28
- 8504
- 8505 var %age = %barna_join_delay_fast_age
- 8506 if (%age !isnum 1-) var %age = 2
- 8507
- 8508 var %now = $ctime
- 8509 var %i = $var(%barna_join_delay_chan.*,0)
- 8510 var %done = 0
- 8511 var %prefix = $+(%,barna_join_delay_chan.)
- 8512
- 8513 while ((%i >= 1) && (%done < %batch)) {
- 8514 var %v = $var(%barna_join_delay_chan.*,%i)
- 8515 var %ln = $right(%v,-$len(%prefix))
- 8516 var %ts = [ [ $+(%,barna_join_delay_ts.,%ln) ] ]
- 8517 var %nick = [ [ $+(%,barna_join_delay_nick.,%ln) ] ]
- 8518 if (%nick == $null) var %nick = %ln
- 8519
- 8520 if (%ts !isnum) var %ts = 0
- 8521
- 8522 if ($calc(%now - %ts) >= %age) {
- 8523 var %timer = $_barna_join_delay_timer_name(%nick)
- 8524 if (%timer != $null) .timer $+ %timer off
- 8525 _barna_join_delay_fire %nick
- 8526 inc %done
- 8527 }
- 8528
- 8529 dec %i
- 8530 }
- 8531
- 8532 if (%done > 0) _barna_dbg JOIN_DELAY_PRESSURE procesados= %done restantes= $_barna_join_delay_count total_inicial= %total th= %th age= %age
- 8533 return %done
- 8534}
- 8535
- 8536alias _barna_join_delay_gc_tick {
- 8537 if (%barna_addon != 1) return
- 8538
- 8539 var %total = $_barna_join_delay_count
- 8540 if (%total <= 0) return
- 8541
- 8542 var %age = %barna_join_delay_gc_age
- 8543 if (%age !isnum 8-60) var %age = 18
- 8544
- 8545 var %max = %barna_join_delay_max_pending
- 8546 if (%max !isnum 40-200) var %max = 120
- 8547
- 8548 var %now = $ctime
- 8549 var %i = $var(%barna_join_delay_chan.*,0)
- 8550 var %cleaned = 0
- 8551 var %prefix = $+(%,barna_join_delay_chan.)
- 8552
- 8553 while (%i >= 1) {
- 8554 var %v = $var(%barna_join_delay_chan.*,%i)
- 8555 var %ln = $right(%v,-$len(%prefix))
- 8556 var %ts = [ [ $+(%,barna_join_delay_ts.,%ln) ] ]
- 8557 var %nick = %ln
- 8558
- 8559 if (%ts !isnum) var %ts = 0
- 8560
- 8561 if (($calc(%now - %ts) > %age) || ($_barna_join_delay_count > %max)) {
- 8562 _barna_join_delay_cancel %nick JOIN_DELAY_GC
- 8563 inc %cleaned
- 8564 }
- 8565
- 8566 dec %i
- 8567 }
- 8568
- 8569 if (%cleaned > 0) _barna_dbg JOIN_DELAY_GC limpiados= %cleaned restantes= $_barna_join_delay_count max= %max age= %age
- 8570}
- 8571
- 8572alias _barna_join_delay_cancel {
- 8573 if ($1 == $null) return
- 8574
- 8575 var %nick = $1
- 8576 var %reason = $2-
- 8577 var %ln = $lower(%nick)
- 8578 var %timer = [ [ $+(%,barna_join_delay_timer.,%ln) ] ]
- 8579
- 8580 if (%timer == $null) var %timer = $_barna_join_delay_timer_name(%nick)
- 8581 if (%timer != $null) .timer $+ %timer off
- 8582
- 8583 unset %barna_join_delay_timer. $+ %ln
- 8584 unset %barna_join_delay_nick. $+ %ln
- 8585 unset %barna_join_delay_chan. $+ %ln
- 8586 unset %barna_join_delay_chans. $+ %ln
- 8587 unset %barna_join_delay_ts. $+ %ln
- 8588
- 8589 if (%reason != $null) _barna_dbg JOIN_DELAY cancelado: nick= %nick reason= %reason
- 8590}
- 8591
- 8592alias _barna_join_delay_schedule {
- 8593 if ($1 == $null) return
- 8594
- 8595 var %nick = $1
- 8596 var %chan = $_barna_chan_name_clean($2)
- 8597 var %ln = $lower(%nick)
- 8598
- 8599 if (%nick == $me) return
- 8600 if ($_barna_is_join_exception(%nick)) {
- 8601 _barna_dbg EXCEPTIONSAFE JOIN_DELAY no programa por excepcion: nick= %nick canal= %chan
- 8602 _barna_exception_cleanup_nick %nick
- 8603 return
- 8604 }
- 8605
- 8606 if ($_barna_is_privileged_nick(%nick)) {
- 8607 _barna_dbg PRIVSAFE JOIN_DELAY no programa por @/+v: nick= %nick canal= %chan
- 8608 _barna_privileged_cleanup_nick %nick JOIN_DELAY_ALREADY_PRIV
- 8609 return
- 8610 }
- 8611
- 8612 if ((%chan == $null) || (!$_barna_is_chan_enabled(%chan))) return
- 8613
- 8614 var %chans = $_barna_nick_enabled_chans(%nick)
- 8615 if (%chans == $null) var %chans = $_barna_chan_list_clean_enabled(%chan)
- 8616 if (%chans == $null) return
- 8617
- 8618 var %delay = %barna_join_delay_secs
- 8619 if (%delay !isnum 1-10) var %delay = 4
- 8620
- 8621 ; Build 115: antes de programar, purgamos delays viejos y usamos
- 8622 ; solo 2 variables por nick: chan + ts. El timer se puede recomputar.
- 8623 noop $_barna_join_delay_gc_tick
- 8624
- 8625 var %timer = $_barna_join_delay_timer_name(%nick)
- 8626 set -u30 %barna_join_delay_chan. $+ %ln %chan
- 8627 set -u30 %barna_join_delay_nick. $+ %ln %nick
- 8628 set -u30 %barna_join_delay_ts. $+ %ln $ctime
- 8629
- 8630 ; Compatibilidad: si venimos de builds 114/113, eliminar variables pesadas antiguas.
- 8631 unset %barna_join_delay_timer. $+ %ln
- 8632 unset %barna_join_delay_nick. $+ %ln
- 8633 unset %barna_join_delay_chans. $+ %ln
- 8634
- 8635 .timer $+ %timer off
- 8636 .timer $+ %timer 1 %delay _barna_join_delay_fire %nick
- 8637
- 8638 _barna_dbg JOIN_DELAY programado LIGHT: nick= %nick canal= %chan chans= %chans delay= %delay pending= $_barna_join_delay_count
- 8639}
- 8640
- 8641alias _barna_join_delay_fire {
- 8642 if ($1 == $null) return
- 8643 if (%barna_addon != 1) return
- 8644
- 8645 var %nick = $1
- 8646 var %ln = $lower(%nick)
- 8647 var %chan = [ [ $+(%,barna_join_delay_chan.,%ln) ] ]
- 8648 var %chans = $_barna_nick_enabled_chans(%nick)
- 8649
- 8650 ; Build 122: si un timer antiguo dispara tras haber sido procesado por PRESSURE, no duplicar.
- 8651 if (%chan == $null) {
- 8652 unset %barna_join_delay_timer. $+ %ln
- 8653 unset %barna_join_delay_nick. $+ %ln
- 8654 unset %barna_join_delay_chans. $+ %ln
- 8655 unset %barna_join_delay_ts. $+ %ln
- 8656 return
- 8657 }
- 8658
- 8659 unset %barna_join_delay_timer. $+ %ln
- 8660 unset %barna_join_delay_nick. $+ %ln
- 8661 unset %barna_join_delay_chans. $+ %ln
- 8662 unset %barna_join_delay_ts. $+ %ln
- 8663
- 8664 if ($_barna_is_join_exception(%nick)) {
- 8665 _barna_dbg EXCEPTIONSAFE JOIN_DELAY vence pero nick es excepcion: nick= %nick
- 8666 _barna_exception_cleanup_nick %nick
- 8667 unset %barna_join_delay_chan. $+ %ln
- 8668 return
- 8669 }
- 8670
- 8671 if (%chans == $null) {
- 8672 _barna_dbg JOIN_DELAY vence pero nick ya no esta en canal activo: nick= %nick
- 8673 _barna_cleanup_leave %nick
- 8674 unset %barna_join_delay_chan. $+ %ln
- 8675 return
- 8676 }
- 8677
- 8678 if ($_barna_is_privileged_nick(%nick)) {
- 8679 _barna_dbg PRIVSAFE JOIN_DELAY vence y nick ya tiene @/+v: nick= %nick chans= %chans
- 8680 _barna_privileged_cleanup_nick %nick JOIN_DELAY_PRIV
- 8681 unset %barna_join_delay_chan. $+ %ln
- 8682 return
- 8683 }
- 8684
- 8685 if ((%chan == $null) || (!$istok(%chans,%chan,44))) var %chan = $gettok(%chans,1,44)
- 8686 unset %barna_join_delay_chan. $+ %ln
- 8687
- 8688 _barna_join_process_now %nick %chan
- 8689}
- 8690
- 8691alias _barna_join_process_now {
- 8692 if ($1 == $null) return
- 8693 if (%barna_addon != 1) return
- 8694
- 8695 var %nick = $1
- 8696 var %chan = $_barna_chan_name_clean($2)
- 8697 var %ln = $lower(%nick)
- 8698
- 8699 if ((%chan == $null) || (!$_barna_is_chan_enabled(%chan))) return
- 8700
- 8701 if ($_barna_is_join_exception(%nick)) {
- 8702 _barna_dbg EXCEPTIONSAFE JOIN omitido por excepcion: nick= %nick canal= %chan
- 8703 _barna_exception_cleanup_nick %nick
- 8704 return
- 8705 }
- 8706
- 8707 if ($_barna_is_privileged_nick(%nick)) {
- 8708 _barna_dbg PRIVSAFE JOIN omitido por @/+v: nick= %nick canal= %chan
- 8709 _barna_privileged_cleanup_nick %nick JOIN_PROCESS
- 8710 return
- 8711 }
- 8712
- 8713 unset %barna_abort. $+ %ln
- 8714 unset %barna_privileged. $+ %ln
- 8715
- 8716 ; Build 115 JOINDELAY_LIGHTGC:
- 8717 ; Esta parte solo se ejecuta cuando vence el delay de un JOIN real.
- 8718 ; No viene de AUTONICKSCAN ni de recorrer nicklist.
- 8719 var %chans = $_barna_nick_enabled_chans(%nick)
- 8720 if (%chans == $null) var %chans = $_barna_chan_list_clean_enabled(%chan)
- 8721 if (%chans == $null) return
- 8722
- 8723 ; Si ya conocemos IP+cache del nick, avisar/aplicar sin reconsultar.
- 8724 var %lastip = $_barna_ip_get(%nick)
- 8725 if (%lastip != $null) {
- 8726 if ($_barna_asn_cache_apply(%nick,%lastip,%chans)) {
- 8727 _barna_dbg JOIN usa cache ASN de nick ya conocido: nick= %nick ip= %lastip canal= %chan chans= %chans
- 8728 return
- 8729 }
- 8730 }
- 8731
- 8732 if ([ [ $+(%,barna_badnick.,%ln) ] ] == 1) {
- 8733 var %badip = [ [ $+(%,barna_badnick_ip.,%ln) ] ]
- 8734 var %badscope = [ [ $+(%,barna_badnick_chans.,%ln) ] ]
- 8735 var %livechans = $_barna_nick_enabled_chans(%nick)
- 8736
- 8737 if (%livechans == $null) var %livechans = $_barna_chan_list_clean_enabled(%chan)
- 8738
- 8739 var %matchchans = $_barna_chan_list_intersect_enabled(%livechans,%badscope)
- 8740
- 8741 if (%matchchans == $null) {
- 8742 _barna_dbg JOIN badnick ignorado por scope de canal: nick= %nick ip= %badip canal= %chan live= %livechans badscope= %badscope seen= %chans
- 8743 }
- 8744 else {
- 8745 if ($_barna_is_privileged_nick(%nick)) {
- 8746 _barna_dbg PRIVSAFE JOIN badnick cancelado por @/+v tras delay: nick= %nick ip= %badip canal= %chan
- 8747 _barna_privileged_cleanup_nick %nick JOIN_BADNICK_PRIV
- 8748 return
- 8749 }
- 8750
- 8751 _barna_dbg JOIN nick marcado como ASN positivo reciente en canal scope, SHUN inmediato y SAQUIT diferido: nick= %nick ip= %badip canal= %chan chans= %matchchans badscope= %badscope
- 8752
- 8753 if (%badip != $null) _barna_shun_ip %badip Molestias en Canales (A)
- 8754 _barna_shun_nick %nick Molestias en Canales (A)
- 8755
- 8756 if (%badip != $null) {
- 8757 var %msg_badnick = El usuario $chr(2) $+ %nick $+ $chr(15) (IP: $+ $chr(2) $+ %badip $+ $chr(15) $+ ) coincide con un nick cazado recientemente por ASN positivo
- 8758 }
- 8759 else {
- 8760 var %msg_badnick = El usuario $chr(2) $+ %nick $+ $chr(15) (IP: desconocida) coincide con un nick cazado recientemente por ASN positivo
- 8761 }
- 8762
- 8763 set -u900 %barna_hunted. $+ %ln 1
- 8764 set -u900 %barna_saquit_showchans. $+ %ln $replace(%matchchans,$chr(44),$+(,$chr(32)))
- 8765 set -u900 %barna_saquit_msg. $+ %ln %msg_badnick
- 8766
- 8767 if (%badip != $null) _barna_dbg Parseline2 pendiente hasta QUIT por badnick: nick= %nick ip= %badip chans= %matchchans
- 8768 if (%badip != $null) _barna_schedule_delayed_saquit %nick %badip %matchchans
- 8769 }
- 8770 }
- 8771
- 8772 if ([ [ $+(%,barna_qry.,%ln) ] ] != $null) {
- 8773 var %ttl = $_barna_userip_ttl
- 8774
- 8775 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 8776 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 8777
- 8778 var %ida = [ [ $+(%,barna_q_active.,%ln) ] ]
- 8779 var %idp = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 8780
- 8781 if (%ida != $null) {
- 8782 set -u90 %barna_q_chans. $+ %ida %chans
- 8783 _barna_dbg JOIN ya en lookup, actualizo canales consulta activa: nick= %nick canal= %chan chans= %chans id= %ida
- 8784 return
- 8785 }
- 8786
- 8787 if (%idp != $null) {
- 8788 set -u90 %barna_q_chans. $+ %idp %chans
- 8789 _barna_dbg JOIN ya en lookup, actualizo canales consulta pendiente: nick= %nick canal= %chan chans= %chans id= %idp
- 8790 _barna_q_schedule 1
- 8791 return
- 8792 }
- 8793
- 8794 if ([ [ $+(%,barna_ipdone.,%ln) ] ] != 1) {
- 8795 _barna_dbg JOIN ya en lookup, actualizo cola WHOIP: nick= %nick canal= %chan chans= %chans
- 8796 _barna_userip_q_add %nick
- 8797 return
- 8798 }
- 8799
- 8800 _barna_dbg JOIN ya en lookup pero sin cola activa, relanzo WHOIP: nick= %nick canal= %chan chans= %chans
- 8801
- 8802 unset %barna_ipdone. $+ %ln
- 8803 _barna_lookup_start %nick
- 8804 return
- 8805 }
- 8806
- 8807 var %ttl2 = $_barna_userip_ttl
- 8808 set $+(-u,%ttl2) %barna_qry. $+ %ln 1
- 8809
- 8810 _barna_dbg JOIN_DELAY ok tras espera: nick= %nick canal= %chan -> WHOIP
- 8811
- 8812 _barna_lookup_start %nick
- 8813}
- 8814
- 8815on *:JOIN:#:{
- 8816 if (%barna_addon != 1) halt
- 8817 if (!$_barna_is_chan_enabled($chan)) halt
- 8818
- 8819 if ($_barna_is_join_exception($nick)) {
- 8820 _barna_dbg EXCEPTIONSAFE JOIN omitido por excepcion: nick= $nick canal= $chan
- 8821 _barna_exception_cleanup_nick $nick
- 8822 halt
- 8823 }
- 8824
- 8825 if ($_barna_is_privileged_nick($nick)) {
- 8826 _barna_dbg PRIVSAFE JOIN omitido por @/+v: nick= $nick canal= $chan
- 8827 _barna_privileged_cleanup_nick $nick JOIN
- 8828 halt
- 8829 }
- 8830
- 8831 ; Build 115: no consultar inmediatamente. Esperar por si el nick recibe +v/@.
- 8832 _barna_join_delay_schedule $nick $chan
- 8833}
- 8834
- 8835; ------------------------------------------------------------
- 8836; BLOQUE 9A
- 8837; WHOIP / RAW354
- 8838; Build 86: RAW354IPNICK. RAW354 se acepta si trae IP + nick consultado esperado; nunca por FIFO ambiguo.
- 8839; ------------------------------------------------------------
- 8840
- 8841alias -l _barna_whoip_clean_tok {
- 8842 if ($1 == $null) return
- 8843
- 8844 var %t = $1
- 8845
- 8846 while ($left(%t,1) == :) {
- 8847 var %t = $right(%t,-1)
- 8848 }
- 8849
- 8850 return %t
- 8851}
- 8852
- 8853alias -l _barna_whoip_is_expected_nick {
- 8854 if ($1 == $null) return 0
- 8855
- 8856 var %ln = $lower($1)
- 8857
- 8858 ; Build 89:
- 8859 ; No basta con lookup/qry para aceptar un RAW354. Esos estados pueden quedar
- 8860 ; vivos tras cambios de nick, quits o rescates, y aceptar por ahi permite
- 8861 ; duplicados/cruces. Solo aceptamos RAW354 de un nick que esta realmente
- 8862 ; inflight o de una consulta manual activa.
- 8863 if ([ [ $+(%,barna_manual_userip.,%ln) ] ] == 1) return 1
- 8864 if ([ [ $+(%,barna_manual_wait.,%ln) ] ] == 1) return 1
- 8865
- 8866 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) {
- 8867 if ($_barna_nick_enabled_chans($1) != $null) return 1
- 8868 _barna_dbg RAW354 esperado pero nick ya no online en canal activo, limpio inflight: nick= $1
- 8869 _barna_userip_q_release $1 RAW354_EXPECTED_OFFLINE
- 8870 unset %barna_lookup. $+ %ln
- 8871 unset %barna_lookup_chans. $+ %ln
- 8872 unset %barna_qry. $+ %ln
- 8873 unset %barna_ipdone. $+ %ln
- 8874 return 0
- 8875 }
- 8876
- 8877 return 0
- 8878}
- 8879
- 8880alias -l _barna_whoip_315_inc {
- 8881 var %ttl = $_barna_userip_ttl
- 8882 var %p = %barna_whoip_315_pending
- 8883
- 8884 if (%ttl !isnum 30-) var %ttl = 90
- 8885 if (%p !isnum 1-) var %p = 0
- 8886
- 8887 inc %p
- 8888 set $+(-u,%ttl) %barna_whoip_315_pending %p
- 8889}
- 8890
- 8891alias -l _barna_whoip_315_dec {
- 8892 var %p = %barna_whoip_315_pending
- 8893
- 8894 if (%p !isnum 1-) return 0
- 8895
- 8896 dec %p
- 8897
- 8898 if (%p <= 0) unset %barna_whoip_315_pending
- 8899 else set -u90 %barna_whoip_315_pending %p
- 8900
- 8901 return 1
- 8902}
- 8903
- 8904alias -l _barna_whoip_315_done_inc {
- 8905 var %ttl = $_barna_userip_ttl
- 8906 var %p = %barna_whoip_315_done_pending
- 8907
- 8908 if (%ttl !isnum 30-) var %ttl = 90
- 8909 if (%p !isnum 1-) var %p = 0
- 8910
- 8911 inc %p
- 8912 set $+(-u,%ttl) %barna_whoip_315_done_pending %p
- 8913}
- 8914
- 8915alias -l _barna_whoip_315_done_dec {
- 8916 var %p = %barna_whoip_315_done_pending
- 8917
- 8918 if (%p !isnum 1-) return 0
- 8919
- 8920 dec %p
- 8921
- 8922 if (%p <= 0) unset %barna_whoip_315_done_pending
- 8923 else set -u90 %barna_whoip_315_done_pending %p
- 8924
- 8925 return 1
- 8926}
- 8927
- 8928alias -l _barna_whoip_fifo_add {
- 8929 if ($1 == $null) return 0
- 8930
- 8931 var %nick = $1
- 8932 var %ln = $lower(%nick)
- 8933 var %ttl = $_barna_userip_ttl
- 8934 var %tail = %barna_whoip_fifo_tail
- 8935
- 8936 if (%ttl !isnum 30-) var %ttl = 90
- 8937 if (%tail == $null) var %tail = 0
- 8938
- 8939 inc %tail
- 8940 set -u300 %barna_whoip_fifo_tail %tail
- 8941
- 8942 if (%barna_whoip_fifo_head == $null) set -u300 %barna_whoip_fifo_head 1
- 8943
- 8944 set $+(-u,%ttl) %barna_whoip_fifo_item. $+ %tail %nick
- 8945 set $+(-u,%ttl) %barna_whoip_fifo_ln. $+ %tail %ln
- 8946 set $+(-u,%ttl) %barna_whoip_expect. $+ %ln 1
- 8947
- 8948 return 1
- 8949}
- 8950
- 8951alias -l _barna_whoip_fifo_count {
- 8952 var %head = %barna_whoip_fifo_head
- 8953 var %tail = %barna_whoip_fifo_tail
- 8954 var %guard = 0
- 8955 var %cnt = 0
- 8956
- 8957 if (%head == $null) return 0
- 8958 if (%tail == $null) return 0
- 8959
- 8960 while ((%head <= %tail) && (%guard < 400)) {
- 8961 inc %guard
- 8962
- 8963 if ([ [ $+(%,barna_whoip_fifo_item.,%head) ] ] != $null) inc %cnt
- 8964
- 8965 inc %head
- 8966 }
- 8967
- 8968 return %cnt
- 8969}
- 8970
- 8971alias -l _barna_whoip_fifo_pop {
- 8972 var %head = %barna_whoip_fifo_head
- 8973 var %tail = %barna_whoip_fifo_tail
- 8974 var %guard = 0
- 8975
- 8976 if (%head == $null) return
- 8977 if (%tail == $null) return
- 8978
- 8979 while ((%head <= %tail) && (%guard < 400)) {
- 8980 inc %guard
- 8981
- 8982 var %nick = [ [ $+(%,barna_whoip_fifo_item.,%head) ] ]
- 8983 var %ln = [ [ $+(%,barna_whoip_fifo_ln.,%head) ] ]
- 8984
- 8985 unset %barna_whoip_fifo_item. $+ %head
- 8986 unset %barna_whoip_fifo_ln. $+ %head
- 8987 set -u300 %barna_whoip_fifo_head $calc(%head + 1)
- 8988
- 8989 if (%nick != $null) {
- 8990 if (%ln == $null) var %ln = $lower(%nick)
- 8991 return %nick
- 8992 }
- 8993
- 8994 inc %head
- 8995 }
- 8996
- 8997 if (%head > %tail) {
- 8998 unset %barna_whoip_fifo_head
- 8999 unset %barna_whoip_fifo_tail
- 9000 }
- 9001}
- 9002
- 9003alias -l _barna_whoip_fifo_remove {
- 9004 if ($1 == $null) return 0
- 9005
- 9006 var %ln_find = $lower($1)
- 9007 var %head = %barna_whoip_fifo_head
- 9008 var %tail = %barna_whoip_fifo_tail
- 9009 var %guard = 0
- 9010
- 9011 if (%head == $null) return 0
- 9012 if (%tail == $null) return 0
- 9013
- 9014 while ((%head <= %tail) && (%guard < 400)) {
- 9015 inc %guard
- 9016
- 9017 var %nick = [ [ $+(%,barna_whoip_fifo_item.,%head) ] ]
- 9018 var %ln = [ [ $+(%,barna_whoip_fifo_ln.,%head) ] ]
- 9019
- 9020 if (%nick != $null) {
- 9021 if (%ln == $null) var %ln = $lower(%nick)
- 9022
- 9023 if (%ln == %ln_find) {
- 9024 unset %barna_whoip_fifo_item. $+ %head
- 9025 unset %barna_whoip_fifo_ln. $+ %head
- 9026 unset %barna_whoip_expect. $+ %ln_find
- 9027 return 1
- 9028 }
- 9029 }
- 9030
- 9031 inc %head
- 9032 }
- 9033
- 9034 return 0
- 9035}
- 9036
- 9037
- 9038alias -l _barna_whoip_token_make {
- 9039 ; Build 84:
- 9040 ; Token WHOX unico por consulta. Solo alfanumerico para usarlo como sufijo de variable.
- 9041 return $+(B,$ticks,$rand(100,999))
- 9042}
- 9043
- 9044alias -l _barna_whoip_token_store {
- 9045 if ($1 == $null) return 0
- 9046 if ($2 == $null) return 0
- 9047
- 9048 var %tok = $1
- 9049 var %nick = $2
- 9050 var %ln = $lower(%nick)
- 9051 var %ttl = $_barna_userip_ttl
- 9052
- 9053 if (%ttl !isnum 30-) var %ttl = 90
- 9054
- 9055 set $+(-u,%ttl) %barna_whoip_token_nick. $+ %tok %nick
- 9056 set $+(-u,%ttl) %barna_whoip_token_ln. $+ %tok %ln
- 9057 set $+(-u,%ttl) %barna_whoip_token_byln. $+ %ln %tok
- 9058 return 1
- 9059}
- 9060
- 9061alias -l _barna_whoip_token_find {
- 9062 if ($1- == $null) return
- 9063
- 9064 var %raw = $1-
- 9065 var %i = 1
- 9066
- 9067 while (%i <= $numtok(%raw,32)) {
- 9068 var %tok = $_barna_whoip_clean_tok($gettok(%raw,%i,32))
- 9069
- 9070 if (%tok != $null) {
- 9071 if ([ [ $+(%,barna_whoip_token_nick.,%tok) ] ] != $null) return %tok
- 9072 }
- 9073
- 9074 inc %i
- 9075 }
- 9076}
- 9077
- 9078alias -l _barna_whoip_token_remove {
- 9079 if ($1 == $null) return 0
- 9080
- 9081 var %tok = $1
- 9082 var %ln = [ [ $+(%,barna_whoip_token_ln.,%tok) ] ]
- 9083
- 9084 unset %barna_whoip_token_nick. $+ %tok
- 9085 unset %barna_whoip_token_ln. $+ %tok
- 9086
- 9087 if (%ln != $null) unset %barna_whoip_token_byln. $+ %ln
- 9088
- 9089 return 1
- 9090}
- 9091
- 9092alias -l _barna_whoip_token_remove_nick {
- 9093 if ($1 == $null) return 0
- 9094
- 9095 var %ln = $lower($1)
- 9096 var %tok = [ [ $+(%,barna_whoip_token_byln.,%ln) ] ]
- 9097
- 9098 if (%tok != $null) return $_barna_whoip_token_remove(%tok)
- 9099
- 9100 return 0
- 9101}
- 9102
- 9103
- 9104; ------------------------------------------------------------
- 9105; BLOQUE 8.9.2
- 9106; WHOIP fallback: USERIP si WHO no devuelve RAW354/IP
- 9107; ------------------------------------------------------------
- 9108
- 9109alias -l _barna_userip_fallback_send {
- 9110 if ($1 == $null) return 0
- 9111
- 9112 var %nick = $1
- 9113 var %reason = $2-
- 9114 var %ln = $lower(%nick)
- 9115 var %ttl = $_barna_userip_ttl
- 9116 var %chans = $_barna_nick_enabled_chans(%nick)
- 9117
- 9118 if (%ttl !isnum 30-) var %ttl = 90
- 9119 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 9120 if (%chans == $null) return 0
- 9121
- 9122 ; Evita bucles: un fallback por nick cada 45 segundos.
- 9123 if ([ [ $+(%,barna_userip_fallback_recent.,%ln) ] ] == 1) return 0
- 9124
- 9125 set -u45 %barna_userip_fallback_recent. $+ %ln 1
- 9126
- 9127 ; Liberamos solo el inflight WHO/RAW354, pero mantenemos lookup/qry para que RAW340
- 9128 ; pueda cerrar el ciclo con _barna_ip_found si USERIP devuelve IP.
- 9129 _barna_userip_q_release %nick USERIP_FALLBACK_FROM_ $+ %reason
- 9130
- 9131 set $+(-u,%ttl) %barna_lookup. $+ %ln 1
- 9132 set $+(-u,%ttl) %barna_lookup_chans. $+ %ln %chans
- 9133 set $+(-u,%ttl) %barna_qry. $+ %ln 1
- 9134 unset %barna_ipdone. $+ %ln
- 9135
- 9136 _barna_dbg USERIP FALLBACK enviado: nick= %nick chans= %chans reason= %reason
- 9137 .userip %nick
- 9138
- 9139 return 1
- 9140}
- 9141
- 9142alias -l _barna_whoip_next_fast {
- 9143 ; Build 79:
- 9144 ; Encadena el siguiente WHOIP justo al liberar el inflight actual.
- 9145 ; Mantiene 1 inflight real para no cruzar nick/IP, pero evita esperar
- 9146 ; al siguiente tick del timer cuando ya hay respuesta RAW354/315/401.
- 9147 if (%barna_addon != 1) return 0
- 9148 if (%barna_whoip_next_busy == 1) return 0
- 9149 if ($_barna_userip_q_count <= 0) return 0
- 9150
- 9151 var %running = %barna_userip_inflight_count
- 9152 if (%running == $null) var %running = 0
- 9153 if (%running > 0) return 0
- 9154
- 9155 set -u2 %barna_whoip_next_busy 1
- 9156 _barna_userip_q_process
- 9157 unset %barna_whoip_next_busy
- 9158 return 1
- 9159}
- 9160
- 9161alias -l _barna_whoip_send {
- 9162 if ($1 == $null) return 0
- 9163
- 9164 var %nick = $1
- 9165 var %ln = $lower(%nick)
- 9166 var %ttl = $_barna_userip_ttl
- 9167
- 9168 if (%ttl !isnum 30-) var %ttl = 90
- 9169
- 9170 ; Build 100: no bloquear por WHO actual vivo.
- 9171 ; El 99 dejaba la cola muda si current_ln no se liberaba rapido. Como RAW354 trae
- 9172 ; IP + nickConsultado, podemos enviar el siguiente WHO y mapear por nick inflight.
- 9173
- 9174 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] == 1) {
- 9175 _barna_dbg WHOIP SEND omitido por inflight existente: nick= %nick
- 9176 return 0
- 9177 }
- 9178
- 9179 ; Build 100: sin FIFO/token; RAW354 se valida por nick inflight esperado.
- 9180 ; Guardamos solo el nick actual para RAW315/401 y validamos RAW354 por inflight+nick.
- 9181 unset %barna_whoip_current_nick
- 9182 unset %barna_whoip_current_ln
- 9183 unset %barna_whoip_315_done_pending
- 9184
- 9185 set $+(-u,%ttl) %barna_whoip_current_nick %nick
- 9186 set $+(-u,%ttl) %barna_whoip_current_ln %ln
- 9187 noop $_barna_whoip_315_inc
- 9188
- 9189 set $+(-u,%ttl) %barna_userip_inflight. $+ %ln 1
- 9190 _barna_userip_inflight_inc
- 9191
- 9192 set $+(-u,%ttl) %barna_whoip_sent. $+ %ln 1
- 9193
- 9194 .raw -q WHO %nick $+(n,$chr(37),ni)
- 9195
- 9196 ; Build 116: watchdog automatico para WHO lanzado por JOIN/cola.
- 9197 ; Si no llega RAW354/IP, prueba USERIP fallback y finalmente limpia el estado
- 9198 ; para no dejar lookup/qry/sent_recent fantasma ni depender de /barna.trace.
- 9199 var %hk = $md5(%ln,0)
- 9200 var %tw = BarnaWHOIPChk_ $+ %hk
- 9201 var %wd = %barna_whoip_watchdog_secs
- 9202 if (%wd !isnum 5-) var %wd = 8
- 9203 .timer $+ %tw off
- 9204 .timer $+ %tw 1 %wd _barna_whoip_send_check %nick
- 9205
- 9206 return 1
- 9207}
- 9208
- 9209alias -l _barna_whoip_send_check {
- 9210 if ($1 == $null) return 0
- 9211
- 9212 var %nick = $1
- 9213 var %ln = $lower(%nick)
- 9214 var %chans = $_barna_nick_enabled_chans(%nick)
- 9215
- 9216 if ($_barna_is_join_exception(%nick)) {
- 9217 _barna_dbg EXCEPTIONSAFE WHOIP WATCHDOG omite nick exceptuado: nick= %nick
- 9218 _barna_exception_cleanup_nick %nick
- 9219 return 0
- 9220 }
- 9221
- 9222 if ($_barna_is_privileged_nick(%nick)) {
- 9223 _barna_dbg PRIVSAFE WHOIP WATCHDOG cancela por @/+v: nick= %nick
- 9224 _barna_privileged_cleanup_nick %nick WHOIP_WATCHDOG
- 9225 return 0
- 9226 }
- 9227
- 9228 if (%chans == $null) {
- 9229 _barna_dbg WHOIP WATCHDOG limpia offline/sin canal activo: nick= %nick
- 9230 _barna_userip_q_release %nick WHOIP_WATCHDOG_OFFLINE
- 9231 unset %barna_lookup. $+ %ln
- 9232 unset %barna_lookup_chans. $+ %ln
- 9233 unset %barna_qry. $+ %ln
- 9234 unset %barna_ipdone. $+ %ln
- 9235 unset %barna_userip_sent_recent. $+ %ln
- 9236 unset %barna_userip_fallback_recent. $+ %ln
- 9237 return 0
- 9238 }
- 9239
- 9240 if ($_barna_fast_asn_if_ip_ready(%nick,WHOIP_WATCHDOG_IP_READY)) return 1
- 9241
- 9242 var %ip = $_barna_ip_get(%nick)
- 9243 if (%ip != $null) {
- 9244 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 9245 _barna_dbg WHOIP WATCHDOG aplica cache: nick= %nick ip= %ip chans= %chans
- 9246 _barna_userip_q_release %nick WHOIP_WATCHDOG_CACHE
- 9247 unset %barna_lookup. $+ %ln
- 9248 unset %barna_lookup_chans. $+ %ln
- 9249 unset %barna_qry. $+ %ln
- 9250 unset %barna_ipdone. $+ %ln
- 9251 unset %barna_userip_sent_recent. $+ %ln
- 9252 return 1
- 9253 }
- 9254
- 9255 if ($_barna_trace_queue_find(%nick) == $null) {
- 9256 _barna_dbg WHOIP WATCHDOG envia IP a ASN: nick= %nick ip= %ip chans= %chans
- 9257 _barna_userip_q_release %nick WHOIP_WATCHDOG_IP_TO_ASN
- 9258 unset %barna_lookup. $+ %ln
- 9259 unset %barna_qry. $+ %ln
- 9260 unset %barna_ipdone. $+ %ln
- 9261 unset %barna_userip_sent_recent. $+ %ln
- 9262 _barna_q_add %nick %ip %chans
- 9263 _barna_q_process
- 9264 _barna_asn_pump_start_if_needed
- 9265 return 1
- 9266 }
- 9267 }
- 9268
- 9269 var %qid = $_barna_trace_queue_find(%nick)
- 9270 if (%qid == $null) {
- 9271 _barna_dbg WHOIP WATCHDOG sin IP/RAW354: nick= %nick chans= %chans
- 9272 _barna_userip_q_release %nick WHOIP_WATCHDOG_STALE_NO_RAW354
- 9273 unset %barna_whoip_current_nick
- 9274 unset %barna_whoip_current_ln
- 9275 unset %barna_whoip_315_done_pending
- 9276
- 9277 if ([ [ $+(%,barna_userip_fallback_recent.,%ln) ] ] != 1) {
- 9278 if ($_barna_userip_fallback_send(%nick,WHOIP_WATCHDOG_STALE_NO_RAW354)) {
- 9279 var %hk2 = $md5(%ln,0)
- 9280 var %tw2 = BarnaWHOIPChk_ $+ %hk2
- 9281 var %wd2 = %barna_whoip_watchdog_fallback_secs
- 9282 if (%wd2 !isnum 6-) var %wd2 = 10
- 9283 .timer $+ %tw2 1 %wd2 _barna_whoip_send_check %nick
- 9284 return 1
- 9285 }
- 9286 }
- 9287
- 9288 _barna_dbg WHOIP WATCHDOG limpia lookup/qry fantasma sin IP: nick= %nick chans= %chans
- 9289 _barna_userip_q_release %nick WHOIP_WATCHDOG_STUCK_CLEAN
- 9290 unset %barna_lookup. $+ %ln
- 9291 unset %barna_lookup_chans. $+ %ln
- 9292 unset %barna_qry. $+ %ln
- 9293 unset %barna_ipdone. $+ %ln
- 9294 unset %barna_userip_sent_recent. $+ %ln
- 9295 unset %barna_seen_rescue_recent. $+ %ln
- 9296 unset %barna_userip_fallback_recent. $+ %ln
- 9297 return 0
- 9298 }
- 9299
- 9300 return 0
- 9301}
- 9302
- 9303RAW 354:*:{
- 9304 if (%barna_addon != 1) return
- 9305
- 9306 var %raw = $1-
- 9307 var %ip
- 9308 var %nick
- 9309 var %i = 1
- 9310
- 9311 ; Build 86:
- 9312 ; Formato real observado en esta red:
- 9313 ; 354 : <mi_nick> <ip> <nick_consultado>
- 9314 ; Por tanto, cuando encontramos la IP preferimos el token posterior si
- 9315 ; corresponde a un nick esperado por el addon. Como compatibilidad,
- 9316 ; tambien aceptamos el token anterior si ese es el esperado.
- 9317 while (%i <= $numtok(%raw,32)) {
- 9318 var %tokraw = $_barna_whoip_clean_tok($gettok(%raw,%i,32))
- 9319
- 9320 if ($_barna_is_ipv4(%tokraw)) {
- 9321 var %ip = %tokraw
- 9322 var %nick_after
- 9323 var %nick_before
- 9324
- 9325 if (%i < $numtok(%raw,32)) {
- 9326 var %p_after = $calc(%i + 1)
- 9327 var %nick_after = $_barna_whoip_clean_tok($gettok(%raw,%p_after,32))
- 9328 }
- 9329
- 9330 if (%i > 1) {
- 9331 var %p_before = $calc(%i - 1)
- 9332 var %nick_before = $_barna_whoip_clean_tok($gettok(%raw,%p_before,32))
- 9333 }
- 9334
- 9335 if ($_barna_whoip_is_expected_nick(%nick_after)) var %nick = %nick_after
- 9336 elseif ($_barna_whoip_is_expected_nick(%nick_before)) var %nick = %nick_before
- 9337
- 9338 break
- 9339 }
- 9340
- 9341 inc %i
- 9342 }
- 9343
- 9344 ; Si no trae IP, no es respuesta ASN del addon. Dejar pasar para no romper
- 9345 ; WHOWAS/clones u otros WHOX manuales.
- 9346 if (%ip == $null) return
- 9347 if (%nick == $null) {
- 9348 _barna_dbg RAW354 RAW354IPNICK ignorado sin nick esperado: ip= %ip raw= %raw
- 9349 return
- 9350 }
- 9351
- 9352 var %ln = $lower(%nick)
- 9353
- 9354 ; Anti-cruce estricto:
- 9355 ; Solo aceptamos el RAW354 si el nick consultado que trae la linea esta
- 9356 ; esperado por el addon. Nunca asignamos por FIFO si el nick no coincide.
- 9357 if (!$_barna_whoip_is_expected_nick(%nick)) {
- 9358 _barna_dbg RAW354 RAW354IPNICK ignorado sin nick esperado: nick= %nick ip= %ip raw= %raw
- 9359 return
- 9360 }
- 9361
- 9362 ; Build 94: limpiar marcador inflight unico.
- 9363 unset %barna_whoip_current_nick
- 9364 unset %barna_whoip_current_ln
- 9365
- 9366 ; Este WHO ya obtuvo RAW354 con IP. El RAW315 posterior solo debe caparse.
- 9367 noop $_barna_whoip_315_done_inc
- 9368
- 9369 _barna_dbg RAW354 RAW354IPNICK recibido WHOIP: nick= %nick ip= %ip raw= %raw
- 9370
- 9371 if ([ [ $+(%,barna_manual_userip.,%ln) ] ] == 1) {
- 9372 var %uwin = [ [ $+(%,barna_manual_userip_win.,%ln) ] ]
- 9373 if (%uwin == $null) var %uwin = Status Window
- 9374 echo %uwin $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) WHOIP $chr(2) $+ %nick $+ $chr(15) -> $chr(2) $+ %ip $+ $chr(15)
- 9375 unset %barna_manual_userip. $+ %ln
- 9376 unset %barna_manual_userip_win. $+ %ln
- 9377 }
- 9378
- 9379 if ([ [ $+(%,barna_manual_wait.,%ln) ] ] == 1) {
- 9380 var %id = asnmanual_ $+ $ticks
- 9381 var %win = [ [ $+(%,barna_manual_win_nick.,%ln) ] ]
- 9382
- 9383 if (%win == $null) var %win = Status Window
- 9384
- 9385 unset %barna_manual_wait. $+ %ln
- 9386 unset %barna_manual_win_nick. $+ %ln
- 9387
- 9388 set -u30 %barna_manual_ip. $+ %id %ip
- 9389 set -u30 %barna_manual_win. $+ %id %win
- 9390 unset %barna_manual_asn. $+ %id
- 9391 unset %barna_manual_name. $+ %id
- 9392 unset %barna_manual_done. $+ %id
- 9393
- 9394 sockopen -e %id api.ipinfo.io 443
- 9395 _barna_userip_q_release %nick RAW354_RAW354IPNICK_MANUAL
- 9396 }
- 9397 else {
- 9398 _barna_ip_found %nick %ip RAW354_RAW354IPNICK
- 9399 }
- 9400
- 9401 haltdef
- 9402 halt
- 9403}
- 9404RAW 315:*:{
- 9405 if (%barna_addon != 1) return
- 9406
- 9407 if (%barna_whoip_315_pending isnum 1-) {
- 9408 noop $_barna_whoip_315_dec
- 9409
- 9410 ; Build 79:
- 9411 ; Si este 315 corresponde a un WHO que ya tuvo RAW354, solo lo capamos.
- 9412 ; Importante: al encadenar rapido, el siguiente WHO puede estar ya en FIFO.
- 9413 ; No debemos liberar ese FIFO con el 315 tardio del WHO anterior.
- 9414 if ($_barna_whoip_315_done_dec) {
- 9415 haltdef
- 9416 halt
- 9417 }
- 9418
- 9419 ; Si termina el WHO y no hemos recibido RAW354 con IP, liberamos el unico
- 9420 ; inflight pendiente. Build 94: usar marcador current, no FIFO.
- 9421 var %nick = %barna_whoip_current_nick
- 9422
- 9423 if (%nick != $null) {
- 9424 var %ln = $lower(%nick)
- 9425
- 9426 ; Build 102:
- 9427 ; Si WHO termina sin RAW354/IP, no damos el nick por perdido inmediatamente.
- 9428 ; Probamos USERIP una vez como fallback; RAW340 ya esta soportado por el addon.
- 9429 if ($_barna_userip_fallback_send(%nick,RAW315_NO_RAW354)) {
- 9430 unset %barna_whoip_current_nick
- 9431 unset %barna_whoip_current_ln
- 9432 haltdef
- 9433 halt
- 9434 }
- 9435
- 9436 _barna_dbg RAW315 WHOIP sin RAW354 ni fallback, libero inflight: nick= %nick raw= $1-
- 9437 _barna_userip_q_release %nick RAW315_NO_RAW354
- 9438 unset %barna_lookup. $+ %ln
- 9439 unset %barna_lookup_chans. $+ %ln
- 9440 unset %barna_qry. $+ %ln
- 9441 unset %barna_ipdone. $+ %ln
- 9442 unset %barna_userip_retry. $+ %ln
- 9443 unset %barna_userip_sent_recent. $+ %ln
- 9444 unset %barna_whoip_current_nick
- 9445 unset %barna_whoip_current_ln
- 9446 }
- 9447
- 9448 haltdef
- 9449 halt
- 9450 }
- 9451}
- 9452
- 9453RAW 401:*:{
- 9454 if (%barna_addon != 1) return
- 9455
- 9456 var %target = $_barna_whoip_clean_tok($2)
- 9457 if (%target == $null) var %target = $_barna_whoip_clean_tok($1)
- 9458 if (%target == $null) return
- 9459
- 9460 var %ln = $lower(%target)
- 9461
- 9462 if ([ [ $+(%,barna_userip_inflight.,%ln) ] ] != 1) return
- 9463
- 9464 unset %barna_whoip_current_nick
- 9465 unset %barna_whoip_current_ln
- 9466
- 9467 _barna_dbg RAW401 WHOIP nick no online: nick= %target raw= $1-
- 9468
- 9469 _barna_userip_q_release %target RAW401_WHOIP
- 9470 unset %barna_lookup. $+ %ln
- 9471 unset %barna_lookup_chans. $+ %ln
- 9472 unset %barna_qry. $+ %ln
- 9473 unset %barna_ipdone. $+ %ln
- 9474 unset %barna_userip_retry. $+ %ln
- 9475 unset %barna_userip_sent_recent. $+ %ln
- 9476
- 9477 haltdef
- 9478 halt
- 9479}
- 9480
- 9481; ------------------------------------------------------------
- 9482; BLOQUE 9
- 9483; RAW USERIP COMPATIBILIDAD
- 9484; ------------------------------------------------------------
- 9485
- 9486RAW 340:*:{
- 9487 if (%barna_addon != 1) return
- 9488
- 9489 var %all = $2-
- 9490 var %i = 1
- 9491
- 9492 while (%i <= $numtok(%all,32)) {
- 9493 var %raw_data = $gettok(%all,%i,32)
- 9494
- 9495 if ($left(%raw_data,1) == :) var %raw_data = $right(%raw_data,-1)
- 9496
- 9497 var %address = $gettok(%raw_data,2,64)
- 9498 var %nick_full = $gettok(%raw_data,1,64)
- 9499 var %nick = $gettok(%nick_full,1,61)
- 9500
- 9501 while ($right(%nick,1) == *) {
- 9502 var %nick = $left(%nick,-1)
- 9503 }
- 9504
- 9505 if (%nick != $null) {
- 9506 _barna_dbg RAW340 recibido: nick= %nick ip= %address
- 9507
- 9508 if (%address == 127.0.0.1) || (%address == $null) || ("*" isin %address) {
- 9509 if ([ [ $+(%,barna_manual_userip.,$lower(%nick)) ] ] == 1) {
- 9510 var %uwin_bad = [ [ $+(%,barna_manual_userip_win.,$lower(%nick)) ] ]
- 9511 if (%uwin_bad == $null) var %uwin_bad = Status Window
- 9512 echo %uwin_bad $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) WHOIP $chr(2) $+ %nick $+ $chr(15) sin IP valida: %address
- 9513 unset %barna_manual_userip. $+ $lower(%nick)
- 9514 unset %barna_manual_userip_win. $+ $lower(%nick)
- 9515 }
- 9516
- 9517 _barna_dbg RAW340 ignorado: nick= %nick ip= %address
- 9518 _barna_userip_q_release %nick RAW340_INVALID
- 9519 unset %barna_lookup. $+ $lower(%nick)
- 9520 unset %barna_lookup_chans. $+ $lower(%nick)
- 9521 unset %barna_qry. $+ $lower(%nick)
- 9522 unset %barna_ipdone. $+ $lower(%nick)
- 9523 unset %barna_userip_retry. $+ $lower(%nick)
- 9524 }
- 9525 else {
- 9526 if ([ [ $+(%,barna_manual_userip.,$lower(%nick)) ] ] == 1) {
- 9527 var %uwin = [ [ $+(%,barna_manual_userip_win.,$lower(%nick)) ] ]
- 9528 if (%uwin == $null) var %uwin = Status Window
- 9529 echo %uwin $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) WHOIP $chr(2) $+ %nick $+ $chr(15) -> $chr(2) $+ %address $+ $chr(15)
- 9530 unset %barna_manual_userip. $+ $lower(%nick)
- 9531 unset %barna_manual_userip_win. $+ $lower(%nick)
- 9532 }
- 9533
- 9534 if ([ [ $+(%,barna_manual_wait.,$lower(%nick)) ] ] == 1) {
- 9535 var %id = asnmanual_ $+ $ticks
- 9536 var %win = [ [ $+(%,barna_manual_win_nick.,$lower(%nick)) ] ]
- 9537
- 9538 if (%win == $null) var %win = Status Window
- 9539
- 9540 unset %barna_manual_wait. $+ $lower(%nick)
- 9541 unset %barna_manual_win_nick. $+ $lower(%nick)
- 9542
- 9543 set -u30 %barna_manual_ip. $+ %id %address
- 9544 set -u30 %barna_manual_win. $+ %id %win
- 9545 unset %barna_manual_asn. $+ %id
- 9546 unset %barna_manual_name. $+ %id
- 9547 unset %barna_manual_done. $+ %id
- 9548
- 9549 sockopen -e %id api.ipinfo.io 443
- 9550 }
- 9551 else {
- 9552 _barna_ip_found %nick %address RAW340
- 9553 }
- 9554 }
- 9555 }
- 9556
- 9557 inc %i
- 9558 }
- 9559
- 9560 halt
- 9561}
- 9562
- 9563; ------------------------------------------------------------
- 9564; BLOQUE 9.2.5
- 9565; CACHE TEMPORAL DE RESULTADOS ASN
- 9566; ------------------------------------------------------------
- 9567
- 9568alias _barna_asn_cache_key {
- 9569 if ($1 == $null) return
- 9570 return $replace($1,.,_)
- 9571}
- 9572
- 9573; Build 123:
- 9574; Las entradas marcadas por CACHECAP MARKGC usan __gc__ durante 1 segundo
- 9575; antes de expirar. Nunca deben considerarse cache valida ni generar aviso/sancion.
- 9576alias _barna_asn_cache_val_ok {
- 9577 if ($1 == $null) return 0
- 9578 if ($1 == __gc__) return 0
- 9579 if ($1 == 0) return 0
- 9580 return 1
- 9581}
- 9582
- 9583alias _barna_asn_cache_key_valid {
- 9584 if ($1 == $null) return 0
- 9585 var %key = $1
- 9586 var %asn = [ [ $+(%,barna_asn_cache_asn.,%key) ] ]
- 9587 var %isp = [ [ $+(%,barna_asn_cache_name.,%key) ] ]
- 9588 if (!$_barna_asn_cache_val_ok(%asn)) return 0
- 9589 if (!$_barna_asn_cache_val_ok(%isp)) return 0
- 9590 if ($left(%asn,2) != AS) return 0
- 9591 return 1
- 9592}
- 9593
- 9594alias _barna_asn_cache_ip_valid {
- 9595 if ($1 == $null) return 0
- 9596 var %key = $_barna_asn_cache_key($1)
- 9597 if (%key == $null) return 0
- 9598 return $_barna_asn_cache_key_valid(%key)
- 9599}
- 9600
- 9601alias _barna_asn_cache_store {
- 9602 if ($1 == $null) return
- 9603 if ($2 == $null) return
- 9604
- 9605 var %ip = $1
- 9606 var %asn = $2
- 9607 var %isp = $3-
- 9608 var %ttl = %barna_asn_cache_ttl
- 9609 var %key = $_barna_asn_cache_key(%ip)
- 9610
- 9611 if (%ttl !isnum 300-) var %ttl = 21600
- 9612 if (%key == $null) return
- 9613 if (%isp == $null) var %isp = Desconocido
- 9614
- 9615 ; Build 120: si la cache ya esta por encima del hard limit y esta IP no
- 9616 ; estaba cacheada, NO guardamos una entrada nueva. Asi el drenaje puede bajar
- 9617 ; de verdad en horas de mucho trafico. Si la IP ya existe, se permite refrescar.
- 9618 if (%barna_cachecap117_enabled == 1) {
- 9619 _barna_cachecap117_defaults
- 9620 var %cache_count = $var(%barna_asn_cache_asn.*,0)
- 9621 var %exists = 0
- 9622 if ($_barna_asn_cache_key_valid(%key)) var %exists = 1
- 9623
- 9624 if ((%cache_count >= %barna_asn_cache_hard_limit) && (%exists == 0)) {
- 9625 inc %barna_cachecap117_skip_new
- 9626 set -u60 %barna_cachecap117_last_skip %key
- 9627 noop $_barna_cachecap117_start_drain
- 9628 _barna_dbg ASN CACHE skip por cap: ip= %ip asn= %asn cache= %cache_count hard= %barna_asn_cache_hard_limit
- 9629 return
- 9630 }
- 9631 }
- 9632
- 9633 set $+(-u,%ttl) %barna_asn_cache_asn. $+ %key %asn
- 9634 set $+(-u,%ttl) %barna_asn_cache_name. $+ %key %isp
- 9635 set $+(-u,%ttl) %barna_asn_cache_ts. $+ %key $ctime
- 9636
- 9637 if (%barna_cachecap117_enabled == 1) {
- 9638 if ($var(%barna_asn_cache_asn.*,0) > %barna_asn_cache_hard_limit) noop $_barna_cachecap117_start_drain
- 9639 }
- 9640
- 9641 _barna_dbg ASN CACHE store: ip= %ip asn= %asn ttl= %ttl
- 9642}
- 9643
- 9644alias _barna_asn_cache_apply {
- 9645 if ($1 == $null) return 0
- 9646 if ($2 == $null) return 0
- 9647
- 9648 var %nick = $1
- 9649 var %ip = $2
- 9650 var %chans = $3-
- 9651 var %key = $_barna_asn_cache_key(%ip)
- 9652
- 9653 if ($_barna_is_join_exception(%nick)) {
- 9654 _barna_dbg EXCEPTIONSAFE ignora cache ASN para nick exceptuado: nick= %nick ip= %ip chans= %chans
- 9655 _barna_exception_cleanup_nick %nick
- 9656 return 1
- 9657 }
- 9658
- 9659 if ($_barna_is_privileged_nick(%nick)) {
- 9660 _barna_dbg PRIVSAFE ignora cache ASN por @/+v: nick= %nick ip= %ip chans= %chans
- 9661 _barna_privileged_cleanup_nick %nick CACHE_APPLY
- 9662 return 1
- 9663 }
- 9664
- 9665 if (%key == $null) return 0
- 9666
- 9667 var %asn = [ [ $+(%,barna_asn_cache_asn.,%key) ] ]
- 9668 var %isp = [ [ $+(%,barna_asn_cache_name.,%key) ] ]
- 9669
- 9670 ; Build 123: nunca aplicar cache marcada por MARKGC (__gc__).
- 9671 if (!$_barna_asn_cache_val_ok(%asn)) return 0
- 9672 if (!$_barna_asn_cache_val_ok(%isp)) return 0
- 9673 if ($left(%asn,2) != AS) return 0
- 9674
- 9675 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 9676
- 9677 var %allchans = $_barna_echo_chans_for_nick(%nick,%chans)
- 9678 if (%allchans != $null) var %chans = %allchans
- 9679
- 9680 if (%chans == $null) return 0
- 9681
- 9682 _barna_dbg ASN CACHE hit: nick= %nick ip= %ip asn= %asn chans= %chans
- 9683
- 9684 var %dnick = $_barna_nick_display(%nick)
- 9685 var %mensaje = El usuario $chr(2) $+ %dnick $+ $chr(15) (IP: $+ $chr(2) $+ %ip $+ $chr(15) $+ ) pertenece al ISP: $chr(2) $+ %isp $+ $chr(15) Con ASN: $chr(2) $+ %asn $+ $chr(15)
- 9686 var %match = 0
- 9687 var %matchchans = $null
- 9688 var %i = 1
- 9689
- 9690 while (%i <= $numtok(%chans,44)) {
- 9691 var %c = $_barna_chan_name_clean($gettok(%chans,%i,44))
- 9692
- 9693 if (%c != $null) {
- 9694 if ($_barna_asn_in_chan(%c,%asn)) {
- 9695 var %match = 1
- 9696 if (%matchchans == $null) var %matchchans = %c
- 9697 else if (!$istok(%matchchans,%c,44)) var %matchchans = $addtok(%matchchans,%c,44)
- 9698 }
- 9699
- 9700 ; Build 27: este aviso informativo se muestra en todos los canales activos
- 9701 ; donde este el nick. La sancion sigue usando solo %matchchans.
- 9702 _barna_channel_echo_asn %c %nick %ip %asn %mensaje
- 9703 }
- 9704
- 9705 inc %i
- 9706 }
- 9707
- 9708 if (%match == 0) {
- 9709 var %forcechans = $_barna_asn_match_chans_for_nick(%nick,%asn,%chans)
- 9710 if (%forcechans != $null) {
- 9711 var %match = 1
- 9712 var %matchchans = %forcechans
- 9713 _barna_dbg ASN MATCHFIX cache: nick= %nick ip= %ip asn= %asn chans= %matchchans
- 9714 }
- 9715 }
- 9716
- 9717 if (%match == 1) {
- 9718 _barna_apply_asn_punish %nick %ip %asn %matchchans %mensaje
- 9719 }
- 9720
- 9721 return 1
- 9722}
- 9723
- 9724; ------------------------------------------------------------
- 9725; BLOQUE 9.3
- 9726; COLA ASN WEB
- 9727; ------------------------------------------------------------
- 9728
- 9729
- 9730; Build 96:
- 9731; Si una consulta ASN queda pendiente pero la IP ya tiene cache ASN/ISP,
- 9732; aplicamos cache inmediatamente, emitimos aviso/sancion normal y borramos
- 9733; la cola fantasma. Evita estados tipo esperando_ASN con running=0 sockets=0.
- 9734alias _barna_q_fastcache_apply {
- 9735 if ($1 == $null) return 0
- 9736
- 9737 var %id = $1
- 9738 var %reason = $2-
- 9739 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 9740 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 9741
- 9742 if (%nick == $null) return 0
- 9743 if (%ip == $null) return 0
- 9744 if (!$_barna_is_ipv4(%ip)) return 0
- 9745
- 9746 var %ln = $lower(%nick)
- 9747 var %key = $_barna_asn_cache_key(%ip)
- 9748
- 9749 if (!$_barna_asn_cache_key_valid(%key)) return 0
- 9750
- 9751 var %chans = [ [ $+(%,barna_q_chans.,%id) ] ]
- 9752 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 9753 if (%chans == $null) var %chans = $_barna_nick_enabled_chans(%nick)
- 9754 if (%chans == $null) return 0
- 9755
- 9756 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 9757 _barna_dbg QFASTCACHE aplica cache y elimina cola ASN fantasma: id= %id nick= %nick ip= %ip chans= %chans reason= %reason
- 9758
- 9759 _barna_q_remove %id
- 9760
- 9761 unset %barna_lookup. $+ %ln
- 9762 unset %barna_lookup_chans. $+ %ln
- 9763 unset %barna_qry. $+ %ln
- 9764 unset %barna_ipdone. $+ %ln
- 9765 unset %barna_userip_sent_recent. $+ %ln
- 9766 unset %barna_userip_retry. $+ %ln
- 9767 unset %barna_userip_sent_ts. $+ %ln
- 9768 unset %barna_userip_watchtry. $+ %ln
- 9769
- 9770 _barna_userip_q_release %nick QFASTCACHE
- 9771 _barna_q_schedule 1
- 9772 return 1
- 9773 }
- 9774
- 9775 return 0
- 9776}
- 9777
- 9778alias _barna_q_add {
- 9779 _barna_runtime_defaults
- 9780 if ($1 == $null) return
- 9781 if ($2 == $null) return
- 9782
- 9783 var %nick = $1
- 9784 var %ip = $2
- 9785 var %chans = $3-
- 9786 var %ln = $lower(%nick)
- 9787
- 9788 if ($_barna_is_join_exception(%nick)) {
- 9789 _barna_dbg EXCEPTIONSAFE no encola ASN normal: nick= %nick ip= %ip
- 9790 _barna_exception_cleanup_nick %nick
- 9791 return
- 9792 }
- 9793
- 9794 if ($_barna_is_privileged_nick(%nick)) {
- 9795 _barna_dbg PRIVSAFE no encola ASN normal por @/+v: nick= %nick ip= %ip
- 9796 _barna_privileged_cleanup_nick %nick QUEUE_ADD
- 9797 return
- 9798 }
- 9799
- 9800 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 9801 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 9802 if (%chans == $null) {
- 9803 _barna_dbg QUEUE no add sin canales: nick= %nick ip= %ip
- 9804 return
- 9805 }
- 9806
- 9807 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 9808 _barna_dbg QUEUE usa cache ASN: nick= %nick ip= %ip chans= %chans
- 9809 unset %barna_lookup. $+ %ln
- 9810 unset %barna_lookup_chans. $+ %ln
- 9811 unset %barna_qry. $+ %ln
- 9812 unset %barna_ipdone. $+ %ln
- 9813 _barna_userip_q_release %nick QUEUE_CACHE_HIT
- 9814 return
- 9815 }
- 9816
- 9817 var %ida = [ [ $+(%,barna_q_active.,%ln) ] ]
- 9818
- 9819 if (%ida != $null) {
- 9820 set -u90 %barna_q_chans. $+ %ida %chans
- 9821 _barna_dbg QUEUE dup activo, actualizo canales: id= %ida nick= %nick ip= %ip chans= %chans
- 9822 return
- 9823 }
- 9824
- 9825 var %existing = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 9826
- 9827 if (%existing != $null) {
- 9828 set -u120 %barna_q_ip. $+ %existing %ip
- 9829 set -u120 %barna_q_chans. $+ %existing %chans
- 9830 set -u120 %barna_q_ts. $+ %existing $ctime
- 9831
- 9832 if ([ [ $+(%,barna_q_low.,%existing) ] ] == 1) {
- 9833 if (%barna_q_low_items != $null) {
- 9834 var %newlow = $remtok(%barna_q_low_items,%existing,1,44)
- 9835 if (%newlow == $null) unset %barna_q_low_items
- 9836 else set %barna_q_low_items %newlow
- 9837 }
- 9838
- 9839 unset %barna_q_low. $+ %existing
- 9840
- 9841 if (%barna_q_items == $null) set %barna_q_items %existing
- 9842 else if (!$istok(%barna_q_items,%existing,44)) set %barna_q_items $addtok(%barna_q_items,%existing,44)
- 9843
- 9844 _barna_dbg QUEUE dup pendiente actualizado y promovido a normal: id= %existing nick= %nick ip= %ip chans= %chans
- 9845 }
- 9846 else {
- 9847 _barna_dbg QUEUE dup pendiente actualizado: id= %existing nick= %nick ip= %ip chans= %chans
- 9848 }
- 9849
- 9850 _barna_q_schedule 1
- 9851 return
- 9852 }
- 9853
- 9854 var %id = $ticks $+ $rand(100,999)
- 9855
- 9856 set -u90 %barna_q_nick. $+ %id %nick
- 9857 set -u90 %barna_q_ip. $+ %id %ip
- 9858 set -u90 %barna_q_chans. $+ %id %chans
- 9859 set -u90 %barna_q_try. $+ %id 0
- 9860 set -u90 %barna_q_ts. $+ %id $ctime
- 9861 set -u90 %barna_q_pending. $+ %ln %id
- 9862
- 9863 if (%barna_q_items == $null) {
- 9864 set %barna_q_items %id
- 9865 }
- 9866 else {
- 9867 if (!$istok(%barna_q_items,%id,44)) set %barna_q_items $addtok(%barna_q_items,%id,44)
- 9868 }
- 9869
- 9870 _barna_dbg QUEUE add: id= %id nick= %nick ip= %ip chans= %chans total= $numtok(%barna_q_items,44)
- 9871
- 9872 _barna_core_start
- 9873 _barna_q_schedule 1
- 9874}
- 9875
- 9876
- 9877alias _barna_q_add_low {
- 9878 if ($1 == $null) return
- 9879 if ($2 == $null) return
- 9880
- 9881 var %nick = $1
- 9882 var %ip = $2
- 9883 var %chans = $3-
- 9884 var %ln = $lower(%nick)
- 9885 var %delay = %barna_q_low_delay
- 9886
- 9887 if ($_barna_is_join_exception(%nick)) {
- 9888 _barna_dbg EXCEPTIONSAFE no encola ASN baja: nick= %nick ip= %ip
- 9889 _barna_exception_cleanup_nick %nick
- 9890 return
- 9891 }
- 9892
- 9893 if ($_barna_is_privileged_nick(%nick)) {
- 9894 _barna_dbg PRIVSAFE no encola ASN baja por @/+v: nick= %nick ip= %ip
- 9895 _barna_privileged_cleanup_nick %nick QUEUE_ADD_LOW
- 9896 return
- 9897 }
- 9898
- 9899 if (%delay !isnum 0-) var %delay = 20
- 9900
- 9901 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 9902 if (%chans == $null) var %chans = [ [ $+(%,barna_lookup_chans.,%ln) ] ]
- 9903 if (%chans == $null) {
- 9904 _barna_dbg QUEUE baja no add sin canales: nick= %nick ip= %ip
- 9905 return
- 9906 }
- 9907
- 9908 if ($_barna_asn_cache_apply(%nick,%ip,%chans)) {
- 9909 _barna_dbg QUEUE baja usa cache ASN: nick= %nick ip= %ip chans= %chans
- 9910 unset %barna_lookup. $+ %ln
- 9911 unset %barna_lookup_chans. $+ %ln
- 9912 unset %barna_qry. $+ %ln
- 9913 unset %barna_ipdone. $+ %ln
- 9914 _barna_userip_q_release %nick QUEUE_LOW_CACHE_HIT
- 9915 return
- 9916 }
- 9917
- 9918 var %ida = [ [ $+(%,barna_q_active.,%ln) ] ]
- 9919
- 9920 if (%ida != $null) {
- 9921 set -u90 %barna_q_chans. $+ %ida %chans
- 9922 _barna_dbg QUEUE baja dup activo, actualizo canales: id= %ida nick= %nick ip= %ip chans= %chans
- 9923 return
- 9924 }
- 9925
- 9926 var %existing = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 9927
- 9928 if (%existing != $null) {
- 9929 set -u120 %barna_q_ip. $+ %existing %ip
- 9930 set -u120 %barna_q_chans. $+ %existing %chans
- 9931 set -u120 %barna_q_ts. $+ %existing $ctime
- 9932
- 9933 if ((%barna_q_items == $null) && (%delay > 0)) {
- 9934 _barna_dbg QUEUE baja dup pendiente actualizado: id= %existing nick= %nick ip= %ip chans= %chans delay= %delay
- 9935 _barna_q_schedule %delay
- 9936 }
- 9937 else {
- 9938 _barna_dbg QUEUE baja dup pendiente actualizado: id= %existing nick= %nick ip= %ip chans= %chans
- 9939 _barna_q_schedule 1
- 9940 }
- 9941 return
- 9942 }
- 9943
- 9944 var %id = $ticks $+ $rand(100,999)
- 9945
- 9946 set -u90 %barna_q_nick. $+ %id %nick
- 9947 set -u90 %barna_q_ip. $+ %id %ip
- 9948 set -u90 %barna_q_chans. $+ %id %chans
- 9949 set -u90 %barna_q_try. $+ %id 0
- 9950 set -u90 %barna_q_ts. $+ %id $ctime
- 9951 set -u90 %barna_q_pending. $+ %ln %id
- 9952 set -u300 %barna_q_low. $+ %id 1
- 9953
- 9954 if (%barna_q_low_items == $null) {
- 9955 set %barna_q_low_items %id
- 9956 }
- 9957 else {
- 9958 if (!$istok(%barna_q_low_items,%id,44)) set %barna_q_low_items $addtok(%barna_q_low_items,%id,44)
- 9959 }
- 9960
- 9961 _barna_dbg QUEUE baja add: id= %id nick= %nick ip= %ip chans= %chans low_total= $numtok(%barna_q_low_items,44) normal_total= $numtok(%barna_q_items,44)
- 9962
- 9963 if ((%barna_q_items == $null) && (%delay > 0)) {
- 9964 _barna_q_schedule %delay
- 9965 }
- 9966 else {
- 9967 _barna_q_schedule 1
- 9968 }
- 9969}
- 9970
- 9971
- 9972; ------------------------------------------------------------
- 9973; BLOQUE 9.3.0
- 9974; SANIDAD DE COLA ASN
- 9975; Evita que la cola ASN quede con IDs fantasma o motor armado sin socket
- 9976; ------------------------------------------------------------
- 9977
- 9978alias _barna_ipinfo_sock_count {
- 9979 var %i = 1
- 9980 var %c = 0
- 9981 while (%i <= $sock(0)) {
- 9982 var %s = $sock(%i)
- 9983 if (ipinfo* iswm %s) inc %c
- 9984 inc %i
- 9985 }
- 9986 return %c
- 9987}
- 9988
- 9989alias _barna_q_sanity {
- 9990 ; Sanidad ligera: solo elimina IDs invalidos de las listas.
- 9991 ; MUY IMPORTANTE: no toca running/active/pump para no romper sockopen en curso.
- 9992 var %new = $null
- 9993 var %i = 1
- 9994
- 9995 while (%i <= $numtok(%barna_q_items,44)) {
- 9996 var %id = $gettok(%barna_q_items,%i,44)
- 9997 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 9998 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 9999
- 10000 if ((%id != $null) && (%nick != $null) && (%ip != $null)) {
- 10001 if (%new == $null) var %new = %id
- 10002 else if (!$istok(%new,%id,44)) var %new = $addtok(%new,%id,44)
- 10003 }
- 10004 else {
- 10005 unset %barna_q_nick. $+ %id
- 10006 unset %barna_q_ip. $+ %id
- 10007 unset %barna_q_chans. $+ %id
- 10008 unset %barna_q_try. $+ %id
- 10009 unset %barna_q_ts. $+ %id
- 10010 unset %barna_q_low. $+ %id
- 10011 unset %barna_q_deferred. $+ %id
- 10012 unset %barna_q_retry_timer. $+ %id
- 10013 unset %barna_q_totimer. $+ %id
- 10014 }
- 10015
- 10016 inc %i
- 10017 }
- 10018
- 10019 if (%new == $null) unset %barna_q_items
- 10020 else set %barna_q_items %new
- 10021
- 10022 var %newlow = $null
- 10023 var %j = 1
- 10024
- 10025 while (%j <= $numtok(%barna_q_low_items,44)) {
- 10026 var %id2 = $gettok(%barna_q_low_items,%j,44)
- 10027 var %nick2 = [ [ $+(%,barna_q_nick.,%id2) ] ]
- 10028 var %ip2 = [ [ $+(%,barna_q_ip.,%id2) ] ]
- 10029
- 10030 if ((%id2 != $null) && (%nick2 != $null) && (%ip2 != $null)) {
- 10031 if (%newlow == $null) var %newlow = %id2
- 10032 else if (!$istok(%newlow,%id2,44)) var %newlow = $addtok(%newlow,%id2,44)
- 10033 }
- 10034 else {
- 10035 unset %barna_q_nick. $+ %id2
- 10036 unset %barna_q_ip. $+ %id2
- 10037 unset %barna_q_chans. $+ %id2
- 10038 unset %barna_q_try. $+ %id2
- 10039 unset %barna_q_ts. $+ %id2
- 10040 unset %barna_q_low. $+ %id2
- 10041 unset %barna_q_deferred. $+ %id2
- 10042 unset %barna_q_retry_timer. $+ %id2
- 10043 unset %barna_q_totimer. $+ %id2
- 10044 }
- 10045
- 10046 inc %j
- 10047 }
- 10048
- 10049 if (%newlow == $null) unset %barna_q_low_items
- 10050 else set %barna_q_low_items %newlow
- 10051}
- 10052
- 10053
- 10054
- 10055alias _barna_sockto_clear_ghost_timers {
- 10056 var %i = $timer(0)
- 10057 var %n = 0
- 10058
- 10059 while (%i > 0) {
- 10060 var %t = $timer(%i)
- 10061
- 10062 if (barnasockto_* iswm $lower(%t)) {
- 10063 .timer $+ %t off
- 10064 inc %n
- 10065 _barna_dbg GHOSTFIX apaga timer socket huerfano: timer= %t
- 10066 }
- 10067
- 10068 dec %i
- 10069 }
- 10070
- 10071 return %n
- 10072}
- 10073
- 10074
- 10075alias _barna_q_clear_ghost_light {
- 10076 ; VARHYGIENE23 LIGHTGHOST:
- 10077 ; Limpieza conservadora del estado running fantasma.
- 10078 ; No recorre listas grandes, no reencola, no compacta y no arranca sockets.
- 10079 ; Solo se activa si running > 0 y no hay ningun socket ipinfo visible.
- 10080 var %running = %barna_q_running
- 10081 if (%running == $null) var %running = 0
- 10082 if (%running <= 0) return 0
- 10083
- 10084 var %socks = $_barna_ipinfo_sock_count
- 10085 if (%socks > 0) return 0
- 10086
- 10087 var %id = %barna_q_last_start_id
- 10088
- 10089 if (%id != $null) {
- 10090 var %tot = [ [ $+(%,barna_q_totimer.,%id) ] ]
- 10091 if (%tot != $null) .timer $+ %tot off
- 10092
- 10093 var %tn = BarnaSockTO_ $+ %id
- 10094 .timer $+ %tn off
- 10095
- 10096 unset %barna_q_totimer. $+ %id
- 10097 unset %barna_sock_expected. $+ %id
- 10098 unset %barna_sock_opened. $+ %id
- 10099 unset %barna_sock_name. $+ %id
- 10100 unset %barna_sock_nick. $+ %id
- 10101 unset %barna_sock_ip. $+ %id
- 10102 unset %barna_sock_id. $+ %id
- 10103 }
- 10104
- 10105 unset %barna_q_running
- 10106 unset %barna_q_active.*
- 10107 unset %barna_q_process_busy
- 10108 unset %barna_q_last_start_ts
- 10109 unset %barna_q_last_start_id
- 10110 unset %barna_q_last_start_sock
- 10111
- 10112 _barna_dbg GHOSTFIX_LIGHT limpio running fantasma: id= %id sockets= %socks
- 10113 return 1
- 10114}
- 10115
- 10116alias barna.ghostfix {
- 10117 _barna_q_clear_ghost_light
- 10118 echo -s [ASN] GHOSTFIX light ejecutado. running= $iif(%barna_q_running != $null,%barna_q_running,0) sockets= $_barna_ipinfo_sock_count
- 10119}
- 10120
- 10121
- 10122alias _barna_sockto_orphan_gc {
- 10123 ; VARHYGIENE24:
- 10124 ; Limpia timers BarnaSockTO_* que quedaron vivos cuando ya no hay socket real
- 10125 ; ni running ASN. No toca sockets activos ni reencola nada.
- 10126 var %running = %barna_q_running
- 10127 if (%running == $null) var %running = 0
- 10128 if (%running > 0) return 0
- 10129 if ($_barna_ipinfo_sock_count > 0) return 0
- 10130
- 10131 var %deleted = 0
- 10132 var %i = $timer(0)
- 10133 while (%i > 0) {
- 10134 var %t = $timer(%i)
- 10135 if ($left($lower(%t),12) == barnasockto_) {
- 10136 .timer $+ %t off
- 10137 inc %deleted
- 10138 }
- 10139 dec %i
- 10140 }
- 10141
- 10142 if (%deleted > 0) _barna_dbg SOCKTOGC timers huerfanos apagados: %deleted
- 10143 return %deleted
- 10144}
- 10145
- 10146alias barna.socktogc {
- 10147 var %n = $_barna_sockto_orphan_gc
- 10148 echo -s [ASN] SOCKTOGC ejecutado. apagados= %n running= $iif(%barna_q_running != $null,%barna_q_running,0) sockets= $_barna_ipinfo_sock_count
- 10149}
- 10150
- 10151
- 10152
- 10153
- 10154alias _barna_sock_state_purge_id {
- 10155 if ($1 == $null) return 0
- 10156
- 10157 var %id = $1
- 10158 var %nick = [ [ $+(%,barna_sock_nick.,%id) ] ]
- 10159 var %ln = $lower(%nick)
- 10160
- 10161 unset %barna_sock_nick. $+ %id
- 10162 unset %barna_sock_ip. $+ %id
- 10163 unset %barna_sock_id. $+ %id
- 10164 unset %barna_sock_name. $+ %id
- 10165 unset %barna_sock_expected. $+ %id
- 10166 unset %barna_sock_opened. $+ %id
- 10167
- 10168 if (%ln != $null) {
- 10169 unset %barna_sock. $+ %ln
- 10170 unset %barna_rx. $+ %ln
- 10171 unset %barna_asn_done. $+ %ln
- 10172 unset %barna_sock_timeout_seen. $+ %ln
- 10173 unset %barna_q_finished. $+ %ln
- 10174 unset %temp_ip_ $+ %nick
- 10175 unset %asn_val. $+ %nick
- 10176 unset %as_name_val. $+ %nick
- 10177 }
- 10178
- 10179 return 1
- 10180}
- 10181
- 10182alias _barna_sock_state_purge_sock {
- 10183 if ($1 == $null) return 0
- 10184
- 10185 var %sock = $1
- 10186 var %id = $_barna_sock_to_id(%sock)
- 10187 var %nick = $_barna_sock_to_nick(%sock)
- 10188
- 10189 if (%id != $null) noop $_barna_sock_state_purge_id(%id)
- 10190
- 10191 if (%nick != $null) {
- 10192 var %ln = $lower(%nick)
- 10193 unset %barna_sock. $+ %ln
- 10194 unset %barna_rx. $+ %ln
- 10195 unset %barna_asn_done. $+ %ln
- 10196 unset %barna_sock_timeout_seen. $+ %ln
- 10197 unset %barna_q_finished. $+ %ln
- 10198 unset %temp_ip_ $+ %nick
- 10199 unset %asn_val. $+ %nick
- 10200 unset %as_name_val. $+ %nick
- 10201 }
- 10202
- 10203 return 1
- 10204}
- 10205
- 10206alias _barna_userip_idle_gc {
- 10207 ; Build 100: solo normaliza inflight si la cola WHOIP esta realmente vacia.
- 10208 ; Si hay cola, purgar inflight mata RAW354 pendientes y deja sin debug.
- 10209 if ($_barna_userip_q_count > 0) return 0
- 10210 if (($var(%barna_userip_inflight.*,0) > 1) || (($var(%barna_userip_inflight.*,0) > 0) && (%barna_whoip_current_ln == $null))) noop $_barna_statecap_hardgc
- 10211
- 10212 var %infcount = %barna_userip_inflight_count
- 10213 if (%infcount !isnum 1-) var %infcount = 0
- 10214 if (%infcount > 0) return 0
- 10215 if ($var(%barna_userip_inflight.*,0) > 0) return 0
- 10216
- 10217 unset %barna_userip_q_item.*
- 10218 unset %barna_userip_q_chans.*
- 10219 unset %barna_userip_q_pending.*
- 10220 unset %barna_userip_q_nick.*
- 10221 unset %barna_userip_q_slot.*
- 10222 unset %barna_userip_q_head
- 10223 unset %barna_userip_q_tail
- 10224 unset %barna_userip_q_count_real
- 10225 unset %barna_userip_q_scheduled
- 10226 unset %barna_userip_q_processing
- 10227 unset %barna_userip_q_active
- 10228 unset %barna_userip_q_running
- 10229
- 10230 ; Build 98: si WHOIP esta idle, no conservar estado de envio/lookup.
- 10231 unset %barna_userip_sent_recent.*
- 10232 unset %barna_userip_sent_ts.*
- 10233 unset %barna_userip_retry.*
- 10234 unset %barna_userip_watchtry.*
- 10235 unset %barna_userip_current_*
- 10236 unset %barna_whoip_current_*
- 10237 unset %barna_userip_inflight.*
- 10238 unset %barna_userip_inflight_count
- 10239
- 10240 if ((%barna_q_items == $null) && (%barna_q_low_items == $null) && (%barna_q_running == 0) && ($_barna_ipinfo_sock_count == 0)) {
- 10241 unset %barna_lookup.*
- 10242 unset %barna_lookup_chans.*
- 10243 unset %barna_qry.*
- 10244 unset %barna_ipdone.*
- 10245 unset %barna_last_ip.*
- 10246 unset %barna_last_ip_ts.*
- 10247 unset %barna_q_finished.*
- 10248 noop $_barna_sockvar_gc
- 10249 }
- 10250
- 10251 return 1
- 10252}
- 10253
- 10254alias _barna_sockvar_count {
- 10255 return $calc($var(%barna_sock.*,0) + $var(%barna_sock_name.*,0) + $var(%barna_sock_nick.*,0) + $var(%barna_sock_ip.*,0) + $var(%barna_sock_id.*,0) + $var(%barna_sock_expected.*,0) + $var(%barna_sock_opened.*,0) + $var(%barna_rx.*,0) + $var(%barna_asn_done.*,0))
- 10256}
- 10257
- 10258alias _barna_sockvar_gc_tick {
- 10259 ; VARHYGIENE47:
- 10260 ; GC periodico y ligero de restos sock/rx/asn_done.
- 10261 ; No toca canales ni ASN. Solo actua si no hay sockets reales ni ASN running.
- 10262 if (%barna_addon != 1) return 0
- 10263 if (%barna_sockvar_gc_busy == 1) return 0
- 10264
- 10265 var %now = $ctime
- 10266 var %secs = %barna_sockvar_gc_secs
- 10267 if (%secs !isnum 5-) var %secs = 10
- 10268
- 10269 if (%barna_sockvar_gc_last != $null) {
- 10270 if ($calc(%now - %barna_sockvar_gc_last) < %secs) return 0
- 10271 }
- 10272
- 10273 set -u10 %barna_sockvar_gc_busy 1
- 10274 set %barna_sockvar_gc_last %now
- 10275
- 10276 var %max = %barna_sockvar_max_vars
- 10277 if (%max !isnum 10-) var %max = 25
- 10278
- 10279 var %vars = $_barna_sockvar_count
- 10280 if (%vars > %max) {
- 10281 var %n = $_barna_sockvar_gc
- 10282 if (%n > 0) _barna_dbg SOCKVARGC auto limpio restos sock/rx/asn_done: %n
- 10283 }
- 10284
- 10285 unset %barna_sockvar_gc_busy
- 10286 return 0
- 10287}
- 10288
- 10289alias _barna_sockvar_gc {
- 10290 ; VARHYGIENE47:
- 10291 ; Limpia restos de sockets/ASN antiguos. Si hay running fantasma sin sockets,
- 10292 ; primero aplica LIGHTGHOST y despues limpia. No toca canales ni ASN configurados.
- 10293 var %running = %barna_q_running
- 10294 if (%running == $null) var %running = 0
- 10295
- 10296 if ((%running > 0) && ($_barna_ipinfo_sock_count == 0)) {
- 10297 noop $_barna_q_clear_ghost_light
- 10298 var %running = %barna_q_running
- 10299 if (%running == $null) var %running = 0
- 10300 }
- 10301
- 10302 if (%running > 0) return 0
- 10303 if ($_barna_ipinfo_sock_count > 0) return 0
- 10304
- 10305 var %before = $_barna_sockvar_count
- 10306 if (%before <= 0) return 0
- 10307
- 10308 unset %barna_sock.*
- 10309 unset %barna_sock_name.*
- 10310 unset %barna_sock_nick.*
- 10311 unset %barna_sock_ip.*
- 10312 unset %barna_sock_id.*
- 10313 unset %barna_sock_expected.*
- 10314 unset %barna_sock_opened.*
- 10315 unset %barna_rx.*
- 10316 unset %barna_asn_done.*
- 10317
- 10318 return %before
- 10319}
- 10320
- 10321alias barna.sockvarclean {
- 10322 var %n = $_barna_sockvar_gc
- 10323 echo -s [ASN] SOCKVARCLEAN ejecutado. limpiadas= %n running= $iif(%barna_q_running != $null,%barna_q_running,0) sockets= $_barna_ipinfo_sock_count sin tocar canales/ASN.
- 10324}
- 10325
- 10326alias _barna_q_clear_ghost_running {
- 10327 ; VARHYGIENE20 GHOSTFIX3:
- 10328 ; Si se invoca con parametro now, no espera gracia: running>0 con sockets=0
- 10329 ; se limpia inmediatamente. Esto evita que /barna.qstatus muestre fantasma
- 10330 ; y que BarnaASNPump quede bloqueado esperando un timeout sin socket real.
- 10331 var %force = $1
- 10332
- 10333 ; VARHYGIENE11 FAILFAST:
- 10334 ; Si hay running pero no existe socket ipinfo visible tras una gracia corta,
- 10335 ; se considera intento fallido de sockopen. No se reencola indefinidamente:
- 10336 ; se descarta el/los ID activos para evitar bucles y lag acumulativo.
- 10337 var %running = %barna_q_running
- 10338 if (%running == $null) var %running = 0
- 10339 if (%running <= 0) return 0
- 10340
- 10341 var %socks = $_barna_ipinfo_sock_count
- 10342 if (%socks > 0) return 0
- 10343
- 10344 var %last = %barna_q_last_start_ts
- 10345 var %grace = %barna_q_ghost_grace_secs
- 10346 if (%grace !isnum 0-) var %grace = 0
- 10347 if (%force == now) var %grace = 0
- 10348
- 10349 if (%last != $null) {
- 10350 if ((%grace > 0) && ($calc($ctime - %last) < %grace)) return 0
- 10351 }
- 10352
- 10353 var %discarded = 0
- 10354
- 10355 ; El ID mas reciente queda registrado aqui.
- 10356 var %id = %barna_q_last_start_id
- 10357 if (%id != $null) {
- 10358 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10359 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10360 _barna_dbg QUEUE running fantasma FAILFAST descarta lastid: id= %id nick= %nick ip= %ip
- 10361 _barna_q_remove %id
- 10362 inc %discarded
- 10363 }
- 10364
- 10365 ; Si quedaron otros activos de workers anteriores, descartar tambien.
- 10366 while ($var(%barna_q_active.*,0) > 0) {
- 10367 var %v = $var(%barna_q_active.*,1)
- 10368 var %aid = $(%v,2)
- 10369 if (%aid != $null) {
- 10370 if (%aid != %id) {
- 10371 var %anick = [ [ $+(%,barna_q_nick.,%aid) ] ]
- 10372 var %aip = [ [ $+(%,barna_q_ip.,%aid) ] ]
- 10373 _barna_dbg QUEUE running fantasma FAILFAST descarta active: id= %aid nick= %anick ip= %aip
- 10374 _barna_q_remove %aid
- 10375 inc %discarded
- 10376 }
- 10377 }
- 10378 unset %barna_q_active.*
- 10379 }
- 10380
- 10381 var %lastsock = %barna_q_last_start_sock
- 10382 if (%lastsock != $null) {
- 10383 if ($sock(%lastsock)) sockclose %lastsock
- 10384 }
- 10385
- 10386 var %s = $sock(0)
- 10387 while (%s > 0) {
- 10388 var %sn = $sock(%s)
- 10389 if (ipinfo* iswm %sn) sockclose %sn
- 10390 dec %s
- 10391 }
- 10392
- 10393 noop $_barna_sockto_clear_ghost_timers
- 10394
- 10395 unset %barna_q_running
- 10396 unset %barna_q_active.*
- 10397 unset %barna_q_process_busy
- 10398 unset %barna_q_last_start_ts
- 10399 unset %barna_q_last_start_id
- 10400 unset %barna_q_last_start_sock
- 10401 unset %barna_sock_expected.*
- 10402 unset %barna_sock_opened.*
- 10403 unset %barna_sock_name.*
- 10404
- 10405 _barna_dbg QUEUE running fantasma FAILFAST limpio: descartados= %discarded sockets= %socks
- 10406 _barna_asn_pump_start_if_needed
- 10407 return 1
- 10408}
- 10409
- 10410alias _barna_asn_total_queue {
- 10411 var %n = $numtok(%barna_q_items,44)
- 10412 var %l = $numtok(%barna_q_low_items,44)
- 10413 if (%n == $null) var %n = 0
- 10414 if (%l == $null) var %l = 0
- 10415 return $calc(%n + %l)
- 10416}
- 10417
- 10418alias _barna_asn_workers_now {
- 10419 ; VARHYGIENE11 FAILFAST:
- 10420 ; Volvemos a 1 worker real. El bloqueo visto no era falta de workers,
- 10421 ; sino running fantasma cuando sockopen no quedaba vivo. Con 1 worker
- 10422 ; evitamos perder varios IDs activos y simplificamos la limpieza.
- 10423 return 1
- 10424}
- 10425
- 10426alias _barna_q_force_start {
- 10427 if (%barna_addon != 1) return
- 10428
- 10429 _barna_q_sanity
- 10430
- 10431 var %qr = %barna_q_running
- 10432 if (%qr == $null) var %qr = 0
- 10433
- 10434 ; Ultra-safe: no fuerces si hay una consulta viva. Espera a sockread/sockclose/timeout.
- 10435 if (%qr > 0) {
- 10436 _barna_asn_pump_start_if_needed
- 10437 return
- 10438 }
- 10439
- 10440 if ((%barna_q_items != $null) || (%barna_q_low_items != $null)) {
- 10441 _barna_q_process
- 10442 }
- 10443
- 10444 _barna_asn_pump_start_if_needed
- 10445}
- 10446
- 10447alias _barna_asn_pump_start_if_needed {
- 10448 if (%barna_addon != 1) return
- 10449
- 10450 var %running = %barna_q_running
- 10451 if (%running == $null) var %running = 0
- 10452
- 10453 var %delay = %barna_asn_pump_delay
- 10454 if (%delay !isnum 1-) var %delay = 2
- 10455 if (%delay < 2) var %delay = 2
- 10456
- 10457 ; VARHYGIENE18:
- 10458 ; BarnaASNPump queda como timer permanente ligero.
- 10459 ; Antes se apagaba en idle y al reiniciar mIRC podia no volver a nacer.
- 10460 if ($timer(BarnaASNPump) == $null) {
- 10461 set -u300 %barna_asn_pump_running 1
- 10462 set -u300 %barna_asn_pump_armed 1
- 10463 .timerBarnaASNPump 0 %delay _barna_asn_pump_tick
- 10464 }
- 10465
- 10466 if (%running == 0) {
- 10467 if (($_barna_asn_queue_has_items == 1) && ($_barna_ipinfo_sock_count == 0)) {
- 10468 noop $_barna_asn_direct_start_one
- 10469 }
- 10470 }
- 10471}
- 10472
- 10473alias _barna_asn_pump_stop_if_idle {
- 10474 if (%barna_addon != 1) {
- 10475 .timerBarnaASNPump off
- 10476 unset %barna_asn_pump_running
- 10477 unset %barna_asn_pump_armed
- 10478 return
- 10479 }
- 10480
- 10481 ; VARHYGIENE18:
- 10482 ; No apagamos BarnaASNPump en idle. El coste es minimo y evita que el addon
- 10483 ; quede sin bomba ASN tras reinicios, resets parciales o estados fantasma.
- 10484 _barna_asn_pump_start_if_needed
- 10485}
- 10486
- 10487alias _barna_asn_pump_tick {
- 10488 if (%barna_addon != 1) {
- 10489 .timerBarnaASNPump off
- 10490 unset %barna_asn_pump_running
- 10491 unset %barna_asn_pump_armed
- 10492 return
- 10493 }
- 10494
- 10495 _barna_q_clear_ghost_light
- 10496
- 10497 var %running = %barna_q_running
- 10498 if (%running == $null) var %running = 0
- 10499
- 10500 ; Si hay consulta ASN viva, no procesar ni tocar estados. El heartbeat sigue vivo.
- 10501 if (%running > 0) {
- 10502 _barna_asn_pump_stop_if_idle
- 10503 return
- 10504 }
- 10505
- 10506 _barna_q_sanity
- 10507
- 10508 if ((%barna_q_items == $null) && (%barna_q_low_items == $null)) {
- 10509 _barna_asn_pump_stop_if_idle
- 10510 return
- 10511 }
- 10512
- 10513 ; Procesa como maximo hasta workers actuales; si hay cola alta permite 2.
- 10514 ; VARHYGIENE5: si q_process queda bloqueado por estado viejo, hacemos
- 10515 ; un arranque directo de un solo ID para evitar cola ASN dormida.
- 10516 unset %barna_q_process_busy
- 10517 _barna_q_process
- 10518
- 10519 var %running2 = %barna_q_running
- 10520 if (%running2 == $null) var %running2 = 0
- 10521
- 10522 if ((%running2 == 0) && ($_barna_asn_queue_has_items == 1)) {
- 10523 _barna_asn_direct_start_one
- 10524 }
- 10525
- 10526 _barna_asn_pump_stop_if_idle
- 10527}
- 10528
- 10529alias _barna_q_schedule {
- 10530 _barna_core_start
- 10531
- 10532 ; Motor ASN unificado: evitamos mantener BarnaASNQ y BarnaASNPump a la vez.
- 10533 ; La bomba BarnaASNPump es el unico timer de la cola ASN.
- 10534 _barna_asn_pump_start_if_needed
- 10535}
- 10536
- 10537alias _barna_q_fire {
- 10538 ; Compatibilidad con timers antiguos que pudieran quedar vivos tras cargar versiones previas.
- 10539 unset %barna_q_scheduled
- 10540 unset %barna_q_prune_last
- 10541 _barna_q_process
- 10542 _barna_asn_pump_start_if_needed
- 10543}
- 10544
- 10545alias _barna_q_stop_timeout {
- 10546 if ($1 == $null) return
- 10547
- 10548 var %id = $1
- 10549 var %t = [ [ $+(%,barna_q_totimer.,%id) ] ]
- 10550
- 10551 if (%t != $null) {
- 10552 .timer $+ %t off
- 10553 }
- 10554
- 10555 unset %barna_q_totimer. $+ %id
- 10556}
- 10557
- 10558alias _barna_q_remove {
- 10559 if ($1 == $null) return
- 10560
- 10561 var %id = $1
- 10562 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10563 var %ln = $lower(%nick)
- 10564 var %rt = [ [ $+(%,barna_q_retry_timer.,%id) ] ]
- 10565
- 10566 _barna_q_stop_timeout %id
- 10567 noop $_barna_sock_state_purge_id(%id)
- 10568
- 10569 if (%rt != $null) {
- 10570 .timer $+ %rt off
- 10571 }
- 10572
- 10573 unset %barna_q_deferred. $+ %id
- 10574 unset %barna_q_retry_timer. $+ %id
- 10575
- 10576 if (%barna_q_items != $null) {
- 10577 var %newitems = $remtok(%barna_q_items,%id,1,44)
- 10578
- 10579 if (%newitems == $null) unset %barna_q_items
- 10580 else set %barna_q_items %newitems
- 10581 }
- 10582
- 10583 if (%barna_q_low_items != $null) {
- 10584 var %newlowitems = $remtok(%barna_q_low_items,%id,1,44)
- 10585
- 10586 if (%newlowitems == $null) unset %barna_q_low_items
- 10587 else set %barna_q_low_items %newlowitems
- 10588 }
- 10589
- 10590 unset %barna_q_low. $+ %id
- 10591
- 10592 if (%nick != $null) {
- 10593 unset %barna_q_active. $+ %ln
- 10594 unset %barna_q_pending. $+ %ln
- 10595 unset %barna_q_finished. $+ %ln
- 10596 }
- 10597
- 10598 ; Limpieza de socket seguro por ID.
- 10599 var %sockid = ipinfo $+ %id
- 10600 if ($sock(%sockid)) sockclose %sockid
- 10601 var %sockid_old = ipinfo_ $+ %id
- 10602 if ($sock(%sockid_old)) sockclose %sockid_old
- 10603 unset %barna_sock_nick. $+ %id
- 10604 unset %barna_sock_ip. $+ %id
- 10605 unset %barna_sock_id. $+ %id
- 10606 unset %barna_sock_name. $+ %id
- 10607 unset %barna_sock_expected. $+ %id
- 10608 unset %barna_sock_opened. $+ %id
- 10609
- 10610 unset %barna_q_nick. $+ %id
- 10611 unset %barna_q_ip. $+ %id
- 10612 unset %barna_q_chans. $+ %id
- 10613 unset %barna_q_try. $+ %id
- 10614 unset %barna_q_ts. $+ %id
- 10615 noop $_barna_q_idle_gc
- 10616 _barna_asn_pump_stop_if_idle
- 10617}
- 10618
- 10619
- 10620alias _barna_q_remove_for_nick {
- 10621 if ($1 == $null) return 0
- 10622
- 10623 var %nick = $1
- 10624 var %reason = $2-
- 10625 var %ln = $lower(%nick)
- 10626 var %removed = 0
- 10627 var %id = [ [ $+(%,barna_q_active.,%ln) ] ]
- 10628
- 10629 if (%id != $null) {
- 10630 _barna_dbg QUEUE remove por nick protegido activo: id= %id nick= %nick reason= %reason
- 10631 _barna_q_remove %id
- 10632 inc %removed
- 10633 }
- 10634
- 10635 var %pid = [ [ $+(%,barna_q_pending.,%ln) ] ]
- 10636 if (%pid != $null) {
- 10637 _barna_dbg QUEUE remove por nick protegido pendiente: id= %pid nick= %nick reason= %reason
- 10638 _barna_q_remove %pid
- 10639 inc %removed
- 10640 }
- 10641
- 10642 var %i = 1
- 10643 while (%i <= $numtok(%barna_q_items,44)) {
- 10644 var %qid = $gettok(%barna_q_items,%i,44)
- 10645 var %qn = [ [ $+(%,barna_q_nick.,%qid) ] ]
- 10646
- 10647 if ($lower(%qn) == %ln) {
- 10648 _barna_dbg QUEUE remove por nick protegido en lista normal: id= %qid nick= %nick reason= %reason
- 10649 _barna_q_remove %qid
- 10650 inc %removed
- 10651 continue
- 10652 }
- 10653
- 10654 inc %i
- 10655 }
- 10656
- 10657 var %j = 1
- 10658 while (%j <= $numtok(%barna_q_low_items,44)) {
- 10659 var %qid2 = $gettok(%barna_q_low_items,%j,44)
- 10660 var %qn2 = [ [ $+(%,barna_q_nick.,%qid2) ] ]
- 10661
- 10662 if ($lower(%qn2) == %ln) {
- 10663 _barna_dbg QUEUE remove por nick protegido en lista baja: id= %qid2 nick= %nick reason= %reason
- 10664 _barna_q_remove %qid2
- 10665 inc %removed
- 10666 continue
- 10667 }
- 10668
- 10669 inc %j
- 10670 }
- 10671
- 10672 return %removed
- 10673}
- 10674
- 10675alias _barna_q_prune {
- 10676 if (%barna_q_items == $null) return
- 10677
- 10678 var %i = 1
- 10679 var %now = $ctime
- 10680 var %stale = %barna_q_stale_secs
- 10681
- 10682 if (%stale !isnum 60-) var %stale = 300
- 10683
- 10684 while (%i <= $numtok(%barna_q_items,44)) {
- 10685 var %id = $gettok(%barna_q_items,%i,44)
- 10686 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10687 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10688 var %ts = [ [ $+(%,barna_q_ts.,%id) ] ]
- 10689
- 10690 if (%nick == $null) || (%ip == $null) {
- 10691 _barna_dbg QUEUE prune invalido: id= %id
- 10692 _barna_q_remove %id
- 10693 continue
- 10694 }
- 10695
- 10696 if (%ts != $null) {
- 10697 if ($calc(%now - %ts) > %stale) {
- 10698 _barna_dbg QUEUE prune viejo: id= %id nick= %nick ip= %ip edad= $calc(%now - %ts)
- 10699 _barna_q_remove %id
- 10700 continue
- 10701 }
- 10702 }
- 10703
- 10704 inc %i
- 10705 }
- 10706}
- 10707
- 10708alias _barna_q_prune_low {
- 10709 if (%barna_q_low_items == $null) return
- 10710
- 10711 var %i = 1
- 10712 var %now = $ctime
- 10713 var %stale = %barna_q_stale_secs
- 10714
- 10715 if (%stale !isnum 60-) var %stale = 300
- 10716
- 10717 while (%i <= $numtok(%barna_q_low_items,44)) {
- 10718 var %id = $gettok(%barna_q_low_items,%i,44)
- 10719 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10720 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10721 var %ts = [ [ $+(%,barna_q_ts.,%id) ] ]
- 10722
- 10723 if (%nick == $null) || (%ip == $null) {
- 10724 _barna_dbg QUEUE baja prune invalido: id= %id
- 10725 _barna_q_remove %id
- 10726 continue
- 10727 }
- 10728
- 10729 if (%ts != $null) {
- 10730 if ($calc(%now - %ts) > %stale) {
- 10731 _barna_dbg QUEUE baja prune viejo: id= %id nick= %nick ip= %ip edad= $calc(%now - %ts)
- 10732 _barna_q_remove %id
- 10733 continue
- 10734 }
- 10735 }
- 10736
- 10737 inc %i
- 10738 }
- 10739}
- 10740
- 10741alias _barna_q_running_inc {
- 10742 var %r = %barna_q_running
- 10743 if (%r == $null) var %r = 0
- 10744 inc %r
- 10745 set -u300 %barna_q_running %r
- 10746}
- 10747
- 10748alias _barna_q_running_dec {
- 10749 var %r = %barna_q_running
- 10750 if (%r == $null) var %r = 0
- 10751 dec %r
- 10752
- 10753 if (%r < 0) var %r = 0
- 10754
- 10755 if (%r == 0) unset %barna_q_running
- 10756 else set -u300 %barna_q_running %r
- 10757}
- 10758
- 10759; ------------------------------------------------------------
- 10760; BLOQUE 9.3.1
- 10761; REINTENTO DIFERIDO CON BACKOFF
- 10762; ------------------------------------------------------------
- 10763
- 10764alias _barna_q_retry_delay {
- 10765 if ($1 == $null) return 30
- 10766
- 10767 var %try = $1
- 10768 var %base = %barna_q_retry_base_secs
- 10769 var %maxb = %barna_q_retry_max_backoff
- 10770 var %delay
- 10771
- 10772 if (%base !isnum 5-) var %base = 30
- 10773 if (%maxb !isnum 30-) var %maxb = 240
- 10774 if (%maxb < %base) var %maxb = %base
- 10775
- 10776 if (%try <= 1) var %delay = %base
- 10777 elseif (%try == 2) var %delay = $calc(%base * 2)
- 10778 elseif (%try == 3) var %delay = $calc(%base * 4)
- 10779 else var %delay = $calc(%base * 8)
- 10780
- 10781 if (%delay > %maxb) var %delay = %maxb
- 10782
- 10783 return %delay
- 10784}
- 10785
- 10786alias _barna_q_retry_schedule {
- 10787 if ($1 == $null) return
- 10788
- 10789 var %id = $1
- 10790 var %reason = $2-
- 10791 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10792 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10793 var %try = [ [ $+(%,barna_q_try.,%id) ] ]
- 10794
- 10795 if (%nick == $null) || (%ip == $null) {
- 10796 _barna_q_remove %id
- 10797 return
- 10798 }
- 10799
- 10800 if (%try == $null) var %try = 1
- 10801
- 10802 var %ln = $lower(%nick)
- 10803 var %delay = $_barna_q_retry_delay(%try)
- 10804 var %tn = BarnaQRetry_ $+ %id
- 10805
- 10806 var %oldt = [ [ $+(%,barna_q_retry_timer.,%id) ] ]
- 10807 if (%oldt != $null) {
- 10808 .timer $+ %oldt off
- 10809 }
- 10810
- 10811 set -u120 %barna_q_deferred. $+ %id 1
- 10812 set -u120 %barna_q_retry_timer. $+ %id %tn
- 10813 set -u90 %barna_q_pending. $+ %ln %id
- 10814
- 10815 _barna_dbg QUEUE retry diferido: id= %id nick= %nick ip= %ip try= %try delay= %delay reason= %reason
- 10816
- 10817 .timer $+ %tn 1 %delay _barna_q_requeue_now %id
- 10818}
- 10819
- 10820alias _barna_q_requeue_now {
- 10821 if ($1 == $null) return
- 10822
- 10823 var %id = $1
- 10824 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10825 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10826
- 10827 unset %barna_q_deferred. $+ %id
- 10828 unset %barna_q_retry_timer. $+ %id
- 10829
- 10830 if (%nick == $null) || (%ip == $null) {
- 10831 _barna_q_remove %id
- 10832 _barna_q_schedule 1
- 10833 return
- 10834 }
- 10835
- 10836 var %ln = $lower(%nick)
- 10837
- 10838 if ([ [ $+(%,barna_q_active.,%ln) ] ] != $null) {
- 10839 _barna_q_retry_schedule %id ACTIVE_STILL_PRESENT
- 10840 return
- 10841 }
- 10842
- 10843 if ([ [ $+(%,barna_q_low.,%id) ] ] == 1) {
- 10844 if (%barna_q_low_items == $null) {
- 10845 set %barna_q_low_items %id
- 10846 }
- 10847 else {
- 10848 if (!$istok(%barna_q_low_items,%id,44)) {
- 10849 set %barna_q_low_items $addtok(%barna_q_low_items,%id,44)
- 10850 }
- 10851 }
- 10852 }
- 10853 else {
- 10854 if (%barna_q_items == $null) {
- 10855 set %barna_q_items %id
- 10856 }
- 10857 else {
- 10858 if (!$istok(%barna_q_items,%id,44)) {
- 10859 set %barna_q_items $addtok(%barna_q_items,%id,44)
- 10860 }
- 10861 }
- 10862 }
- 10863
- 10864 set -u90 %barna_q_pending. $+ %ln %id
- 10865 set -u90 %barna_q_ts. $+ %id $ctime
- 10866
- 10867 if ([ [ $+(%,barna_q_low.,%id) ] ] == 1) {
- 10868 _barna_dbg QUEUE baja reencolado diferido: id= %id nick= %nick ip= %ip low_total= $numtok(%barna_q_low_items,44)
- 10869 }
- 10870 else {
- 10871 _barna_dbg QUEUE reencolado diferido: id= %id nick= %nick ip= %ip total= $numtok(%barna_q_items,44)
- 10872 }
- 10873
- 10874 _barna_q_schedule 1
- 10875}
- 10876
- 10877alias _barna_q_process {
- 10878 ; Motor ASN balanced ASNFAST:
- 10879 ; 1 worker normal; 2 workers desde cola ASN >= umbral.
- 10880 ; Usa el contador real de sockets para evitar quedar parado con running fantasma.
- 10881 if (%barna_q_process_busy == 1) return
- 10882 set -u10 %barna_q_process_busy 1
- 10883
- 10884 _barna_q_sanity
- 10885 _barna_q_clear_ghost_light
- 10886
- 10887 var %running = %barna_q_running
- 10888 if (%running == $null) var %running = 0
- 10889
- 10890 var %socks_now = $_barna_ipinfo_sock_count
- 10891 var %last_start = %barna_q_last_start_ts
- 10892 var %grace = %barna_q_start_grace_secs
- 10893 if (%grace !isnum 0-) var %grace = 0
- 10894
- 10895 ; Si no hay sockets reales, limpiar running fantasma de forma conservadora.
- 10896 if ((%running > 0) && (%socks_now == 0)) {
- 10897 _barna_q_clear_ghost_light
- 10898 var %running = %barna_q_running
- 10899 if (%running == $null) var %running = 0
- 10900 }
- 10901
- 10902 var %workers = $_barna_asn_workers_now
- 10903
- 10904 while ((%running < %workers) && ((%barna_q_items != $null) || (%barna_q_low_items != $null))) {
- 10905 var %lowmode = 0
- 10906
- 10907 if (%barna_q_items != $null) {
- 10908 var %id = $gettok(%barna_q_items,1,44)
- 10909 var %newitems = $remtok(%barna_q_items,%id,1,44)
- 10910
- 10911 if (%newitems == $null) unset %barna_q_items
- 10912 else set %barna_q_items %newitems
- 10913 }
- 10914 else {
- 10915 var %id = $gettok(%barna_q_low_items,1,44)
- 10916 var %newlowitems = $remtok(%barna_q_low_items,%id,1,44)
- 10917 var %lowmode = 1
- 10918
- 10919 if (%newlowitems == $null) unset %barna_q_low_items
- 10920 else set %barna_q_low_items %newlowitems
- 10921 }
- 10922
- 10923 if (%id == $null) break
- 10924
- 10925 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10926 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10927
- 10928 if (%nick == $null) || (%ip == $null) {
- 10929 _barna_q_remove %id
- 10930 var %running = %barna_q_running
- 10931 if (%running == $null) var %running = 0
- 10932 continue
- 10933 }
- 10934
- 10935 ; Build 96: si mientras esperaba cola ya entro cache ASN para esta IP,
- 10936 ; aplicar cache ahora y no abrir socket ipinfo innecesario.
- 10937 if ($_barna_q_fastcache_apply(%id,Q_PROCESS)) {
- 10938 var %running = %barna_q_running
- 10939 if (%running == $null) var %running = 0
- 10940 continue
- 10941 }
- 10942
- 10943 unset %barna_q_pending. $+ $lower(%nick)
- 10944 set -u300 %barna_q_active. $+ $lower(%nick) %id
- 10945
- 10946 if (%lowmode == 1) {
- 10947 _barna_dbg QUEUE baja toma turno ultra-safe turbo: id= %id nick= %nick ip= %ip workers= %workers normal_total= $numtok(%barna_q_items,44) low_total= $numtok(%barna_q_low_items,44)
- 10948 }
- 10949 else {
- 10950 _barna_dbg QUEUE toma turno ultra-safe turbo: id= %id nick= %nick ip= %ip workers= %workers normal_total= $numtok(%barna_q_items,44) low_total= $numtok(%barna_q_low_items,44)
- 10951 }
- 10952
- 10953 _barna_q_start %id
- 10954
- 10955 var %running = %barna_q_running
- 10956 if (%running == $null) var %running = 0
- 10957 }
- 10958
- 10959 unset %barna_q_process_busy
- 10960 _barna_asn_pump_start_if_needed
- 10961}
- 10962alias _barna_q_start {
- 10963 if ($1 == $null) return
- 10964
- 10965 var %id = $1
- 10966 var %nick = [ [ $+(%,barna_q_nick.,%id) ] ]
- 10967 var %ip = [ [ $+(%,barna_q_ip.,%id) ] ]
- 10968
- 10969 if (%nick == $null) || (%ip == $null) {
- 10970 _barna_q_remove %id
- 10971 return
- 10972 }
- 10973
- 10974 var %try = [ [ $+(%,barna_q_try.,%id) ] ]
- 10975 if (%try == $null) var %try = 0
- 10976 inc %try
- 10977
- 10978 set -u180 %barna_q_try. $+ %id %try
- 10979 set -u300 %barna_q_active. $+ $lower(%nick) %id
- 10980 unset %barna_q_finished. $+ $lower(%nick)
- 10981
- 10982 set -u90 %temp_ip_ $+ %nick %ip
- 10983 unset %asn_val. $+ %nick
- 10984 unset %as_name_val. $+ %nick
- 10985 unset %barna_asn_done. $+ $lower(%nick)
- 10986 unset %barna_sock_timeout_seen. $+ $lower(%nick)
- 10987 set -u90 %barna_rx. $+ $lower(%nick) 0
- 10988
- 10989 ; VARHYGIENE9: socket por ID de cola con nombre simple ipinfo<ID>, no por nick.
- 10990 ; Esto evita caracteres problemáticos y colisiones cuando el nick cambia o se repite.
- 10991 var %sock_name = $_barna_sock_name(%nick,%id)
- 10992
- 10993 ; Si quedó un socket viejo con el mismo ID, lo cerramos antes de abrir.
- 10994 if ($sock(%sock_name)) sockclose %sock_name
- 10995
- 10996 set -u20 %barna_sock_nick. $+ %id %nick
- 10997 set -u20 %barna_sock_ip. $+ %id %ip
- 10998 set -u20 %barna_sock_id. $+ %id %id
- 10999 set -u20 %barna_sock_expected. $+ %id %sock_name
- 11000 unset %barna_sock_opened. $+ %id
- 11001
- 11002 _barna_q_running_inc
- 11003 set -u60 %barna_q_last_start_ts $ctime
- 11004 set -u60 %barna_q_last_start_id %id
- 11005 set -u60 %barna_q_last_start_sock %sock_name
- 11006
- 11007 if ([ [ $+(%,barna_q_low.,%id) ] ] == 1) {
- 11008 _barna_dbg QUEUE baja consulta: id= %id try= %try nick= %nick ip= %ip sock= %sock_name running= %barna_q_running
- 11009 }
- 11010 else {
- 11011 _barna_dbg QUEUE consulta: id= %id try= %try nick= %nick ip= %ip sock= %sock_name running= %barna_q_running
- 11012 }
- 11013
- 11014 sockopen -e %sock_name api.ipinfo.io 443
- 11015
- 11016 ; VARHYGIENE19: si sockopen no deja socket visible, cerrar el intento
- 11017 ; inmediatamente para no quedar running=1 con sockets=0.
- 11018 if (!$sock(%sock_name)) {
- 11019 _barna_dbg QUEUE sockopen sin socket visible: id= %id nick= %nick ip= %ip sock= %sock_name
- 11020 _barna_q_retry_or_done %nick SOCKOPEN_NO_SOCKET
- 11021 return
- 11022 }
- 11023
- 11024 var %sockto = %barna_sock_timeout_secs
- 11025 if (%sockto !isnum 10-) var %sockto = 30
- 11026
- 11027 var %totimer = BarnaSockTO_ $+ %id
- 11028 set -u300 %barna_q_totimer. $+ %id %totimer
- 11029
- 11030 .timer $+ %totimer 1 %sockto _barna_sock_timeout %nick %sock_name %id
- 11031}
- 11032
- 11033alias _barna_q_done {
- 11034 if ($1 == $null) return
- 11035
- 11036 var %nick = $1
- 11037 var %ln = $lower(%nick)
- 11038 var %id = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11039
- 11040 _barna_q_running_dec
- 11041
- 11042 if (%id != $null) {
- 11043 _barna_dbg QUEUE done: id= %id nick= %nick motivo= $2-
- 11044 _barna_q_remove %id
- 11045 }
- 11046
- 11047 _barna_lookup_timer_off %nick
- 11048
- 11049 unset %barna_lookup. $+ %ln
- 11050 unset %barna_lookup_chans. $+ %ln
- 11051 unset %barna_qry. $+ %ln
- 11052
- 11053 var %delay = %barna_q_delay
- 11054 if (%delay !isnum 0-) var %delay = 3
- 11055
- 11056 _barna_q_schedule %delay
- 11057}
- 11058
- 11059alias _barna_q_retry_or_done {
- 11060 if ($1 == $null) return
- 11061
- 11062 var %nick = $1
- 11063 var %ln = $lower(%nick)
- 11064 var %reason = $2-
- 11065 var %id = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11066
- 11067 if (%id == $null) {
- 11068 _barna_cleanup_done %nick
- 11069 _barna_q_schedule 1
- 11070 return
- 11071 }
- 11072
- 11073 var %try = [ [ $+(%,barna_q_try.,%id) ] ]
- 11074 if (%try == $null) var %try = 0
- 11075
- 11076 var %max = %barna_q_max_retries
- 11077 if (%max !isnum 0-) var %max = 4
- 11078
- 11079 _barna_q_stop_timeout %id
- 11080
- 11081 unset %barna_q_active. $+ %ln
- 11082 unset %barna_q_finished. $+ %ln
- 11083
- 11084 _barna_q_running_dec
- 11085 _barna_cleanup_done %nick
- 11086
- 11087 if (%try <= %max) {
- 11088 _barna_q_retry_schedule %id %reason
- 11089 _barna_q_schedule 1
- 11090 return
- 11091 }
- 11092
- 11093 _barna_dbg QUEUE fallo final: id= %id nick= %nick try= %try max= %max reason= %reason
- 11094
- 11095 _barna_q_remove %id
- 11096
- 11097 _barna_lookup_timer_off %nick
- 11098
- 11099 unset %barna_lookup. $+ %ln
- 11100 unset %barna_lookup_chans. $+ %ln
- 11101 unset %barna_qry. $+ %ln
- 11102
- 11103 var %delay2 = %barna_q_delay
- 11104 if (%delay2 !isnum 0-) var %delay2 = 3
- 11105
- 11106 _barna_q_schedule %delay2
- 11107}
- 11108
- 11109; ------------------------------------------------------------
- 11110; BLOQUE 10
- 11111; SOCKET AUTOMATICO
- 11112; ------------------------------------------------------------
- 11113
- 11114on *:sockopen:ipinfo*:{
- 11115 if (%barna_addon != 1) {
- 11116 sockclose $sockname
- 11117 return
- 11118 }
- 11119
- 11120 var %nick_id = $_barna_sock_to_nick($sockname)
- 11121 var %ln = $lower(%nick_id)
- 11122
- 11123 if (%nick_id == $null) {
- 11124 sockclose $sockname
- 11125 return
- 11126 }
- 11127
- 11128 if ($sockerr) {
- 11129 _barna_dbg SOCKOPEN ERROR: sock= $sockname nick= %nick_id err= $sockerr
- 11130 sockclose $sockname
- 11131 _barna_q_retry_or_done %nick_id SOCKOPEN_ERROR
- 11132 return
- 11133 }
- 11134
- 11135 set -u20 %barna_sock. $+ %ln $sockname
- 11136
- 11137 var %qid = $_barna_sock_to_id($sockname)
- 11138 if (%qid != $null) {
- 11139 set -u20 %barna_sock_name. $+ %qid $sockname
- 11140 set -u20 %barna_sock_opened. $+ %qid 1
- 11141 }
- 11142 var %ip_val
- 11143
- 11144 if (%qid != $null) var %ip_val = [ [ $+(%,barna_sock_ip.,%qid) ] ]
- 11145 if (%ip_val == $null) var %ip_val = [ [ $+(%,temp_ip_,%nick_id) ] ]
- 11146
- 11147 if (%ip_val == $null) {
- 11148 _barna_dbg SOCKOPEN ERROR sin IP: sock= $sockname nick= %nick_id
- 11149 sockclose $sockname
- 11150 _barna_q_retry_or_done %nick_id SIN_IP
- 11151 return
- 11152 }
- 11153
- 11154 _barna_dbg SOCKOPEN HTTPS OK: sock= $sockname ssl= $sock($sockname).ssl nick= %nick_id ip= %ip_val -> GET
- 11155
- 11156 sockwrite -n $sockname GET /lite/ $+ %ip_val $+ ?token=ecc8eaec4dc0de HTTP/1.1
- 11157 sockwrite -n $sockname Host: api.ipinfo.io
- 11158 sockwrite -n $sockname Connection: close
- 11159 sockwrite -n $sockname Accept: application/json
- 11160 sockwrite -n $sockname Accept-Encoding: identity
- 11161 sockwrite -n $sockname User-Agent: mIRC-BarnaAddon
- 11162 sockwrite -n $sockname $crlf
- 11163}
- 11164
- 11165alias _barna_sock_timeout {
- 11166 if ($1 == $null) return
- 11167 if ($2 == $null) return
- 11168
- 11169 var %nick = $1
- 11170 var %sock = $2
- 11171 var %id = $3
- 11172 var %ln = $lower(%nick)
- 11173 var %cur = [ [ $+(%,barna_sock.,%ln) ] ]
- 11174
- 11175 ; VARHYGIENE8: el timeout debe funcionar aunque el socket nunca haya llegado
- 11176 ; a disparar sockopen. Antes, si %barna_sock.nick no existia, salia con return
- 11177 ; y dejaba running fantasma para siempre.
- 11178 if (%id != $null) {
- 11179 var %active = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11180 var %expected = [ [ $+(%,barna_sock_expected.,%id) ] ]
- 11181
- 11182 if ((%active != %id) && (%barna_q_last_start_id != %id)) return
- 11183 if ((%expected != $null) && (%expected != %sock)) return
- 11184 }
- 11185 else {
- 11186 if ((%cur != $null) && (%cur != %sock)) return
- 11187 }
- 11188
- 11189 set -u30 %barna_sock_timeout_seen. $+ %ln 1
- 11190
- 11191 ; VARHYGIENE19: si el timeout corresponde al lastid pero se perdio
- 11192 ; %barna_q_active.<nick>, lo reconstruimos para que _barna_q_retry_or_done
- 11193 ; pueda decrementar running y limpiar el ID.
- 11194 if (%id != $null) {
- 11195 var %active_now = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11196 if ((%active_now == $null) && (%barna_q_last_start_id == %id)) {
- 11197 set -u120 %barna_q_active. $+ %ln %id
- 11198 }
- 11199 }
- 11200
- 11201 _barna_dbg TIMEOUT SOCKET: nick= %nick sock= %sock id= %id cur= %cur opened= [ [ $+(%,barna_sock_opened.,%id) ] ]
- 11202
- 11203 if ($sock(%sock)) sockclose %sock
- 11204
- 11205 if (%id != $null) {
- 11206 unset %barna_sock_expected. $+ %id
- 11207 unset %barna_sock_opened. $+ %id
- 11208 unset %barna_sock_name. $+ %id
- 11209 }
- 11210
- 11211 _barna_q_retry_or_done %nick TIMEOUT
- 11212 noop $_barna_sock_state_purge_id(%id)
- 11213}
- 11214
- 11215on *:sockread:ipinfo*:{
- 11216 if (%barna_addon != 1) {
- 11217 sockclose $sockname
- 11218 return
- 11219 }
- 11220
- 11221 var %nick_id = $_barna_sock_to_nick($sockname)
- 11222 var %ln = $lower(%nick_id)
- 11223 var %linea
- 11224
- 11225 if ([ [ $+(%,barna_asn_done.,%ln) ] ] == 1) {
- 11226 _barna_dbg ASN duplicado ignorado: nick= %nick_id sock= $sockname
- 11227 noop $_barna_sock_state_purge_sock($sockname)
- 11228 sockclose $sockname
- 11229 return
- 11230 }
- 11231
- 11232 sockread %linea
- 11233 if ($sockbrk) return
- 11234
- 11235 var %rx = [ [ $+(%,barna_rx.,%ln) ] ]
- 11236 if (%rx == $null) var %rx = 0
- 11237 var %rx = $calc(%rx + 1)
- 11238 set -u10 %barna_rx. $+ %ln %rx
- 11239
- 11240 if ((%barna_debug == 1) && (%barna_debug_rx == 1)) {
- 11241 if (%rx <= 20) {
- 11242 if (%linea != $null) {
- 11243 _barna_debug_window
- 11244 echo @BarnaASNDebug $timestamp $chr(3) $+ 12 $+ [BARNA-RX] $chr(15) $+ $chr(32) $+ %nick_id $+ $chr(32) $+ : $chr(32) $+ %linea
- 11245 }
- 11246 }
- 11247 }
- 11248
- 11249 if ($regex(%linea,/"asn"\s*:\s*"(AS\d+)"/i)) {
- 11250 set -u15 %asn_val. $+ %nick_id $regml(1)
- 11251 }
- 11252 else {
- 11253 if ($regex(%linea,/\b(AS\d+)\b/i)) {
- 11254 set -u15 %asn_val. $+ %nick_id $regml(1)
- 11255 }
- 11256 }
- 11257
- 11258 if ($regex(%linea,/"as_name"\s*:\s*"([^"]+)"/i)) {
- 11259 set -u15 %as_name_val. $+ %nick_id $regml(1)
- 11260 }
- 11261 else {
- 11262 if ([ [ $+(%,as_name_val.,%nick_id) ] ] == $null) {
- 11263 if ($regex(%linea,/"name"\s*:\s*"([^"]+)"/i)) {
- 11264 set -u15 %as_name_val. $+ %nick_id $regml(1)
- 11265 }
- 11266 }
- 11267 }
- 11268
- 11269 var %asn = [ [ $+(%,asn_val.,%nick_id) ] ]
- 11270 var %isp = [ [ $+(%,as_name_val.,%nick_id) ] ]
- 11271
- 11272 if ((%asn != $null) && (%isp != $null)) {
- 11273 if ([ [ $+(%,barna_asn_done.,%ln) ] ] == 1) {
- 11274 _barna_dbg ASN duplicado ignorado: nick= %nick_id sock= $sockname
- 11275 noop $_barna_sock_state_purge_sock($sockname)
- 11276 sockclose $sockname
- 11277 return
- 11278 }
- 11279
- 11280 set -u8 %barna_asn_done. $+ %ln 1
- 11281
- 11282 var %qid = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11283 var %ip_val = [ [ $+(%,temp_ip_,%nick_id) ] ]
- 11284 var %seen = $_barna_seen_get(%nick_id)
- 11285
- 11286 if (%seen == $null) {
- 11287 if (%qid != $null) {
- 11288 var %seen = [ [ $+(%,barna_q_chans.,%qid) ] ]
- 11289 _barna_dbg ASN usando canales guardados: nick= %nick_id canales= %seen
- 11290 }
- 11291 }
- 11292
- 11293 var %allseen = $_barna_echo_chans_for_nick(%nick_id,%seen)
- 11294 if (%allseen != $null) var %seen = %allseen
- 11295
- 11296 _barna_asn_cache_store %ip_val %asn %isp
- 11297
- 11298 var %dnick = $_barna_nick_display(%nick_id)
- 11299 var %mensaje = El usuario $chr(2) $+ %dnick $+ $chr(15) (IP: $+ $chr(2) $+ %ip_val $+ $chr(15) $+ ) pertenece al ISP: $chr(2) $+ %isp $+ $chr(15) Con ASN: $chr(2) $+ %asn $+ $chr(15)
- 11300 var %match = 0
- 11301 var %matchchans = $null
- 11302 var %i = 1
- 11303
- 11304 _barna_dbg ASN RESUELTO nick= %nick_id ip= %ip_val asn= %asn canales= %seen
- 11305
- 11306 while (%i <= $numtok(%seen,44)) {
- 11307 var %c = $_barna_chan_name_clean($gettok(%seen,%i,44))
- 11308
- 11309 if (%c != $null) {
- 11310 _barna_dbg ECHO canal= %c asn= %asn match= $_barna_asn_in_chan(%c,%asn)
- 11311
- 11312 if ($_barna_asn_in_chan(%c,%asn)) {
- 11313 var %match = 1
- 11314 if (%matchchans == $null) var %matchchans = %c
- 11315 else if (!$istok(%matchchans,%c,44)) var %matchchans = $addtok(%matchchans,%c,44)
- 11316 }
- 11317
- 11318 ; Build 27/89: aviso informativo con dedupe canonico por canal+nick.
- 11319 ; La sancion sigue usando solo %matchchans.
- 11320 _barna_channel_echo_asn %c %nick_id %ip_val %asn %mensaje
- 11321 }
- 11322
- 11323 inc %i
- 11324 }
- 11325
- 11326 if (%match == 0) {
- 11327 var %forcechans = $_barna_asn_match_chans_for_nick(%nick_id,%asn,%seen)
- 11328 if (%forcechans != $null) {
- 11329 var %match = 1
- 11330 var %matchchans = %forcechans
- 11331 _barna_dbg ASN MATCHFIX socket: nick= %nick_id ip= %ip_val asn= %asn chans= %matchchans
- 11332 }
- 11333 }
- 11334
- 11335 if (%match == 1) {
- 11336 _barna_apply_asn_punish %nick_id %ip_val %asn %matchchans %mensaje
- 11337 }
- 11338
- 11339 set -u10 %barna_q_finished. $+ %ln 1
- 11340
- 11341 sockclose $sockname
- 11342 _barna_cleanup_done %nick_id
- 11343 _barna_q_done %nick_id OK
- 11344 noop $_barna_sock_state_purge_sock($sockname)
- 11345 return
- 11346 }
- 11347
- 11348 if (%rx >= 250) {
- 11349 _barna_dbg RX LIMITE: nick= %nick_id sin datos completos
- 11350 sockclose $sockname
- 11351 _barna_q_retry_or_done %nick_id RX_LIMITE
- 11352 noop $_barna_sock_state_purge_sock($sockname)
- 11353 return
- 11354 }
- 11355}
- 11356
- 11357on *:sockclose:ipinfo*:{
- 11358 var %nick_id = $_barna_sock_to_nick($sockname)
- 11359
- 11360 if (%nick_id == $null) return
- 11361
- 11362 var %ln = $lower(%nick_id)
- 11363
- 11364 unset %barna_sock. $+ %ln
- 11365
- 11366 if ([ [ $+(%,barna_sock_timeout_seen.,%ln) ] ] == 1) {
- 11367 unset %barna_sock_timeout_seen. $+ %ln
- 11368 return
- 11369 }
- 11370
- 11371 if ([ [ $+(%,barna_q_finished.,%ln) ] ] == 1) {
- 11372 noop $_barna_sock_state_purge_sock($sockname)
- 11373 return
- 11374 }
- 11375 if ([ [ $+(%,barna_asn_done.,%ln) ] ] == 1) {
- 11376 noop $_barna_sock_state_purge_sock($sockname)
- 11377 return
- 11378 }
- 11379
- 11380 var %id = [ [ $+(%,barna_q_active.,%ln) ] ]
- 11381
- 11382 if (%id != $null) {
- 11383 var %asn = [ [ $+(%,asn_val.,%nick_id) ] ]
- 11384 var %isp = [ [ $+(%,as_name_val.,%nick_id) ] ]
- 11385
- 11386 if ((%asn == $null) || (%isp == $null)) {
- 11387 _barna_dbg SOCKCLOSE prematuro: nick= %nick_id id= %id asn= %asn isp= %isp
- 11388 _barna_q_retry_or_done %nick_id SOCKCLOSE
- 11389 noop $_barna_sock_state_purge_sock($sockname)
- 11390 }
- 11391 }
- 11392}
- 11393
- 11394; ------------------------------------------------------------
- 11395; BLOQUE 10.4.0
- 11396; AVISO INMEDIATO EN @Parseline2 AL DETECTAR POSITIVO
- 11397; ------------------------------------------------------------
- 11398
- 11399alias _barna_parseline_cazado {
- 11400 if ($1 == $null) return
- 11401
- 11402 var %nick = $1
- 11403 var %ip = $2
- 11404 var %chans = $3
- 11405 var %msg = $4-
- 11406 var %ln = $lower(%nick)
- 11407 var %ipkey = $replace(%ip,.,_)
- 11408 var %showchans = $replace(%chans,$chr(44),$+(,$chr(32)))
- 11409
- 11410 if (%ipkey == $null) var %ipkey = sinip
- 11411
- 11412 if ([ [ $+(%,barna_parseline_done.,%ln,.,%ipkey) ] ] == 1) return
- 11413
- 11414 set -u300 %barna_parseline_done. $+ %ln $+ . $+ %ipkey 1
- 11415
- 11416 if ((%showchans != $null) && (%msg != $null)) {
- 11417 echo @Parseline2 $timestamp $chr(2) $+ cazado $chr(15) $+ (canal/es: $chr(2) $+ %showchans $+ $chr(15) $+ ) $+ $chr(32) $+ %msg
- 11418 }
- 11419 elseif (%msg != $null) {
- 11420 echo @Parseline2 $timestamp $chr(2) $+ cazado $chr(15) $+ $chr(32) $+ %msg
- 11421 }
- 11422 else {
- 11423 echo @Parseline2 $timestamp $chr(2) $+ cazado $chr(15) $+ $chr(32) $+ El usuario $chr(2) $+ %nick $+ $chr(15) IP: $chr(2) $+ %ip $+ $chr(15)
- 11424 }
- 11425}
- 11426
- 11427; ------------------------------------------------------------
- 11428; BLOQUE 10.4.1
- 11429; SAQUIT DIFERIDO TRAS SHUN
- 11430; ------------------------------------------------------------
- 11431
- 11432alias _barna_timer_delayed_saquit {
- 11433 return BarnaSAQUIT_ $+ $ticks $+ _ $+ $rand(100,999)
- 11434}
- 11435
- 11436alias _barna_saquit_q_repair {
- 11437 var %items = $var(%barna_saquit_q_item.*,0)
- 11438
- 11439 if (%items <= 0) {
- 11440 if ((%barna_saquit_q_count_real != $null) || (%barna_saquit_q_head != $null) || (%barna_saquit_q_tail != $null)) {
- 11441 unset %barna_saquit_q_head
- 11442 unset %barna_saquit_q_tail
- 11443 unset %barna_saquit_q_count_real
- 11444 unset %barna_saquit_q_item.*
- 11445 unset %barna_saquit_q_due.*
- 11446 unset %barna_saquit_q_slot.*
- 11447 .timerBarnaSAQUITPump off
- 11448 _barna_dbg SAQUITQFIX cola sin items, indices limpiados
- 11449 }
- 11450
- 11451 return 0
- 11452 }
- 11453
- 11454 var %i = 1
- 11455 var %count = 0
- 11456 var %min = 0
- 11457 var %max = 0
- 11458
- 11459 while (%i <= %items) {
- 11460 var %v = $var(%barna_saquit_q_item.*,%i)
- 11461 var %slot = $gettok(%v,-1,46)
- 11462 var %nick = [ [ $+(%,barna_saquit_q_item.,%slot) ] ]
- 11463
- 11464 if ((%slot !isnum 1-) || (%nick == $null)) {
- 11465 if (%slot isnum 1-) {
- 11466 unset %barna_saquit_q_item. $+ %slot
- 11467 unset %barna_saquit_q_due. $+ %slot
- 11468 }
- 11469 }
- 11470 else {
- 11471 inc %count
- 11472
- 11473 if ((%min == 0) || (%slot < %min)) var %min = %slot
- 11474 if (%slot > %max) var %max = %slot
- 11475
- 11476 var %ln = $lower(%nick)
- 11477 set -u900 %barna_saquit_q_slot. $+ %ln %slot
- 11478 }
- 11479
- 11480 inc %i
- 11481 }
- 11482
- 11483 if (%count <= 0) {
- 11484 unset %barna_saquit_q_head
- 11485 unset %barna_saquit_q_tail
- 11486 unset %barna_saquit_q_count_real
- 11487 unset %barna_saquit_q_item.*
- 11488 unset %barna_saquit_q_due.*
- 11489 unset %barna_saquit_q_slot.*
- 11490 .timerBarnaSAQUITPump off
- 11491 _barna_dbg SAQUITQFIX cola vacia tras reparacion
- 11492 return 0
- 11493 }
- 11494
- 11495 if ((%barna_saquit_q_head != %min) || (%barna_saquit_q_tail != %max) || (%barna_saquit_q_count_real != %count)) {
- 11496 _barna_dbg SAQUITQFIX reparada: head_old= %barna_saquit_q_head tail_old= %barna_saquit_q_tail count_old= %barna_saquit_q_count_real head_new= %min tail_new= %max count_new= %count
- 11497 }
- 11498
- 11499 set %barna_saquit_q_head %min
- 11500 set %barna_saquit_q_tail %max
- 11501 set %barna_saquit_q_count_real %count
- 11502
- 11503 return %count
- 11504}
- 11505
- 11506alias barna.saquitfix {
- 11507 echo -s [ASN] SAQUITQFIX antes: head= %barna_saquit_q_head tail= %barna_saquit_q_tail count= %barna_saquit_q_count_real vars= $var(%barna_saquit*,0)
- 11508 noop $_barna_saquit_q_repair
- 11509 _barna_saquit_q_start
- 11510 echo -s [ASN] SAQUITQFIX despues: head= %barna_saquit_q_head tail= %barna_saquit_q_tail count= %barna_saquit_q_count_real vars= $var(%barna_saquit*,0)
- 11511}
- 11512
- 11513alias _barna_saquit_q_count {
- 11514 if (%barna_saquit_q_count_real !isnum 0-) return 0
- 11515 return %barna_saquit_q_count_real
- 11516}
- 11517
- 11518alias _barna_saquit_q_inc {
- 11519 var %c = %barna_saquit_q_count_real
- 11520 if (%c !isnum 0-) var %c = 0
- 11521 inc %c
- 11522 set %barna_saquit_q_count_real %c
- 11523}
- 11524
- 11525alias _barna_saquit_q_dec {
- 11526 var %c = %barna_saquit_q_count_real
- 11527 if (%c !isnum 0-) var %c = 0
- 11528 dec %c
- 11529 if (%c < 0) var %c = 0
- 11530 if (%c == 0) unset %barna_saquit_q_count_real
- 11531 else set %barna_saquit_q_count_real %c
- 11532}
- 11533
- 11534alias _barna_saquit_q_start {
- 11535 if (%barna_addon != 1) return
- 11536
- 11537 noop $_barna_saquit_q_repair
- 11538
- 11539 if ($_barna_saquit_q_count <= 0) {
- 11540 .timerBarnaSAQUITPump off
- 11541 return
- 11542 }
- 11543
- 11544 if ($timer(BarnaSAQUITPump) == $null) {
- 11545 .timerBarnaSAQUITPump 1 1 _barna_saquit_q_pump
- 11546 }
- 11547}
- 11548
- 11549alias _barna_saquit_q_compact_if_empty {
- 11550 if ($_barna_saquit_q_count > 0) return
- 11551
- 11552 unset %barna_saquit_q_head
- 11553 unset %barna_saquit_q_tail
- 11554 unset %barna_saquit_q_count_real
- 11555 unset %barna_saquit_q_item.*
- 11556 unset %barna_saquit_q_due.*
- 11557 unset %barna_saquit_q_slot.*
- 11558 .timerBarnaSAQUITPump off
- 11559}
- 11560
- 11561alias _barna_saquit_q_pump {
- 11562 ; VARHYGIENE40:
- 11563 ; La cola diferida SAQUIT queda desactivada porque podia acumular cientos de variables
- 11564 ; y provocar lag. Si quedan restos antiguos, se purgan sin tocar canales ni ASN.
- 11565 if (%barna_addon != 1) {
- 11566 .timerBarnaSAQUITPump off
- 11567 return
- 11568 }
- 11569
- 11570 if ($var(%barna_saquit_q_item.*,0) > 0) unset %barna_saquit_q_item.*
- 11571 if ($var(%barna_saquit_q_due.*,0) > 0) unset %barna_saquit_q_due.*
- 11572 if ($var(%barna_saquit_q_slot.*,0) > 0) unset %barna_saquit_q_slot.*
- 11573 unset %barna_saquit_q_head
- 11574 unset %barna_saquit_q_tail
- 11575 unset %barna_saquit_q_count_real
- 11576 .timerBarnaSAQUITPump off
- 11577}
- 11578
- 11579alias barna.saquitdrain {
- 11580 echo -s [ASN] SAQUITDRAIN desactivado en build 40. Purgo cola SAQUIT diferida antigua sin tocar canales/ASN.
- 11581 _barna_saquit_q_pump
- 11582}
- 11583
- 11584alias barna.saquitpurge {
- 11585 ; Limpieza manual de emergencia de SAQUIT. No toca canales ni ASN.
- 11586 .timerBarnaSAQUITPump off
- 11587 unset %barna_saquit_ip.*
- 11588 unset %barna_saquit_chans.*
- 11589 unset %barna_saquit_pending.*
- 11590 unset %barna_saquit_timer.*
- 11591 unset %barna_saquit_sent.*
- 11592 unset %barna_saquit_msg.*
- 11593 unset %barna_saquit_showchans.*
- 11594 unset %barna_saquit_q_item.*
- 11595 unset %barna_saquit_q_due.*
- 11596 unset %barna_saquit_q_slot.*
- 11597 unset %barna_saquit_q_head
- 11598 unset %barna_saquit_q_tail
- 11599 unset %barna_saquit_q_count_real
- 11600 echo -s [ASN] SAQUITPURGE ejecutado. Cola SAQUIT purgada sin tocar canales/ASN.
- 11601}
- 11602
- 11603alias _barna_schedule_delayed_saquit {
- 11604 ; VARHYGIENE41:
- 11605 ; SAQUIT diferido real de 120 segundos, sin usar cola masiva %barna_saquit_q_*.
- 11606 ; Se programa un unico timer por nick y se conserva el estado minimo.
- 11607 ; Si el nick ya no esta al vencer el timer, _barna_delayed_saquit cancela y limpia.
- 11608 if ($1 == $null) return
- 11609 if ($2 == $null) return
- 11610
- 11611 var %nick = $1
- 11612 var %ip = $2
- 11613 var %chans = $3-
- 11614 var %ln = $lower(%nick)
- 11615 var %delay = %barna_saquit_delay
- 11616
- 11617 if ($_barna_is_join_exception(%nick)) {
- 11618 _barna_dbg EXCEPTIONSAFE no programa SAQUIT: nick= %nick ip= %ip chans= %chans
- 11619 _barna_exception_cleanup_nick %nick
- 11620 return
- 11621 }
- 11622 var %timer
- 11623
- 11624 if (%delay !isnum 30-) var %delay = 120
- 11625 if (%delay < 120) var %delay = 120
- 11626
- 11627 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 11628 if (%chans == $null) return
- 11629
- 11630 ; Si habia un timer anterior para el mismo nick, se reemplaza para evitar duplicados.
- 11631 var %oldtimer = [ [ $+(%,barna_saquit_timer.,%ln) ] ]
- 11632 if (%oldtimer != $null) .timer $+ %oldtimer off
- 11633
- 11634 ; Limpia cualquier resto antiguo de cola para este nick, pero no usa cola nueva.
- 11635 var %oldslot = [ [ $+(%,barna_saquit_q_slot.,%ln) ] ]
- 11636 if (%oldslot isnum 1-) {
- 11637 unset %barna_saquit_q_item. $+ %oldslot
- 11638 unset %barna_saquit_q_due. $+ %oldslot
- 11639 set -u2 $+(%,barna_saquit_q_slot.,%ln) 0
- 11640 }
- 11641
- 11642 set -u600 %barna_saquit_ip. $+ %ln %ip
- 11643 set -u600 %barna_saquit_chans. $+ %ln %chans
- 11644 set -u600 %barna_saquit_pending. $+ %ln 1
- 11645
- 11646 var %timer = BarnaSAQUIT_ $+ $ticks
- 11647 set -u600 %barna_saquit_timer. $+ %ln %timer
- 11648
- 11649 _barna_dbg SAQUIT diferido programado sin cola: nick= %nick ip= %ip chans= %chans delay= %delay
- 11650
- 11651 .timer $+ %timer 1 %delay _barna_delayed_saquit %nick
- 11652
- 11653 ; Si quedan restos de la cola antigua, el pump solo purga restos, no procesa sanciones.
- 11654 if ($var(%barna_saquit_q_item.*,0) == 0) {
- 11655 unset %barna_saquit_q_head
- 11656 unset %barna_saquit_q_tail
- 11657 unset %barna_saquit_q_count_real
- 11658 .timerBarnaSAQUITPump off
- 11659 }
- 11660}
- 11661
- 11662alias _barna_delayed_saquit {
- 11663 if ($1 == $null) return
- 11664
- 11665 var %nick = $1
- 11666 var %ln = $lower(%nick)
- 11667 var %ip = [ [ $+(%,barna_saquit_ip.,%ln) ] ]
- 11668 if (%ip == $null) var %ip = $_barna_ip_get(%nick)
- 11669 var %chans = [ [ $+(%,barna_saquit_chans.,%ln) ] ]
- 11670 var %msg = [ [ $+(%,barna_saquit_msg.,%ln) ] ]
- 11671 var %showchans = [ [ $+(%,barna_saquit_showchans.,%ln) ] ]
- 11672 var %still = 0
- 11673 var %i = 1
- 11674 var %checkdelay = %barna_saquit_check_delay
- 11675 var %checktimer
- 11676
- 11677 if (%checkdelay !isnum 5-) var %checkdelay = 20
- 11678 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 11679
- 11680 while (%i <= $numtok(%chans,44)) {
- 11681 var %c = $gettok(%chans,%i,44)
- 11682
- 11683 if (%c != $null) {
- 11684 if ($me ison %c) {
- 11685 if (%nick ison %c) {
- 11686 var %still = 1
- 11687 }
- 11688 }
- 11689 }
- 11690
- 11691 inc %i
- 11692 }
- 11693
- 11694 set -u2 $+(%,barna_saquit_pending.,%ln) 0
- 11695 set -u2 $+(%,barna_saquit_timer.,%ln) 0
- 11696
- 11697 if (%still == 0) {
- 11698 _barna_dbg SAQUIT diferido cancelado, nick ya no esta: nick= %nick ip= %ip chans= %chans
- 11699
- 11700 _barna_saquit_cleanup_nick %nick SAQUIT_NICK_GONE
- 11701
- 11702 return
- 11703 }
- 11704
- 11705 _barna_dbg SAQUIT diferido enviado: nick= %nick ip= %ip chans= %chans check_delay= %checkdelay
- 11706
- 11707 .quote SAQUIT %nick :Ping timeout: 3 minutes.
- 11708
- 11709 set -u300 %barna_saquit_sent. $+ %ln 1
- 11710 _barna_dbg SAQUIT enviado, @Parseline2 esperara QUIT real: nick= %nick ip= %ip
- 11711
- 11712 var %checktimer = BarnaCheck_ $+ %ln $+ _ $+ $ticks
- 11713 .timer $+ %checktimer 1 %checkdelay _barna_check_saquit_result %nick %ip %chans
- 11714}
- 11715
- 11716alias _barna_check_saquit_result {
- 11717 if ($1 == $null) return
- 11718
- 11719 var %nick = $1
- 11720 var %ip = $2
- 11721 var %chans = $3
- 11722 var %still = 0
- 11723 var %i = 1
- 11724 var %finaldelay = %barna_saquit_final_delay
- 11725 var %finaltimer
- 11726
- 11727 if (%finaldelay !isnum 5-) var %finaldelay = 20
- 11728 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 11729
- 11730 while (%i <= $numtok(%chans,44)) {
- 11731 var %c = $gettok(%chans,%i,44)
- 11732
- 11733 if (%c != $null) {
- 11734 if ($me ison %c) {
- 11735 if (%nick ison %c) {
- 11736 var %still = 1
- 11737 }
- 11738 }
- 11739 }
- 11740
- 11741 inc %i
- 11742 }
- 11743
- 11744 if (%still == 0) {
- 11745 _barna_dbg SAQUIT confirmado OK: nick= %nick ip= %ip
- 11746 _barna_saquit_cleanup_nick %nick SAQUIT_OK
- 11747 return
- 11748 }
- 11749
- 11750 _barna_dbg SAQUIT fallido tras espera, envio segundo SAQUIT y SAPART: nick= %nick ip= %ip chans= %chans final_delay= %finaldelay
- 11751
- 11752 .quote SAQUIT %nick :Ping timeout: 3 minutes.
- 11753
- 11754 var %j = 1
- 11755 while (%j <= $numtok(%chans,44)) {
- 11756 var %chan = $gettok(%chans,%j,44)
- 11757
- 11758 if (%chan != $null) {
- 11759 if ($me ison %chan) {
- 11760 if (%nick ison %chan) {
- 11761 .quote SAPART %nick %chan :Ping timeout: 3 minutes.
- 11762 }
- 11763 }
- 11764 }
- 11765
- 11766 inc %j
- 11767 }
- 11768
- 11769 echo @Parseline2 $timestamp $chr(3) $+ 4 $+ [ASN-ATENCION] $chr(15) $+ SAQUIT no saco a $chr(2) $+ %nick $+ $chr(15) $+ . Enviado segundo SAQUIT + SAPART. IP: $chr(2) $+ %ip $+ $chr(15) Canales: %chans
- 11770
- 11771 var %finaltimer = BarnaFinal_ $+ $lower(%nick) $+ _ $+ $ticks
- 11772 .timer $+ %finaltimer 1 %finaldelay _barna_check_saquit_final %nick %ip %chans
- 11773}
- 11774
- 11775alias _barna_check_saquit_final {
- 11776 if ($1 == $null) return
- 11777
- 11778 var %nick = $1
- 11779 var %ip = $2
- 11780 var %chans = $3
- 11781 var %still = 0
- 11782 var %i = 1
- 11783
- 11784 if (%chans == $null) var %chans = $_barna_seen_get(%nick)
- 11785
- 11786 while (%i <= $numtok(%chans,44)) {
- 11787 var %c = $gettok(%chans,%i,44)
- 11788
- 11789 if (%c != $null) {
- 11790 if ($me ison %c) {
- 11791 if (%nick ison %c) {
- 11792 var %still = 1
- 11793 }
- 11794 }
- 11795 }
- 11796
- 11797 inc %i
- 11798 }
- 11799
- 11800 if (%still == 0) {
- 11801 _barna_dbg SAQUIT/SAPART confirmado OK: nick= %nick ip= %ip
- 11802 _barna_saquit_cleanup_nick %nick SAQUIT_FINAL_OK
- 11803 return
- 11804 }
- 11805
- 11806 _barna_dbg SAQUIT/SAPART fallido, nick sigue en canal: nick= %nick ip= %ip chans= %chans
- 11807
- 11808 echo @Parseline2 $timestamp $chr(3) $+ 4 $+ [ASN-ATENCION] $chr(15) $+ $chr(2) $+ %nick $+ $chr(15) sigue en canal incluso tras segundo SAQUIT + SAPART. IP: $chr(2) $+ %ip $+ $chr(15) Canales: %chans
- 11809
- 11810 _barna_saquit_cleanup_nick %nick SAQUIT_FINAL_FAIL
- 11811}
- 11812
- 11813; ------------------------------------------------------------
- 11814; BLOQUE 10.5
- 11815; SANCION ASN
- 11816; ------------------------------------------------------------
- 11817
- 11818alias _barna_apply_asn_punish {
- 11819 if ($1 == $null) return
- 11820 if ($2 == $null) return
- 11821 if ($3 == $null) return
- 11822 if ($4 == $null) return
- 11823
- 11824 var %nick = $1
- 11825 var %ip = $2
- 11826 var %asn = $_barna_norm_asn($3)
- 11827 var %chans = $4
- 11828 var %msg = $5-
- 11829 var %ln = $lower(%nick)
- 11830
- 11831 ; Build 135: comprobacion final inmediatamente antes de sancionar.
- 11832 ; Si el ASN fue borrado mientras la consulta estaba en curso, se cancela.
- 11833 var %activechans = $_barna_asn_filter_active_chans(%asn,%chans)
- 11834 if (%activechans == $null) {
- 11835 _barna_dbg PREFIX_OWNER_GUARD sancion cancelada: ASN ya no activo. nick= %nick ip= %ip asn= %asn canales_originales= %chans
- 11836 var %pc = 1
- 11837 while (%pc <= $numtok(%chans,44)) {
- 11838 var %pchan = $gettok(%chans,%pc,44)
- 11839 if (%pchan != $null) noop $_barna_bad_prefix_prune_channel(%pchan)
- 11840 inc %pc
- 11841 }
- 11842 return
- 11843 }
- 11844
- 11845 var %chans = %activechans
- 11846 var %showchans = $replace(%chans,$chr(44),$+(,$chr(32)))
- 11847
- 11848 if ($_barna_is_join_exception(%nick)) {
- 11849 _barna_dbg EXCEPTIONSAFE ASN match ignorado por excepcion ON JOIN: nick= %nick ip= %ip canales= %chans
- 11850 _barna_exception_cleanup_nick %nick
- 11851 return
- 11852 }
- 11853
- 11854 if ($_barna_is_privileged_nick(%nick)) {
- 11855 _barna_dbg PRIVSAFE ASN match ignorado por @/+v: nick= %nick ip= %ip canales= %chans
- 11856 _barna_privileged_cleanup_nick %nick ASN_PUNISH
- 11857 return
- 11858 }
- 11859
- 11860 _barna_bad_prefix_store %ip %asn %chans
- 11861 _barna_mark_badnick %nick %ip %chans
- 11862
- 11863 set -u900 %barna_hunted. $+ %ln 1
- 11864 set -u900 %barna_saquit_msg. $+ %ln %msg
- 11865 set -u900 %barna_saquit_showchans. $+ %ln %showchans
- 11866
- 11867 _barna_dbg ASN MATCH SHUN por IP/nick y SAQUIT diferido: nick= %nick ip= %ip asn= %asn canales= %chans
- 11868
- 11869 _barna_dbg Parseline2 pendiente hasta QUIT por ASN match: nick= %nick ip= %ip asn= %asn chans= %chans
- 11870
- 11871 _barna_shun_ip %ip Molestias en Canales (A)
- 11872 _barna_shun_nick %nick Molestias en Canales (A)
- 11873 _barna_schedule_delayed_saquit %nick %ip %chans
- 11874}
- 11875
- 11876; ------------------------------------------------------------
- 11877; BLOQUE 11
- 11878; ACCIONES DIFERIDAS COMPATIBLES
- 11879; ------------------------------------------------------------
- 11880
- 11881alias _sacando_do {
- 11882 if ($1 == $null) return
- 11883
- 11884 .quote SAQUIT $1 :Ping timeout: 3 minutes.
- 11885}
- 11886
- 11887alias _shun_do {
- 11888 if ($1 == $null) return
- 11889
- 11890 _barna_shun_nick $1 Molestias en Canales (A)
- 11891}
- 11892
- 11893; ------------------------------------------------------------
- 11894; BLOQUE 12
- 11895; CONSULTA MANUAL POR IP
- 11896; ------------------------------------------------------------
- 11897
- 11898alias asn {
- 11899 if ($1 == $null) {
- 11900 echo -a $chr(3) $+ 4 $+ Uso: $chr(15) $+ /asn <ip>
- 11901 return
- 11902 }
- 11903
- 11904 if (!$_barna_is_ipv4($1)) {
- 11905 echo -a $chr(3) $+ 4 $+ IP no válida: $chr(15) $+ $1
- 11906 return
- 11907 }
- 11908
- 11909 var %id = asnmanual_ $+ $ticks
- 11910
- 11911 set -u30 %barna_manual_ip. $+ %id $1
- 11912 set -u30 %barna_manual_win. $+ %id $active
- 11913 unset %barna_manual_asn. $+ %id
- 11914 unset %barna_manual_name. $+ %id
- 11915 unset %barna_manual_done. $+ %id
- 11916
- 11917 sockopen -e %id api.ipinfo.io 443
- 11918}
- 11919
- 11920; ------------------------------------------------------------
- 11921; BLOQUE 13
- 11922; CONSULTA MANUAL POR NICK
- 11923; ------------------------------------------------------------
- 11924
- 11925alias asn.nick {
- 11926 if ($1 == $null) {
- 11927 echo -a $chr(3) $+ 4 $+ Uso: $chr(15) $+ /asn.nick <nick>
- 11928 return
- 11929 }
- 11930
- 11931 var %nick = $1
- 11932 var %ln = $lower(%nick)
- 11933
- 11934 set -u20 %barna_manual_wait. $+ %ln 1
- 11935 set -u20 %barna_manual_win_nick. $+ %ln $active
- 11936
- 11937 _barna_whoip_send %nick
- 11938}
- 11939
- 11940; ------------------------------------------------------------
- 11941; BLOQUE 14
- 11942; SOCKET MANUAL
- 11943; ------------------------------------------------------------
- 11944
- 11945alias _barna_manual_timer_name {
- 11946 if ($1 == $null) return
- 11947 return BarnaManualTO_ $+ $remove($1,asnmanual_)
- 11948}
- 11949
- 11950alias _barna_manual_timeout_start {
- 11951 if ($1 == $null) return
- 11952
- 11953 var %tn = $_barna_manual_timer_name($1)
- 11954 var %to = 10
- 11955
- 11956 .timer $+ %tn off
- 11957 .timer $+ %tn 1 %to _barna_manual_sock_timeout $1
- 11958}
- 11959
- 11960alias _barna_manual_timeout_stop {
- 11961 if ($1 == $null) return
- 11962
- 11963 var %tn = $_barna_manual_timer_name($1)
- 11964 if (%tn != $null) .timer $+ %tn off
- 11965}
- 11966
- 11967alias _barna_manual_sock_timeout {
- 11968 if ($1 == $null) return
- 11969
- 11970 if ([ [ $+(%,barna_manual_done.,$1) ] ] == 1) {
- 11971 _barna_manual_timeout_stop $1
- 11972 return
- 11973 }
- 11974
- 11975 if ([ [ $+(%,barna_manual_ip.,$1) ] ] == $null) {
- 11976 _barna_manual_timeout_stop $1
- 11977 return
- 11978 }
- 11979
- 11980 var %win = [ [ $+(%,barna_manual_win.,$1) ] ]
- 11981 if (%win == $null) var %win = Status Window
- 11982
- 11983 if ($sock($1)) sockclose $1
- 11984
- 11985 if ([ [ $+(%,barna_manual_done.,$1) ] ] != 1) {
- 11986 echo %win $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ Tiempo de espera agotado para la consulta.
- 11987 }
- 11988
- 11989 _barna_manual_cleanup $1
- 11990}
- 11991
- 11992alias _barna_manual_cleanup {
- 11993 if ($1 == $null) return
- 11994
- 11995 _barna_manual_timeout_stop $1
- 11996
- 11997 unset %barna_manual_ip. $+ $1
- 11998 unset %barna_manual_win. $+ $1
- 11999 unset %barna_manual_asn. $+ $1
- 12000 unset %barna_manual_name. $+ $1
- 12001 unset %barna_manual_done. $+ $1
- 12002}
- 12003
- 12004on *:sockopen:asnmanual_*:{
- 12005 if ($sockerr) {
- 12006 var %win = [ [ $+(%,barna_manual_win.,$sockname) ] ]
- 12007 if (%win == $null) var %win = Status Window
- 12008 echo %win $timestamp $chr(3) $+ 4 $+ [ASN] $chr(15) $+ Error abriendo socket.
- 12009 _barna_manual_cleanup $sockname
- 12010 return
- 12011 }
- 12012
- 12013 var %ip = [ [ $+(%,barna_manual_ip.,$sockname) ] ]
- 12014
- 12015 _barna_manual_timeout_start $sockname
- 12016
- 12017 sockwrite -n $sockname GET /lite/ $+ %ip $+ ?token=ecc8eaec4dc0de HTTP/1.1
- 12018 sockwrite -n $sockname Host: api.ipinfo.io
- 12019 sockwrite -n $sockname Connection: close
- 12020 sockwrite -n $sockname Accept: application/json
- 12021 sockwrite -n $sockname Accept-Encoding: identity
- 12022 sockwrite -n $sockname User-Agent: mIRC-BarnaManualASN
- 12023 sockwrite -n $sockname $crlf
- 12024}
- 12025
- 12026on *:sockread:asnmanual_*:{
- 12027 var %linea
- 12028 sockread %linea
- 12029 if ($sockbrk) return
- 12030
- 12031 if ($regex(%linea,/"asn"\s*:\s*"(AS\d+)"/i)) {
- 12032 set -u30 %barna_manual_asn. $+ $sockname $regml(1)
- 12033 }
- 12034 else {
- 12035 if ($regex(%linea,/\b(AS\d+)\b/i)) {
- 12036 set -u30 %barna_manual_asn. $+ $sockname $regml(1)
- 12037 }
- 12038 }
- 12039
- 12040 if ($regex(%linea,/"as_name"\s*:\s*"([^"]+)"/i)) {
- 12041 set -u30 %barna_manual_name. $+ $sockname $regml(1)
- 12042 }
- 12043 else {
- 12044 if ([ [ $+(%,barna_manual_name.,$sockname) ] ] == $null) {
- 12045 if ($regex(%linea,/"name"\s*:\s*"([^"]+)"/i)) {
- 12046 set -u30 %barna_manual_name. $+ $sockname $regml(1)
- 12047 }
- 12048 }
- 12049 }
- 12050
- 12051 var %asn = [ [ $+(%,barna_manual_asn.,$sockname) ] ]
- 12052 var %name = [ [ $+(%,barna_manual_name.,$sockname) ] ]
- 12053
- 12054 if ((%asn != $null) && (%name != $null)) {
- 12055 var %ip = [ [ $+(%,barna_manual_ip.,$sockname) ] ]
- 12056 var %win = [ [ $+(%,barna_manual_win.,$sockname) ] ]
- 12057
- 12058 if (%win == $null) var %win = Status Window
- 12059
- 12060 echo %win $timestamp $chr(3) $+ 12 $+ [ASN] $chr(15) $+ La IP $chr(2) $+ %ip $+ $chr(15) $+ pertenece a $chr(2) $+ %name $+ $chr(15) $+ con ASN $chr(2) $+ %asn $+ $chr(15)
- 12061
- 12062 set -u20 %barna_manual_done. $+ $sockname 1
- 12063 _barna_manual_timeout_stop $sockname
- 12064 sockclose $sockname
- 12065 _barna_manual_cleanup $sockname
- 12066 return
- 12067 }
- 12068}
- 12069
- 12070on *:sockclose:asnmanual_*:{
- 12071 return
- 12072}
- 12073; ------------------------------------------------------------
- 12074; BLOQUE 99
- 12075; GC INTEGRADO JOINFIX
- 12076; ------------------------------------------------------------
- 12077
- 12078alias barna.joinfixgc.run {
- 12079 if (%barna_addon != 1) {
- 12080 .timerbarna_joinfix_gc off
- 12081 return
- 12082 }
- 12083
- 12084 var %before = $var(%barna*joinfix*,0)
- 12085
- 12086 .unset %barna_joinfix_q_item.*
- 12087 .unset %barna_joinfix_q_slot.*
- 12088 .unset %barna_joinfix_q_pending.*
- 12089 .unset %barna_joinfix_q_nick.*
- 12090 .unset %barna_joinfix_q_chans.*
- 12091 .unset %barna_joinfix_q_ts.*
- 12092 .unset %barna_joinfix_q_*
- 12093 .unset %barna_joinfix_q*
- 12094 .unset %barna_joinfix_*
- 12095 .unset %barna_joinfix*
- 12096 .unset %barna*joinfix*
- 12097 .unset %barna*join_fix*
- 12098
- 12099 var %after = $var(%barna*joinfix*,0)
- 12100
- 12101 if (%before >= 100) {
- 12102 echo -a [ASN] JOINFIXGC before= %before after= %after
- 12103 }
- 12104}
- 12105
- 12106alias barna.joinfixgc.on {
- 12107 var %jdelay = %barna_joinfix_gc_delay
- 12108 if (%jdelay !isnum 3-) var %jdelay = 5
- 12109
- 12110 .timerbarna_joinfix_gc 0 %jdelay barna.joinfixgc.run
- 12111 echo -a [ASN] JOINFIXGC activado cada %jdelay segundos
- 12112}
- 12113
- 12114alias barna.joinfixgc.off {
- 12115 .timerbarna_joinfix_gc off
- 12116 echo -a [ASN] JOINFIXGC desactivado
- 12117}
- 12118; ------------------------------------------------------------
- 12119; BLOQUE STATS RAPIDO
- 12120; /barna.stats
- 12121; ------------------------------------------------------------
- 12122
- 12123
- 12124alias barna.varfamilies {
- 12125 echo -a $+( [BARNA-CHECK-INICIO] ,$date,$chr(32),$time,$chr(32),build=,%barna_build )
- 12126 echo -a $+( [BARNA-FAM1] total=,$var(%barna_*,0),$chr(32),chan=,$var(%barna_chan.*,0),$chr(32),asn_cfg=,$var(%barna_asn.*,0),$chr(32),asn_cache_asn=,$var(%barna_asn_cache_asn.*,0),$chr(32),asn_cache_name=,$var(%barna_asn_cache_name.*,0),$chr(32),asn_cache_ts=,$var(%barna_asn_cache_ts.*,0),$chr(32),cachecap117=,%barna_cachecap117_enabled,$chr(32),hard=,%barna_asn_cache_hard_limit,$chr(32),batch=,%barna_cachecap117_batch )
- 12127 echo -a $+( [BARNA-FAM2] whoip_all=,$var(%barna_userip_*,0),$chr(32),q_item=,$var(%barna_userip_q_item.*,0),$chr(32),q_chans=,$var(%barna_userip_q_chans.*,0),$chr(32),q_pending=,$var(%barna_userip_q_pending.*,0),$chr(32),inflight=,$var(%barna_userip_inflight.*,0) )
- 12128 echo -a $+( [BARNA-FAM3] lookup=,$var(%barna_lookup.*,0),$chr(32),lookup_chans=,$var(%barna_lookup_chans.*,0),$chr(32),qry=,$var(%barna_qry.*,0),$chr(32),ipdone=,$var(%barna_ipdone.*,0),$chr(32),last_ip=,$var(%barna_last_ip.*,0),$chr(32),ip_keep=,$var(%barna_ip_keep.*,0) )
- 12129 echo -a $+( [BARNA-FAM4] sock_us=,$var(%barna_sock_*,0),$chr(32),sock_dot=,$var(%barna_sock.*,0),$chr(32),sock_name=,$var(%barna_sock_name.*,0),$chr(32),sock_nick=,$var(%barna_sock_nick.*,0),$chr(32),sock_ip=,$var(%barna_sock_ip.*,0),$chr(32),rx=,$var(%barna_rx.*,0),$chr(32),done=,$var(%barna_asn_done.*,0) )
- 12130 echo -a $+( [BARNA-FAM5] tempip=,$var(%temp_ip_*,0),$chr(32),asn_val=,$var(%asn_val.*,0),$chr(32),as_name=,$var(%as_name_val.*,0),$chr(32),echo_asn=,$var(%barna_echo_asn_seen.*,0),$chr(32),echo_seen=,$var(%barna_echo_seen.*,0),$chr(32),echo_q_vars=,$var(%barna_echo_q_*,0),$chr(32),echo_q_head=,%barna_echo_q_head,$chr(32),echo_q_tail=,%barna_echo_q_tail )
- 12131 echo -a $+( [BARNA-FAM6] q_pending=,$var(%barna_q_pending.*,0),$chr(32),q_active=,$var(%barna_q_active.*,0),$chr(32),q_state=,$var(%barna_q_state.*,0),$chr(32),q_ip=,$var(%barna_q_ip.*,0),$chr(32),q_chans=,$var(%barna_q_chans.*,0),$chr(32),q_try=,$var(%barna_q_try.*,0),$chr(32),q_items=,$numtok(%barna_q_items,44),$chr(32),q_low_items=,$numtok(%barna_q_low_items,44) )
- 12132 echo -a $+( [BARNA-FAM7] seen=,$var(%barna_seen.*,0),$chr(32),seen_display=,$var(%barna_seen_display.*,0),$chr(32),seen_rescue=,$var(%barna_seen_rescue*,0),$chr(32),autonickscan_recent=,$var(%barna_autonickscan_recent.*,0),$chr(32),badnick=,$var(%barna_badnick*,0),$chr(32),jguard=,$var(%barna_jguard*,0),$chr(32),saquit=,$var(%barna_saquit*,0) )
- 12133 echo -a $+( [BARNA-FAM8] sockets=,$sock(*,0),$chr(32),ipinfo_sockets=,$_barna_ipinfo_sock_count,$chr(32),sock_state=,$_barna_sockvar_count,$chr(32),whoip_count=,$_barna_userip_q_count )
- 12134 echo -a $+( [BARNA-CHECK-FIN] ,$date,$chr(32),$time )
- 12135}
- 12136
- 12137alias barna.stats {
- 12138 echo -a [ASN-METRICS] build= %barna_build total_vars= $var(%barna_*,0) totalmax= %barna_total_max_vars core_minimal= %barna_core_minimal no_shed= %barna_userip_no_shed lightvars= %barna_whoip_lightvars
- 12139
- 12140 echo -a [ASN-METRICS] cacheASN= $var(%barna_asn_cache_asn.*,0) cacheISP= $var(%barna_asn_cache_name.*,0) cacheTS= $var(%barna_asn_cache_ts.*,0) cachecap117= %barna_cachecap117_enabled hard= %barna_asn_cache_hard_limit batch= %barna_cachecap117_batch lookup= $var(%barna_lookup.*,0) qry= $var(%barna_qry.*,0) sockets_reales= $sock(*,0) sock_state= $_barna_sockvar_count
- 12141
- 12142 echo -a [ASN-METRICS] whoip_vars= $var(%barna_userip_*,0) whoip_q_real= $_barna_userip_q_count whoip_q_vars= $var(%barna_userip_q_*,0) last_ip= $var(%barna_last_ip.*,0) ip_keep= $var(%barna_ip_keep.*,0) ipdone= $var(%barna_ipdone.*,0) saquit= $var(%barna_saquit*,0)
- 12143
- 12144 echo -a [ASN-METRICS] seen= $var(%barna_seen.*,0) seen_display= $var(%barna_seen_display.*,0) noseen= 1 badnick_chans= $var(%barna_badnick_chans.*,0) pending= $var(%barna_pending.*,0) qstate= $var(%barna_qstate.*,0) qitems= %barna_q_items qrunning= %barna_q_running
- 12145
- 12146 echo -a [ASN-METRICS] jguard= $var(%barna_jguard*,0) seenguard= $var(%barna_seen_rescue_recent.*,0) autonickscan= %barna_autonickscan join_delay= %barna_join_delay_secs join_delay_pending= $_barna_join_delay_count join_delay_vars= $var(%barna_join_delay_*,0) autoscan_recent= $var(%barna_autonickscan_recent.*,0) echo_seen= $var(%barna_echo_seen.*,0) echo_asn_seen= $var(%barna_echo_asn_seen.*,0) echo_q_vars= $var(%barna_echo_q_*,0) echo_q_head= %barna_echo_q_head echo_q_tail= %barna_echo_q_tail rx= $var(%barna_rx.*,0) asn_done= $var(%barna_asn_done.*,0)
- 12147}
Pasta cruda