home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / hamradio / netspy.zip / RETI.CHI < prev    next >
Text File  |  1989-07-25  |  49KB  |  2,933 lines

  1. \1cw
  2. \U1STANDARD
  3. \U3ITALIC
  4. \U4BOLD
  5. \U!UNDERLIN
  6. \U"ORATOR
  7. \FD
  8. \+
  9. \+
  10. \+
  11. \+
  12. \+
  13. \+
  14. \^\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \@\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \^\,
  15. \=
  16. \+
  17. \+
  18. \,
  19. \-
  20. \+
  21. \+
  22. \,
  23. \-
  24. \+
  25. \+
  26. \,
  27. \-
  28. \+
  29. \+
  30. \^\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \"I N D I C E\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \^\,
  31. \-
  32. \+
  33. \+
  34. \,
  35. \-
  36. \+
  37. \+
  38. \41. INTRODUZIONE...........................................2\,
  39. \-
  40. \+
  41. \+
  42. \,
  43. \-
  44. \+
  45. \+
  46. 2. IL PROTOCOLLO AX25.....................................2\,
  47. \-
  48. \+
  49. \+
  50. \,
  51. \-
  52. \+
  53. \+
  54. 3. L'INTERFACCIA RADIO - TNC - COMPUTER...................9\,
  55. \-
  56. \+
  57. \+
  58. \,
  59. \-
  60. \+
  61. \+
  62. 4. LE ROUTINE DI GESTIONE DELLA PORTA SERIALE............11\,
  63. \-
  64. \+
  65. \+
  66. \,
  67. \-
  68. \+
  69. \+
  70. 5. IL PROGRAMMA NETSPY.C.................................12\,
  71. \-
  72. \+
  73. \+
  74.   5.1 La Strategia del programma.........................12\,
  75. \-
  76. \+
  77. \+
  78.   5.2 Come usare il programma............................16\,
  79. \-
  80. \+
  81. \+
  82.   5.3 Le principali strutture dati del programma.........20\,
  83. \-
  84. \+
  85. \+
  86.   5.4 Le   principali   costanti    "      "    .........23\,
  87. \-
  88. \+
  89. \+
  90.   5.5 Le   principali   routines    "      "    .........24\,
  91. \-
  92. \+
  93. \+
  94. \,
  95. \-
  96. \+
  97. \+
  98. 8. LISTATI...............................................2\19\,
  99. \-
  100. \+
  101. \+
  102. \,
  103. \-
  104. \+
  105. \+
  106. \41. INTRODUZIONE.\,
  107. \-
  108. \+
  109. \+
  110. \1Con questa \ relazione \ si \ vuole \ descrivere \ come \ e' \ stato 
  111. \-
  112. \+
  113. \+
  114. progettato e implementato il programma NETSPY .C. Esso e' \ in 
  115. \-
  116. \+
  117. \+
  118. grado, tramite un ricevitore radio e un TNC, di \ intercettare 
  119. \-
  120. \+
  121. \+
  122. le comunicazioni in "packet" su un dato canale \ radio, \ e \ di 
  123. \-
  124. \+
  125. \+
  126. analizzare i relativi pacchetti.\,
  127. \-
  128. \+
  129. \+
  130. Inizieremo con una breve \ descrizione \ del \ protocollo \ AX25, 
  131. \-
  132. \+
  133. \+
  134. usato \ per \ le \ comunicazioni \ in \ packet \ radio, \ \ per \ \ poi 
  135. \-
  136. \+
  137. \+
  138. descrivere come \ le \ conoscenze \ acquisite \ nello \ studio \ di 
  139. \-
  140. \+
  141. \+
  142. questo protocollo ci hanno permesso di affrontare il problema 
  143. \-
  144. \+
  145. \+
  146. propostoci.\,
  147. \-
  148. \+
  149. \+
  150. \,
  151. \-
  152. \+
  153. \+
  154. \42. IL PROTOCOLLO AX25.\,
  155. \-
  156. \+
  157. \+
  158. \1La comunicazione in packet radio \ fra \ due \ stazioni \ avviene 
  159. \-
  160. \+
  161. \+
  162. attraverso lo scambio di piccoli \ blocchi, \ o \ pacchetti, \ di 
  163. \-
  164. \+
  165. \+
  166. dati. Ogni pacchetto (frame) e' \ costituito \ dall'insieme \ di 
  167. \-
  168. \+
  169. \+
  170. altre piccole sequenze, \ dette \ campi. \ La \ prima \ grossolana 
  171. \-
  172. \+
  173. \+
  174. classificazione possibile e' dividere i frames in tre \ gruppi 
  175. \-
  176. \+
  177. \+
  178. principali: frame \ \4U\1, \ \4S\1, \ \4I\1, \ rispettivamente \ pacchetti \ di 
  179. \-
  180. \+
  181. \+
  182. informazione non \ numerati, \ pacchetti \ di \ supervisione \ del 
  183. \-
  184. \+
  185. \+
  186. protocollo, pacchetti di informazione numerati. I \ campi \ che 
  187. \-
  188. \+
  189. \+
  190. formano questi tipi di pacchetti sono i seguenti:\,
  191. \-
  192. \+
  193. \+
  194. \,
  195. \-
  196. \+
  197. \+
  198. \!Pacchetto I (o UI)\,
  199. \-
  200. \+
  201. \+
  202. \,
  203. \-
  204. \+
  205. \+
  206.            \1FLAG   ADDRESS   CONTROL   PID   INFO   FCS   FLAG\,
  207. \-
  208. \+
  209. \+
  210. (n.bytes)   1      14/70      1        1     n      2     1\,
  211. \-
  212. \+
  213. \+
  214. \,
  215. \-\/
  216. \+
  217. \+
  218. \!Pacchetto S\ (o U)\,
  219. \-
  220. \+
  221. \+
  222. \,
  223. \-
  224. \+
  225. \+
  226.            \1FLAG    ADDRESS    CONTROL    FCS    FLAG\,
  227. \-
  228. \+
  229. \+
  230. (n.bytes)   1       14/70        1        2       1\,
  231. \-
  232. \+
  233. \+
  234. \,
  235. \-
  236. \+
  237. \+
  238. Prendiamo ora in esame il contenuto dei vari campi. \,
  239. \-
  240. \+
  241. \+
  242. \!FLAG\1. Il campo flag (7E Hex, 01111110) delimita l'inizio e la 
  243. \-
  244. \+
  245. \+
  246. fine \ di \ un \ pacchetto. \ Se \ questo \ byte \ \ deve \ \ comparire 
  247. \-
  248. \+
  249. \+
  250. all'interno di altri campi, vi e' inserito con la tecnica del 
  251. \-
  252. \+
  253. \+
  254. "byte stuffing".\,
  255. \-
  256. \+
  257. \+
  258. \!ADDRESS\1. Il campo address \ serve \ per \ conoscere \ mittente \ e 
  259. \-
  260. \+
  261. \+
  262. destinatario di ogni frame. I primi 7 byte sono \ relativi \ al 
  263. \-
  264. \+
  265. \+
  266. mittente, i bytes 8-14 al destinatario, gli altri (eventuali) 
  267. \-
  268. \+
  269. \+
  270. alla \ catena \ dei \ digipeater \ che \ \ rendono \ \ possibile \ \ il 
  271. \-
  272. \+
  273. \+
  274. collegamento. Per individuare il termine del \ campo \ address, 
  275. \-
  276. \+
  277. \+
  278. tutte i byte relativi alle \ lettere \ dei \ nominativi \ vengono 
  279. \-
  280. \+
  281. \+
  282. shiftati di una posizione a sinistra, lasciando al \ bit \ meno 
  283. \-
  284. \+
  285. \+
  286. significativo il compito di indicare se il campo indirizzo e' 
  287. \-
  288. \+
  289. \+
  290. terminato oppure no. Un bit a 1 in questa posizione dara' \ il 
  291. \-
  292. \+
  293. \+
  294. termine del campo. Per ogni nominativo sono presenti 7 \ byte: 
  295. \-
  296. \+
  297. \+
  298. 6 di \ nominativo \ vero \ e \ proprio, \ 1 \ per \ l'identificativo 
  299. \-
  300. \+
  301. \+
  302. secondario \ di \ stazione \ (localmente \ verra' \ \ aggiunto \ \ il 
  303. \-
  304. \+
  305. \+
  306. carattere "-").\,
  307. \-
  308. \+
  309. \+
  310. \!CONTROL\1. \ Il \ campo \ control \ serve \ per \ \ identificare \ \ che 
  311. \-
  312. \+
  313. \+
  314. tipo di frame (I, U, S) e' stato inviato. \ I \ due \ bits \ meno 
  315. \-
  316. \+
  317. \+
  318. significativi del campo controllo specificano la \ natura \ del 
  319. \-
  320. \+
  321. \+
  322. pacchetto:\,
  323. \-
  324. \+
  325. \+
  326. x 0 : Pacchetto di tipo I (x indica indifferenza)\,
  327. \-
  328. \+
  329. \+
  330. 0 1 : Pacchetto di tipo S\,
  331. \-
  332. \+
  333. \+
  334. 1 1 : Pacchetto di tipo U.\,
  335. \-
  336. \+
  337. \+
  338. Tutte le decodifiche successive (compresa quella relativa \ ai 
  339. \-
  340. \+
  341. \+
  342. bits rimanenti del campo control) hanno modalita' \ diverse \ a 
  343. \-
  344. \+
  345. \+
  346. seconda di questa prima distinzione.
  347. \-
  348. \+
  349. \+
  350. \,
  351. \-
  352. \+
  353. \+
  354. \!FRAME I\1.\,
  355. \-
  356. \+
  357. \+
  358. Cominciamo dalla decodifica \ dei \ bits \ rimanenti \ del \ campo 
  359. \-
  360. \+
  361. \+
  362. control (bit 1-7, intendendo 0 bit meno significativo e primo 
  363. \-
  364. \+
  365. \+
  366. ad essere trasmesso).\,
  367. \-
  368. \+
  369. \+
  370. I bits 1, 2 e 3 identificano il numero progressivo (modulo 8) 
  371. \-
  372. \+
  373. \+
  374. della sequenza di pacchetti I \ trasmessi. \ Il \ bit \ 4 \ e' \ il 
  375. \-
  376. \+
  377. \+
  378. sottocampo di poll/final: quando questo campo e' a 1 si vuole 
  379. \-
  380. \+
  381. \+
  382. una risposta immediata dalla stazione \ dall'altra \ parte \ del 
  383. \-
  384. \+
  385. \+
  386. link, che rispondera' anch'essa con un sottocampo di P/F a 0. 
  387. \-
  388. \+
  389. \+
  390. Questo serve per accertarsi, qualora \ ve \ ne \ fosse \ bisogno, 
  391. \-
  392. \+
  393. \+
  394. della 'presenza' dell' altra stazione.\,
  395. \-
  396. \+
  397. \+
  398. I bit 5, 6 e 7 identificano il numero progressivo (modulo \ 8) 
  399. \-
  400. \+
  401. \+
  402. della sequenza di pacchetti I ricevuti.\,
  403. \-
  404. \+
  405. \+
  406. \,
  407. \-
  408. \+
  409. \+
  410. \!FRAME I\1.- \3Campo PID -\,
  411. \-
  412. \+
  413. \+
  414. \1Il \ Byte \ successivo \ al \ campo \ controllo \ e' \ il \ \ Protocol 
  415. \-
  416. \+
  417. \+
  418. Identifier Field, che dice se esiste un protocollo a \ livello 
  419. \-
  420. \+
  421. \+
  422. 3 e quale esso sia. Il valore \ 240d \ codifica \ il \ fatto \ che 
  423. \-
  424. \+
  425. \+
  426. nessun protocollo a livello 3 e' implementato; il valore 207d 
  427. \-
  428. \+
  429. \+
  430. codifica il protocollo \ NETROM; \ il \ valore \ 204d codifica il 
  431. \-
  432. \+
  433. \+
  434. protocollo IP.\,
  435. \-
  436. \+
  437. \+
  438. \,
  439. \-
  440. \+
  441. \+
  442. \!FRAME I\1.- \3Campo Info e successivi -\,
  443. \-
  444. \+
  445. \+
  446. \1Dopo il Byte di PID, inizia la serie \ di \ bytes \ di\ contenuto 
  447. \-
  448. \+
  449. \+
  450. informativo veri e propri, cioe' la sequenza \ di \ byte \ ASCII 
  451. \-
  452. \+
  453. \+
  454. che  costituiscono il messaggio\3. \1Essi sono \ terminati \ da \ un 
  455. \-
  456. \+
  457. \+
  458. byte di FCS (Frame Check Sequence), su cui il TNC dovra' fare 
  459. \-
  460. \+
  461. \+
  462. il test di correttezza del pacchetto, e da un \ byte \ di \ flag 
  463. \-
  464. \+
  465. \+
  466. (01111110) che termina il pacchetto stesso.\,
  467. \-
  468. \+
  469. \+
  470. \,
  471. \-
  472. \+
  473. \+
  474. \!FRAME S\,
  475. \-
  476. \+
  477. \+
  478. \1Con questo nome si identificano i pacchetti \ di \ supervisione 
  479. \-
  480. \+
  481. \+
  482. del protocollo, quelli cioe' a cui e' assegnato il compito di 
  483. \-
  484. \+
  485. \+
  486. controllare l'esatto flusso dei dati sul link. I bytes 2 e \ 3 
  487. \-
  488. \+
  489. \+
  490. del campo control descrivono la natura del \ pacchetto \ S: \ in 
  491. \-
  492. \+
  493. \+
  494. particolare:\,
  495. \-
  496. \+
  497. \+
  498. bit   3  2       tipo\,
  499. \-
  500. \+
  501. \+
  502.       0  0       RR  (Receive Ready)\,
  503. \-
  504. \+
  505. \+
  506.       0  1       RNR (Receive Not Ready)\,
  507. \-
  508. \+
  509. \+
  510.       1  0       REJ (Frame Reject)\,
  511. \-
  512. \+
  513. \+
  514. Il bit 4 e' il gia' spiegato sottocampo di poll/final, mentre 
  515. \-
  516. \+
  517. \+
  518. i bits   5, 6, 7 danno il numero progressivo, \ sempre \ modulo 
  519. \-\/
  520. \+
  521. \+
  522. 8, della sequenza di pacchetti ricevuti.\,
  523. \-
  524. \+
  525. \+
  526. \,
  527. \-
  528. \+
  529. \+
  530. \!FRAME S\1.\3- Tipo RR \1-\,
  531. \-
  532. \+
  533. \+
  534. Il tipo RR serve principalmente per tre scopi:\,
  535. \-
  536. \+
  537. \+
  538. -) Per indicare che chi trasmette RR \ e' \ pronto \ a \ ricevere 
  539. \-
  540. \+
  541. \+
  542. pacchetti di tipo I;\,
  543. \-
  544. \+
  545. \+
  546. -) Per indicare \ che \ sono \ stati \ ricevuti \ correttamente \ i 
  547. \-
  548. \+
  549. \+
  550. pacchetti I inviati;\,
  551. \-
  552. \+
  553. \+
  554. -) \ Per \ ridare \ il \ via \ a \ una \ condizione \ precedentemente 
  555. \-
  556. \+
  557. \+
  558. bloccata.\,
  559. \-
  560. \+
  561. \+
  562. \,
  563. \-
  564. \+
  565. \+
  566. \!FRAME S\1.\3- Tipo RNR \1-\,
  567. \-
  568. \+
  569. \+
  570. Questo tipo di pacchetti \ viene \ usato \ per \ indicare \ a \ chi 
  571. \-
  572. \+
  573. \+
  574. trasmette \ pacchetti \ di \ tipo \ I \ che \ \ il \ \ ricevitore \ \ e' 
  575. \-
  576. \+
  577. \+
  578. temporaneamente occupato e non puo' ricevere altri pacchetti.\,
  579. \-
  580. \+
  581. \+
  582. \,
  583. \-
  584. \+
  585. \+
  586. \!FRAME S\1.- \3Tipo\ REJ \1-\,
  587. \-
  588. \+
  589. \+
  590. Questo pacchetto viene usato per richiedere la ritrasmissione 
  591. \-
  592. \+
  593. \+
  594. della sequenza di pacchetti I che non \ e' \ stata \ esattamente 
  595. \-
  596. \+
  597. \+
  598. ricevuta ( per esempio per cattive condizioni di ricezione).\,
  599. \-
  600. \+
  601. \+
  602. \,
  603. \-
  604. \+
  605. \+
  606. \!FRAME U\1.\,
  607. \-
  608. \+
  609. \+
  610. Questo tipo di pacchetto \ (Unnumbered, \ non \ numerato), \ puo' 
  611. \-
  612. \+
  613. \+
  614. essere sia di comando che di risposta. I  bits 2, 3, 5, 6, \ 7 
  615. \-
  616. \+
  617. \+
  618. del campo control danno informazione sul tipo di pacchetto in 
  619. \-
  620. \+
  621. \+
  622. questo modo:\,
  623. \-
  624. \+
  625. \+
  626. bits     7  6  5    3  2        tipo\,
  627. \-
  628. \+
  629. \+
  630.          0  0  1    1  1        SABM\,
  631. \-
  632. \+
  633. \+
  634.          0  1  0    0  0        DISC\,
  635. \-
  636. \+
  637. \+
  638.          0  0  0    1  1         DM\,
  639. \-
  640. \+
  641. \+
  642.          0  1  1    0  0         UA\,
  643. \-
  644. \+
  645. \+
  646.          1  0  0    0  1        FRMR\,
  647. \-
  648. \+
  649. \+
  650.          0  0  0    0  0         UI\,
  651. \-
  652. \+
  653. \+
  654. Il bit 4 e' il solito sottocampo di poll/final.\,
  655. \-
  656. \+
  657. \+
  658. \,
  659. \-
  660. \+
  661. \+
  662. \!FRAME U \3- tipo SABM \1-\,
  663. \-
  664. \+
  665. \+
  666. Il tipo SABM (Set Asynchronous Balance Mode) serve per \ porre 
  667. \-
  668. \+
  669. \+
  670. due stazioni in collegamento. Il link viene \ attivato \ quando 
  671. \-
  672. \+
  673. \+
  674. una stazione che riceve SABM risponde con un UA.\,
  675. \-
  676. \+
  677. \+
  678. \,
  679. \-
  680. \+
  681. \+
  682. \!FRAME U \3- tipo DISC \1-\,
  683. \-
  684. \+
  685. \+
  686. Il \ Tipo \ \ DISC \ \ (Disconnect) \ \ serve \ \ per \ \ terminare \ \ un 
  687. \-
  688. \+
  689. \+
  690. collegamento. IL link si disattiva immediatamente.\,
  691. \-
  692. \+
  693. \+
  694. \,
  695. \-
  696. \+
  697. \+
  698. \!FRAME U \3- tipo DM \1-\,
  699. \-
  700. \+
  701. \+
  702. Il tipo DM (Disconnect Mode) viene inviato da \ ogni \ stazione 
  703. \-
  704. \+
  705. \+
  706. che, essendo disconnessa, \ riceve \ un \ messaggio \ diverso \ da 
  707. \-
  708. \+
  709. \+
  710. SABM, \ oppure \ per \ indicare \ che \ \ al \ \ momento \ \ non \ \ c'e' 
  711. \-
  712. \+
  713. \+
  714. possibilita' di connessione (BUSY).\,
  715. \-\/
  716. \+
  717. \+
  718. \,
  719. \-
  720. \+
  721. \+
  722. \!FRAME U \3- tipo UA -\,
  723. \-
  724. \+
  725. \+
  726. \1Il tipo UA \ (Unnumbered \ Acknowledgment) \ viene \ inviato \ per 
  727. \-
  728. \+
  729. \+
  730. confermare la ricezione di un pacchetto U.\,
  731. \-
  732. \+
  733. \+
  734. \,
  735. \-
  736. \+
  737. \+
  738. \!FRAME U \3- tipo FRMR -\,
  739. \-
  740. \+
  741. \+
  742. \1Il tipo FRMR (Frame Reject) viene inviato per indicare che in 
  743. \-
  744. \+
  745. \+
  746. un pacchetto ricevuto e' \ stato \ evidenziato \ un \ errore \ non 
  747. \-
  748. \+
  749. \+
  750. recuperabile con la ritrasmissione del pacchetto stesso \ (per 
  751. \-
  752. \+
  753. \+
  754. esempio, un pacchetto con numero progressivo fuori sequenza o 
  755. \-
  756. \+
  757. \+
  758. con campi invalidi). Un pacchetto FRMR contiene, in un \ campo 
  759. \-
  760. \+
  761. \+
  762. aggiuntivo, la descrizione codificata dell'errore rilevato.\,
  763. \-
  764. \+
  765. \+
  766. \,
  767. \-
  768. \+
  769. \+
  770. \!FRAME U \3- tipo UI -\,
  771. \-
  772. \+
  773. \+
  774. \1Il pacchetto UI (Unnumbered Information) e' un \ pacchetto \ di 
  775. \-
  776. \+
  777. \+
  778. informazione e come tale \ contiene \ successivamente \ tutti \ i 
  779. \-
  780. \+
  781. \+
  782. campi \ gia' \ visti \ per \ il \ pacchetto \ I. \ Questo \ tipo \ \ di 
  783. \-
  784. \+
  785. \+
  786. pacchetto, pero', non riceve conferma di ricezione e \ percio' 
  787. \-
  788. \+
  789. \+
  790. puo' essere perduto.\,
  791. \-
  792. \+
  793. \+
  794. \,
  795. \-
  796. \+
  797. \+
  798. Tutti i pacchetti di qualunque tipo sono \ poi \ terminati \ dai 
  799. \-
  800. \+
  801. \+
  802. gia' descritti campi FCS e FLAG.\,
  803. \-
  804. \+
  805. \+
  806. \,
  807. \-
  808. \+
  809. \+
  810. \43. L'INTERFACCIA RADIO - TNC - COMPUTER.\,
  811. \-
  812. \+
  813. \+
  814. \1Per ricevere i pacchetti \ che \ viaggiano \ su \ un \ determinato 
  815. \-
  816. \+
  817. \+
  818. canale si e' fatto uso di un \ ricevitore \ FM \ sulle \ bande \ 2 
  819. \-
  820. \+
  821. \+
  822. metri e 70 cm (144 e 433 Mhz), di un \ TNC \ PK \ 87 \ e \ di \ un 
  823. \-
  824. \+
  825. \+
  826. personal AT su cui e' stato sviluppato il software.\,
  827. \-
  828. \+
  829. \+
  830. Il primo problema e' stato come configurare il TNC in modo da 
  831. \-
  832. \+
  833. \+
  834. rendere l'algoritmo il piu' \ generale \ possibile. \ Lo \ si \ e' 
  835. \-
  836. \+
  837. \+
  838. configurato in KISS mode \ (per \ il \ PK \ 87 \ la \ sequenza \ che 
  839. \-
  840. \+
  841. \+
  842. setta il TNC in KISS e' contenuta nello script file \ KISS.XTK 
  843. \-
  844. \+
  845. \+
  846. eseguibile da CROSSTALK).\,
  847. \-
  848. \+
  849. \+
  850. Tale modo, operando a basso livello, fa soltanto un controllo 
  851. \-
  852. \+
  853. \+
  854. di correttezza del pacchetto e poi lo invia byte per byte \ al 
  855. \-
  856. \+
  857. \+
  858. computer ospite, dopo averlo filtrato dei byte di FLAG e \ FCS 
  859. \-
  860. \+
  861. \+
  862. e corredato di un byte di inizio e fine pacchetto (192d). \ In 
  863. \-
  864. \+
  865. \+
  866. realta' si e' notato \ che \ all'inizio \ del \ pacchetto \ vi \ e' 
  867. \-
  868. \+
  869. \+
  870. sempre la sequenza 192d 000d, e non soltanto 192d. Questo \ in 
  871. \-
  872. \+
  873. \+
  874. contraddizione con le istruzioni,  riportate sul manuale, del 
  875. \-
  876. \+
  877. \+
  878. modo KISS, che prevedevano il solo 192d. I byte cosi' \ giunti 
  879. \-
  880. \+
  881. \+
  882. saranno poi decodificati dal programma secondo la descrizione 
  883. \-
  884. \+
  885. \+
  886. del protocollo che e' stata data.\,
  887. \-
  888. \+
  889. \+
  890. Il secondo \ problema \ e' \ stato \ come \ gestire \ da \ programma 
  891. \-
  892. \+
  893. \+
  894. l'arrivo dei dati \ alla \ porta \ seriale \ su \ cui \ il \ TNC \ e' 
  895. \-
  896. \+
  897. \+
  898. collegato.  In sostanza, da programma vengono per prima \ cosa 
  899. \-
  900. \+
  901. \+
  902. configurati i registri che gestiscono l'informazione relativa 
  903. \-
  904. \+
  905. \+
  906. alla porta seriale (velocita'in Baud, \ lunghezza \ di \ parola, 
  907. \-
  908. \+
  909. \+
  910. byte \ di \ parita', \ byte \ di \ stop); \ inoltre, \ il \ programma 
  911. \-
  912. \+
  913. \+
  914. provvede a sostituire la normale routine \ di \ gestione \ della 
  915. \-
  916. \+
  917. \+
  918. RS232 del BIOS (interrupt 0Ch) con un nuovo interrupt handler 
  919. \-\/
  920. \+
  921. \+
  922. che consente di lavorare con i byte che arrivano \ alla \ porta 
  923. \-
  924. \+
  925. \+
  926. seriale in modo asincrono rispetto al flusso del programma. 
  927. \-
  928. \+
  929. \+
  930. Di \ queste \ routine \ daremo \ una \ spiegazione \ nel \ \ prossimo 
  931. \-
  932. \+
  933. \+
  934. paragrafo.\,
  935. \-
  936. \+
  937. \+
  938. \,
  939. \-
  940. \+
  941. \+
  942. \44. LE ROUTINE DI GESTIONE DELLA PORTA SERIALE.\,
  943. \-
  944. \+
  945. \+
  946. \1Queste routine si trovano nel file GestSer.C. Di esse \ daremo 
  947. \-
  948. \+
  949. \+
  950. una sommaria spiegazione.\,
  951. \-
  952. \+
  953. \+
  954. \,
  955. \-
  956. \+
  957. \+
  958. Con la \3InitSer1(speed) \1si accede \ direttamente \ nei \ registri 
  959. \-
  960. \+
  961. \+
  962. del WD8250, chip programmabile che gestisce la porta seriale, 
  963. \-
  964. \+
  965. \+
  966. e lo si inizializza coni parametri di \ ricezione: \ velocita'\3, 
  967. \-
  968. \+
  969. \+
  970. \1che puo' venire cambiata da programma con il passaggio \ della 
  971. \-
  972. \+
  973. \+
  974. variabile speed (default = \ 1200 \ Baud), \ bit \ di \ dati \ (8), 
  975. \-
  976. \+
  977. \+
  978. parita' (nessuna), bit di stop (1).\,
  979. \-
  980. \+
  981. \+
  982. Tramite la \3Com1_Handler() \1si riscrive il vettore di interrupt 
  983. \-
  984. \+
  985. \+
  986. 0Ch che si attiva quando e' pronto \ un \ dato \ dalla \ seriale: 
  987. \-
  988. \+
  989. \+
  990. tale dato viene scritto in un buffer \ circolare \ \3Com1buf \ \1che 
  991. \-
  992. \+
  993. \+
  994. viene gestito con due puntatori: uno \ all'ultimo \ dato \ letto 
  995. \-
  996. \+
  997. \+
  998. dal nostro programma, uno all'ultimo \ dato \ arrivato \ tramite 
  999. \-
  1000. \+
  1001. \+
  1002. seriale. Per evitare ragionevolmente il \ rischio \ di \ overrun 
  1003. \-
  1004. \+
  1005. \+
  1006. dei dati, la dimensione del buffer e' stata fissata in \ 10000 
  1007. \-
  1008. \+
  1009. \+
  1010. caratteri. \,
  1011. \-
  1012. \+
  1013. \+
  1014. La \3GetSer1() \1permette \ di \ leggere \ questo \ buffer \ rimanendo 
  1015. \-
  1016. \+
  1017. \+
  1018. fuori del vettore di interrupt; cioe', in pratica, il \ buffer 
  1019. \-
  1020. \+
  1021. \+
  1022. Com1buf si riempe asincronicamente rispetto \ al \ programma \ e 
  1023. \-
  1024. \+
  1025. \+
  1026. viene letto invece tramite la \3GetSer1() \1quando \ il \ programma 
  1027. \-
  1028. \+
  1029. \+
  1030. stesso lo richiede. Quest'ultima funzione riceve un puntatore 
  1031. \-\/
  1032. \+
  1033. \+
  1034. a carattere e basa il \ suo \ funzionamento \ sui \ due \ suddetti 
  1035. \-
  1036. \+
  1037. \+
  1038. puntatori che si chiamano \3Last_Read1 \1e \3Last_Char1\1; se essa li 
  1039. \-
  1040. \+
  1041. \+
  1042. ritrova uguali, ritorna -1 a significare che non c'e' \ nessun 
  1043. \-
  1044. \+
  1045. \+
  1046. dato nuovo; altrimenti ritorna 0 e il carattere nuovo.\,
  1047. \-
  1048. \+
  1049. \+
  1050. Come ultima routine utilizzata c'e' la \3PutSer1() \1che permette 
  1051. \-
  1052. \+
  1053. \+
  1054. di mandare dati in uscita \ sulla \ seriale \ (per \ esempio \ per 
  1055. \-
  1056. \+
  1057. \+
  1058. forzare il TNC ad uscire da Kiss mode).\,
  1059. \-
  1060. \+
  1061. \+
  1062. \,
  1063. \-
  1064. \+
  1065. \+
  1066. \45. IL PROGRAMMA NETSPY.C\ .\,
  1067. \-
  1068. \+
  1069. \+
  1070. \1Con \ le \ premesse \ fatte, \ si \ possono \ ora \ \ descrivere \ \ le 
  1071. \-
  1072. \+
  1073. \+
  1074. caratteristiche e il funzionamento \ del \ programma. \ Esso \ si 
  1075. \-
  1076. \+
  1077. \+
  1078. propone di:\,
  1079. \-
  1080. \+
  1081. \+
  1082. -) Intercettare i pacchetti che viaggiano su un canale radio;\,
  1083. \-
  1084. \+
  1085. \+
  1086. -) Costruire una tabella dei link attivi segnalando il numero 
  1087. \-
  1088. \+
  1089. \+
  1090. \ \ \ di \ pacchetti \ informativi \ \ scambiati, \ \ il \ \ numero \ \ di 
  1091. \-
  1092. \+
  1093. \+
  1094. \ \ \ collisioni rilevate, il tipo di \ protocollo \ a \ livello \ 3 
  1095. \-
  1096. \+
  1097. \+
  1098. \ \ \ eventualmente presente, l'ora di \ inizio \ e \ di \ fine \ del 
  1099. \-
  1100. \+
  1101. \+
  1102. \ \ \ colloquio. Tale tabella si aggiorna in tempo reale; \ tutto 
  1103. \-
  1104. \+
  1105. \+
  1106. \ \ \ cio' che esce dalla tabella viene salvato su \ file; \ tutta 
  1107. \-
  1108. \+
  1109. \+
  1110. \ \ \ la tabella viene poi \ salvata, \ a \ richiesta, \ al \ termine 
  1111. \-
  1112. \+
  1113. \+
  1114. \ \ \ dell'elaborazione.\,
  1115. \-
  1116. \+
  1117. \+
  1118. -) Dare, \ a \ richiesta, \ ulteriori \ informazioni \ \ sui \ \ link 
  1119. \-
  1120. \+
  1121. \+
  1122. \ \ \ costituiti, come, ad \ esempio, \ gli \ eventuali \ digipeater 
  1123. \-
  1124. \+
  1125. \+
  1126. \ \ \ tramite i quali avviene la connessione.\,
  1127. \-
  1128. \+
  1129. \+
  1130. -) Permettere di "catturare" a livello di \ byte \ i \ pacchetti 
  1131. \-
  1132. \+
  1133. \+
  1134. \ \ \ passanti \ \ sui \ \ vari \ \ link, \ \ permettendone \ \ poi \ \ \ una 
  1135. \-
  1136. \+
  1137. \+
  1138. \ \ \ consultazione in un ambiente dove \ essi \ sono \ gia' \ stati 
  1139. \-
  1140. \+
  1141. \+
  1142. \ \ \ divisi nei campi che li costituiscono.\,
  1143. \-
  1144. \+
  1145. \+
  1146. \,
  1147. \-
  1148. \+
  1149. \+
  1150.    \45.1 LA STRATEGIA DEL PROGRAMMA.\,
  1151. \-
  1152. \+
  1153. \+
  1154. \1In \ questo \ paragrafo \ verra' \ spiegato \ come \ il \ \ programma 
  1155. \-
  1156. \+
  1157. \+
  1158. raggiunge gli scopi prefissati. All'inizio viene visualizzata 
  1159. \-
  1160. \+
  1161. \+
  1162. una pagina di spiegazione d'uso che serve all'utente \ che \ si 
  1163. \-
  1164. \+
  1165. \+
  1166. accosti al programma \ per \ la \ prima \ volta. \ Poi \ inizia \ il 
  1167. \-
  1168. \+
  1169. \+
  1170. programma \ vero \ e \ proprio, \ con \ la \ visualizzazione \ dello 
  1171. \-
  1172. \+
  1173. \+
  1174. schermo \ principale \ che \ consta \ di \ tre \ \ finestre: \ \ nella 
  1175. \-\/
  1176. \+
  1177. \+
  1178. principale, \ la \ piu' \ grande, \ troveranno \ \ posto \ \ i \ \ link 
  1179. \-
  1180. \+
  1181. \+
  1182. (collegamenti \ tra \ due \ stazioni) \ con \ i \ \ loro \ \ parametri 
  1183. \-
  1184. \+
  1185. \+
  1186. significativi; in una seconda, in basso a \ sinistra, \ saranno 
  1187. \-
  1188. \+
  1189. \+
  1190. visualizzati, \ in \ forma \ breve, \ gli \ ultimi \ \ 5 \ \ pacchetti 
  1191. \-
  1192. \+
  1193. \+
  1194. transitati sul canale; in una terza, in basso a destra, sara' 
  1195. \-
  1196. \+
  1197. \+
  1198. visualizzato un menu di opzioni tra le quali la \ possibilita' 
  1199. \-
  1200. \+
  1201. \+
  1202. di effettuare la cattura e poi la visualizzazione byte a byte 
  1203. \-
  1204. \+
  1205. \+
  1206. dei pacchetti transitati sui vari link. Inoltre vengono anche 
  1207. \-
  1208. \+
  1209. \+
  1210. visualizzate l'ora e la data attuali.\,
  1211. \-
  1212. \+
  1213. \+
  1214. Normalmente \ il \ programma \ attende \ i \ dati \ dalla \ seriale. 
  1215. \-
  1216. \+
  1217. \+
  1218. Durante questa attesa vengono \ chiamate \ alcune \ routine \ che 
  1219. \-
  1220. \+
  1221. \+
  1222. svolgono compiti di contorno. Una di \ esse \ analizza \ i \ link 
  1223. \-
  1224. \+
  1225. \+
  1226. presenti in tabella: se qualcuno \ di \ essi \ non \ ha \ traffico 
  1227. \-
  1228. \+
  1229. \+
  1230. (scambio di pacchett)  da piu' di TIME_OUT \ minuti, \ il \ link 
  1231. \-
  1232. \+
  1233. \+
  1234. viene considerato disconnesso e  si aggiorna \ l'ora \ di \ fine 
  1235. \-
  1236. \+
  1237. \+
  1238. collegamento.\,
  1239. \-
  1240. \+
  1241. \+
  1242. TIME_OUT e' una costante del programma, posta uguale a 15: e' 
  1243. \-
  1244. \+
  1245. \+
  1246. consigliabile che tale valore non sia \ troppo \ elevato, \  per 
  1247. \-
  1248. \+
  1249. \+
  1250. evitare di lasciare in \ tabella \ troppi \ link \ apparentemente 
  1251. \-
  1252. \+
  1253. \+
  1254. 'attivi'; \ in \ ogni \ caso \ TIME_OUT \ non \ potra' \ mai \ essere 
  1255. \-
  1256. \+
  1257. \+
  1258. maggiore di 59.\,
  1259. \-
  1260. \+
  1261. \+
  1262. Altre routine si occupano di scrivere l'ora, di \ visualizzare 
  1263. \-
  1264. \+
  1265. \+
  1266. i vari menu, di interpretare i comandi dell'utente.\,
  1267. \-
  1268. \+
  1269. \+
  1270. E' in seguito presente una descrizione dettagliata di \ queste 
  1271. \-
  1272. \+
  1273. \+
  1274. routine. All' arrivo del primo dato il \ programma \ inizia \ ad 
  1275. \-
  1276. \+
  1277. \+
  1278. elaborare il pacchetto. Una cosa da tenere \ presente, \ e' \ la 
  1279. \-
  1280. \+
  1281. \+
  1282. seguente: all'arrivo del primo dato si potrebbe supporre \ che 
  1283. \-
  1284. \+
  1285. \+
  1286. il secondo dato sia subito dopo immediatamente disponibile, e 
  1287. \-\/
  1288. \+
  1289. \+
  1290. tralasciare un test sull'effettivo arrivo di un \ dato \ nuovo. 
  1291. \-
  1292. \+
  1293. \+
  1294. In realta', essendo il codice \ compilato \ generalmente \ molto 
  1295. \-
  1296. \+
  1297. \+
  1298. piu' veloce dell'arrivo, sebbene continuativo, dei dati dalla 
  1299. \-
  1300. \+
  1301. \+
  1302. seriale, tale test va fatto PRIMA di \ leggerne \ qualunque \ di 
  1303. \-
  1304. \+
  1305. \+
  1306. essi, non solo il primo.\,
  1307. \-
  1308. \+
  1309. \+
  1310. Avendo quindi rilevato l'arrivo di un pacchetto nuovo, lo \ si \,
  1311. \-
  1312. \+
  1313. \+
  1314. mette in una variabile e, \ quando \ lo \ si \ ha \ completo, \ \ si 
  1315. \-
  1316. \+
  1317. \+
  1318. procede \ \ all'estrazione \ \ di \ \ tutti \ \ i \ \ suoi \ \ \ parametri 
  1319. \-
  1320. \+
  1321. \+
  1322. fondamentali; inoltre, se l'utente ha \ selezionato \ l'opzione 
  1323. \-
  1324. \+
  1325. \+
  1326. relativa, lo si inserisce nell'apposito  buffer.\,
  1327. \-
  1328. \+
  1329. \+
  1330. A questo punto si fa una distinzione: si considerano \ solo \ i 
  1331. \-
  1332. \+
  1333. \+
  1334. pacchetti \ \ di \ \ tipo \ \ I, \ \ U(UI,DISC,DM), \ \ \ S(RR,RNR,REJ). 
  1335. \-
  1336. \+
  1337. \+
  1338. Considerare questo sottoinsieme e' sufficiente per gli \ scopi 
  1339. \-
  1340. \+
  1341. \+
  1342. seguenti e semplifica l'algoritmo. Se viene \ intercettato \ un 
  1343. \-
  1344. \+
  1345. \+
  1346. pacchetto I o pacchetti RR, RNR, REJ con bit di poll = 0 (che 
  1347. \-
  1348. \+
  1349. \+
  1350. sono relativi a un precedente invio di pacchetti I), si ha la 
  1351. \-
  1352. \+
  1353. \+
  1354. presenza di a un link attivo. Se questo link e' \ presente \ in 
  1355. \-
  1356. \+
  1357. \+
  1358. tabella, si aggiornano semplicemente tutti i \ dati \ relativi: 
  1359. \-
  1360. \+
  1361. \+
  1362. si \ controllano \ ripetizioni \ di \ \ pacchetti \ \ per \ \ rilevare 
  1363. \-
  1364. \+
  1365. \+
  1366. collisioni, si aggiorna l'ora dell'ultimo pacchetto \ ricevuto 
  1367. \-
  1368. \+
  1369. \+
  1370. e cosi' via. Se il link non e' in tabella, lo si aggiunge; se 
  1371. \-
  1372. \+
  1373. \+
  1374. la tabella \ e' \ piena \ si \ elimina \ il \ link \ 'piu' \ vecchio' 
  1375. \-
  1376. \+
  1377. \+
  1378. salvandolo su file. Inoltre si aggiornano \ le \ scritte \ sullo 
  1379. \-
  1380. \+
  1381. \+
  1382. schermo \ e \ si \ scrive \ in \ basso \ a \ sinistra \ il \ pacchetto 
  1383. \-
  1384. \+
  1385. \+
  1386. intercettato.\,
  1387. \-
  1388. \+
  1389. \+
  1390. Se si e' ricevuto un pacchetto \ DISC \ o \ DM \ il \ link \ si \ e' 
  1391. \-
  1392. \+
  1393. \+
  1394. disconnesso, e percio' si aggiorna l'ora di fine collegamento
  1395. \-
  1396. \+
  1397. \+
  1398. che viene scritta sullo schermo.\,
  1399. \-\/
  1400. \+
  1401. \+
  1402. Se si riceve un pacchetto UI si controlla \ tramite \ il \ campo 
  1403. \-
  1404. \+
  1405. \+
  1406. PID se e' implementato un protocollo a livello 3: se si', \ si 
  1407. \-
  1408. \+
  1409. \+
  1410. aggiunge \ anche \ questo \ link \ in \ \ tabella, \ \ considerandolo 
  1411. \-
  1412. \+
  1413. \+
  1414. significativo. Gli altri pacchetti UI non IP o NETROM vengono 
  1415. \-
  1416. \+
  1417. \+
  1418. ignorati a questo livello \ perche' \ di \ scarso \ interesse \ (a 
  1419. \-
  1420. \+
  1421. \+
  1422. quest'ultima categoria appartengono, per esempio, i pacchetti 
  1423. \-
  1424. \+
  1425. \+
  1426. di identificazione che i vari nodi trasmettono ogni tanto sul 
  1427. \-
  1428. \+
  1429. \+
  1430. canale).\,
  1431. \-
  1432. \+
  1433. \+
  1434. Questo e' cio' che il programma fa per 'default', cioe' senza 
  1435. \-
  1436. \+
  1437. \+
  1438. interventi \ dell'utente. \ Quest'ultimo \ ha \ pero' \ sempre \ \ a 
  1439. \-
  1440. \+
  1441. \+
  1442. disposizione un menu che gli permette di fare \ altre \ analisi
  1443. \-
  1444. \+
  1445. \+
  1446. contemporaneamente \ \ all'arrivo \ \ e \ \ all'elaborazione \ \ \ dei 
  1447. \-
  1448. \+
  1449. \+
  1450. pacchetti. L'utente puo' chiedere notizie \ aggiuntive \ su \ un 
  1451. \-
  1452. \+
  1453. \+
  1454. link, puo' decidere se e come abbandonare il programma, \ puo' 
  1455. \-
  1456. \+
  1457. \+
  1458. svolgere attivita' in una shell del sistema \ operativo, \ puo' 
  1459. \-
  1460. \+
  1461. \+
  1462. decidere di \ iniziare \ o \ terminare \ di \ catturare, \ per \ poi 
  1463. \-
  1464. \+
  1465. \+
  1466. vederli byte a byte, tutti i \ pacchetti \ che \ transitano \ sul 
  1467. \-
  1468. \+
  1469. \+
  1470. canale.\,
  1471. \-
  1472. \+
  1473. \+
  1474. Questa \ opzione \ funziona \ nel \ seguente \ modo: \ esiste \ \ una 
  1475. \-
  1476. \+
  1477. \+
  1478. variabile 'capture' che puo' essere posta ON oppure OFF. \ Nel 
  1479. \-
  1480. \+
  1481. \+
  1482. primo caso tutti i pacchetti intercettati, anche \ quelli \ che 
  1483. \-
  1484. \+
  1485. \+
  1486. non influenzano la tabella principale, sono catturati in \ una 
  1487. \-
  1488. \+
  1489. \+
  1490. struttura dati. Questa cattura termina o quando l'utente pone 
  1491. \-
  1492. \+
  1493. \+
  1494. a OFF la variabile, oppure quando \ sono \ stati \ catturati \ un 
  1495. \-
  1496. \+
  1497. \+
  1498. numero max \ di \ pacchetti \  (numero \ che \ e'fissato \ con \ una 
  1499. \-
  1500. \+
  1501. \+
  1502. costante del programma, NUMPAK_MAX \  uguale \ a \ 250), \ oppure 
  1503. \-
  1504. \+
  1505. \+
  1506. ancora \ se \ non \ \ esiste \ \ piu' \ \ memoria \ \ disponibile \ \ per 
  1507. \-
  1508. \+
  1509. \+
  1510. l'allocazione dei nuovi pacchetti.\,
  1511. \-\/
  1512. \+
  1513. \+
  1514. A questo punto l'utente puo' entrare \ in \ un \ nuovo \ ambiente 
  1515. \-
  1516. \+
  1517. \+
  1518. dove puo' vedere con semplici comandi tutti i pacchetti \ byte 
  1519. \-
  1520. \+
  1521. \+
  1522. per byte, gia' divisi nei \ loro \ campi. \ Intanto, \ il \ buffer 
  1523. \-
  1524. \+
  1525. \+
  1526. della seriale continuera' a riempirsi di dati in arrivo, \ che 
  1527. \-
  1528. \+
  1529. \+
  1530. pero' non saranno elaborati istantaneamente, ma solo ogni \ un 
  1531. \-
  1532. \+
  1533. \+
  1534. certo \ numero \ di \ secondi \ (nel \ programma \ tale \ numero \ e' 
  1535. \-
  1536. \+
  1537. \+
  1538. definito dalla costante TEMPO_AGGIORNAMENTO, uguale a 30) \ in 
  1539. \-
  1540. \+
  1541. \+
  1542. modo da non perdere continuita' nell'elaborazione dei dati in 
  1543. \-
  1544. \+
  1545. \+
  1546. arrivo senza pero' rallentare in \ modo \ vistoso \ la \ sessione 
  1547. \-
  1548. \+
  1549. \+
  1550. corrente.\,
  1551. \-
  1552. \+
  1553. \+
  1554. Vengono ora descritte le operazioni che svolge \ il \ programma 
  1555. \-
  1556. \+
  1557. \+
  1558. nel caso che l'utente \ desideri \ avere \ una \ rappresentazione 
  1559. \-
  1560. \+
  1561. \+
  1562. grafica dell'attivita' del canale. Una volta inizializzato il 
  1563. \-
  1564. \+
  1565. \+
  1566. sistema \ \ con \ \ \ la \ \ \ funzione \ \ \ \3StartPlacet() \ \ \ \1descritta 
  1567. \-
  1568. \+
  1569. \+
  1570. dettagliatamente in seguito, il programma legge la tabella in 
  1571. \-
  1572. \+
  1573. \+
  1574. cui sono memorizzati i pacchetti \ che \ sono \ arrivati \ e \ con 
  1575. \-
  1576. \+
  1577. \+
  1578. queste \ \ informazioni \ \ costruisce \ \ la \ \ schermata \ \ grafica 
  1579. \-
  1580. \+
  1581. \+
  1582. corrispondente. A questo punto, il programma prosegue come al 
  1583. \-
  1584. \+
  1585. \+
  1586. solito continuando ad aggiornare la tabella dei link man mano 
  1587. \-
  1588. \+
  1589. \+
  1590. che arrivano i nuovi pacchetti; \ questa \ tabella \ costituisce 
  1591. \-
  1592. \+
  1593. \+
  1594. sempre il riferimento per \ l'aggiornamento \ della \ situazione 
  1595. \-
  1596. \+
  1597. \+
  1598. grafica e viene quindi riletta ad ogni nuovo ciclo.\,
  1599. \-
  1600. \+
  1601. \+
  1602. \,
  1603. \-
  1604. \+
  1605. \+
  1606.    \45.2 COME USARE IL PROGRAMMA.\,
  1607. \-
  1608. \+
  1609. \+
  1610. \1Il programma viene lanciato da DOS con il comando '\3netspy' \1al 
  1611. \-
  1612. \+
  1613. \+
  1614. quale possono essere aggiunte, sulla stessa riga, le seguenti 
  1615. \-
  1616. \+
  1617. \+
  1618. opzioni:\,
  1619. \-
  1620. \+
  1621. \+
  1622. \3-h \1:     evita la visualizzazione, all' inizio del programma, 
  1623. \-\/
  1624. \+
  1625. \+
  1626. \ \ \ \ \ \ \ \ \ delle due pagine di istruzioni. \,
  1627. \-
  1628. \+
  1629. \+
  1630. \3-p \1xx:   permette di specificare \ il \ path \ xx \ per \ il \ file 
  1631. \-
  1632. \+
  1633. \+
  1634. \ \ \ \ \ \ \ \ \ LOG.PKT che altrimenti viene scritto nella directory 
  1635. \-
  1636. \+
  1637. \+
  1638. \ \ \ \ \ \ \ \ \ corrente.\,
  1639. \-
  1640. \+
  1641. \+
  1642. \3-s \1yyyy: pone a yyyy \  la \ velocita' \ di \ trasferimento \ TNC-
  1643. \-
  1644. \+
  1645. \+
  1646. \ \ \ \ \ \ \ \ \ Computer che per default e' 1200 Baud.\,
  1647. \-
  1648. \+
  1649. \+
  1650. Da prove effettuate si e' visto che, specialmente con PC \ XT, 
  1651. \-
  1652. \+
  1653. \+
  1654. e' consigliabile non salire oltre 4800 baud per non rischiare 
  1655. \-
  1656. \+
  1657. \+
  1658. di perdere qualche dato e far abortire il programma che tenta 
  1659. \-
  1660. \+
  1661. \+
  1662. di decodificare pacchetti con campi invalidi o mancanti.\,
  1663. \-
  1664. \+
  1665. \+
  1666. Lanciato \ senza \ l'opzione \ -h, \ il \ programma \ presenta \ due 
  1667. \-
  1668. \+
  1669. \+
  1670. schermate di informazione: \ la \ prima \ schermata \ attende \ la 
  1671. \-
  1672. \+
  1673. \+
  1674. pressione del tasto '\3PgDn\1' prima di presentare la seconda. Al 
  1675. \-
  1676. \+
  1677. \+
  1678. termina di quest'ultima premendo \3F1 \1si \ inizia \ il \ programma 
  1679. \-
  1680. \+
  1681. \+
  1682. vero e proprio, premendo \3F10 \1si ritorna al sistema operativo. 
  1683. \-
  1684. \+
  1685. \+
  1686. A programma iniziato, ogni volta che \ un \ pacchetto \ transita 
  1687. \-
  1688. \+
  1689. \+
  1690. sul canale, lo si vedra' apparire sullo \ schermo, \ e, \ se \ il 
  1691. \-
  1692. \+
  1693. \+
  1694. pacchetto indica la presenza di un \ link \ attivo \ secondo \ le 
  1695. \-
  1696. \+
  1697. \+
  1698. modalita' previste e prima spiegate, il link stesso apparira' 
  1699. \-
  1700. \+
  1701. \+
  1702. nella finestra principale.\,
  1703. \-
  1704. \+
  1705. \+
  1706. Se \ i \ pacchetti \ sono \ rilevati \ correttamente \ dal \ TNC \ il
  1707. \-
  1708. \+
  1709. \+
  1710. programma seguira' \ l'evolversi \ dei \ vari \ link \ sul \ canale 
  1711. \-
  1712. \+
  1713. \+
  1714. aggiornando le informazioni sullo \ schermo. \ In \ questa \ fase 
  1715. \-
  1716. \+
  1717. \+
  1718. l'utente ha a disposizione i seguenti comandi:\,
  1719. \-
  1720. \+
  1721. \+
  1722. \3n - \1Battendo n dove n e' il numero di \ un \ link \ presente \ in 
  1723. \-
  1724. \+
  1725. \+
  1726. tabella, l'utente avra' a disposizione per il link scelto \ le 
  1727. \-
  1728. \+
  1729. \+
  1730. seguenti informazioni:\,
  1731. \-
  1732. \+
  1733. \+
  1734.       -) Numero di pacchetti I inviati da un \ lato \ all'altro 
  1735. \-
  1736. \+
  1737. \+
  1738. \ \ \ \ \ \ \ \ \ del  link e viceversa (in tabella \ principale \ viene 
  1739. \-
  1740. \+
  1741. \+
  1742. \ \ \ \ \ \ \ \ \ riportato il  numero complessivo);\,
  1743. \-
  1744. \+
  1745. \+
  1746.       -) Digipeater \ eventualmente \ presenti \ sul \ link \ \ (in 
  1747. \-
  1748. \+
  1749. \+
  1750. \ \ \ \ \ \ \ \ \ questo \ \  caso \ \ viene \ \ visualizzata \ \ \ la \ \ \ frase 
  1751. \-
  1752. \+
  1753. \+
  1754. \ \ \ \ \ \ \ \ \ 'connessione \ via: \  <digipeaters> \ \ ', \ \ altrimenti 
  1755. \-
  1756. \+
  1757. \+
  1758. \ \ \ \ \ \ \ \ \ 'connessione diretta'.\,
  1759. \-
  1760. \+
  1761. \+
  1762. \,
  1763. \-
  1764. \+
  1765. \+
  1766. \3C (Capture ON - OFF) - \1Battendo 'c' l'utente puo' attivare \ o 
  1767. \-
  1768. \+
  1769. \+
  1770. disattivare la cattura byte per byte di tutti i pacchetti che 
  1771. \-
  1772. \+
  1773. \+
  1774. transitano. La condizione di default e' OFF, lo \ stato \ della 
  1775. \-
  1776. \+
  1777. \+
  1778. variabile viene comunque sempre visualizzato. Tale variabile. 
  1779. \-
  1780. \+
  1781. \+
  1782. se posta ON, puo' tornare in \ modo \ OFF \ manualmente, \ quando 
  1783. \-
  1784. \+
  1785. \+
  1786. l'utente lo decide, oppure automaticamente nei \ seguenti \ due 
  1787. \-
  1788. \+
  1789. \+
  1790. casi: quando si e' superato il numero \ di \ pacchetti \ massimi 
  1791. \-
  1792. \+
  1793. \+
  1794. catturabili NUMPAKMAX (per ora posta a 250 ), \ o \ ancora, \ in 
  1795. \-
  1796. \+
  1797. \+
  1798. sistemi \ con \ basse \ disponibilita' \ di \ memoria, \ quando \ la 
  1799. \-
  1800. \+
  1801. \+
  1802. memoria disponibile per la \ cattura \ di \ altri \ pacchetti \ e' 
  1803. \-
  1804. \+
  1805. \+
  1806. insufficiente.\,
  1807. \-
  1808. \+
  1809. \+
  1810. \,
  1811. \-
  1812. \+
  1813. \+
  1814. \3A (Analisi pacchetti) \1- Battendo 'a' \ l'utente \ entra \ in \ un 
  1815. \-
  1816. \+
  1817. \+
  1818. ambiente dove e' possibile visualizzare i pacchetti catturati 
  1819. \-
  1820. \+
  1821. \+
  1822. precedentemente.\,
  1823. \-
  1824. \+
  1825. \+
  1826. A \ questo \ livello, \ sullo \ schermo \ viene \ visualizzato \ \ un 
  1827. \-
  1828. \+
  1829. \+
  1830. pacchetto per volta secondo queste modalita': in alto vi sono 
  1831. \-
  1832. \+
  1833. \+
  1834. il numero d'ordine del \ pacchetto \ catturato, \ il \ numero \ di 
  1835. \-
  1836. \+
  1837. \+
  1838. pacchetti che sono nel buffer e \ una \ minima \ decodifica \ del 
  1839. \-\/
  1840. \+
  1841. \+
  1842. pacchetto stesso i cui bytes vengono rappresentati in \ codice 
  1843. \-
  1844. \+
  1845. \+
  1846. esadecimale.\,
  1847. \-
  1848. \+
  1849. \+
  1850. Sono \ poi \ rappresentati \ divisi \ nei \ campi \ descritti \ \ nel 
  1851. \-
  1852. \+
  1853. \+
  1854. paragrafo relativo al protocollo ax25, tutti i byte contenuti 
  1855. \-
  1856. \+
  1857. \+
  1858. nel pacchetto. Se esiste un campo informativo, e' data \ anche 
  1859. \-
  1860. \+
  1861. \+
  1862. una conversione dei bytes in codice ASCII; se in \ tale \ campo 
  1863. \-
  1864. \+
  1865. \+
  1866. sono \ presenti \ caratteri \ \ non \ \ stampabili \ \ essi \ \ vengono 
  1867. \-
  1868. \+
  1869. \+
  1870. sostituiti dal carattere di codice ASCII 2d \ (una \ 'faccetta' 
  1871. \-
  1872. \+
  1873. \+
  1874. in reverse video) se si tratta di un carattere il cui \ codice 
  1875. \-
  1876. \+
  1877. \+
  1878. e' < 26d, da quello \ di \ codice \ ASCII \ 254d \ (un \ quadratino 
  1879. \-
  1880. \+
  1881. \+
  1882. bianco) se si tratta di uno di codice > 127d. L' \ utente \ ora 
  1883. \-
  1884. \+
  1885. \+
  1886. potra' spostarsi nel buffer di cattura tramite i comandi:\,
  1887. \-
  1888. \+
  1889. \+
  1890. \3Up    \1per vedere il dato precedente;\,
  1891. \-
  1892. \+
  1893. \+
  1894. \3Dn    \1per vedere il dato seguente;\,
  1895. \-
  1896. \+
  1897. \+
  1898. \3Home  \1per andare all'inizio del buffer;\,
  1899. \-
  1900. \+
  1901. \+
  1902. \3End   \1per andare in fondo al buffer;\,
  1903. \-
  1904. \+
  1905. \+
  1906. \3F3    \1per abbandonare la sessione pulendo il buffer\,
  1907. \-
  1908. \+
  1909. \+
  1910. \3F5 \   \1per abbandonare \ la \ sessione \ mantenendo \ i \ dati \ nel 
  1911. \-
  1912. \+
  1913. \+
  1914. \ \ \ \ \ \ buffer.\,
  1915. \-
  1916. \+
  1917. \+
  1918. Come gia' detto in \ precedenza, \ i \ dati \ in \ arrivo \ vengono 
  1919. \-
  1920. \+
  1921. \+
  1922. elaborati ogni TEMPO_AGGIORNAMENTO secondi: poiche' il numero 
  1923. \-
  1924. \+
  1925. \+
  1926. di secondi e' piuttosto basso, e quindi solo pochi \ pacchetti 
  1927. \-
  1928. \+
  1929. \+
  1930. possono essere in attesa \ di \ elaborazione, \ quest'ultima \ e' 
  1931. \-
  1932. \+
  1933. \+
  1934. praticamente \ istantanea, \ tanto \ \ che \ \ l'utente \ \ che \ \ sta 
  1935. \-
  1936. \+
  1937. \+
  1938. effettuando l'analisi pacchetti quasi non \ viene \ disturbato, 
  1939. \-
  1940. \+
  1941. \+
  1942. se non rilevando che, in caso di 'capture' posta \  a \ ON, \ il 
  1943. \-
  1944. \+
  1945. \+
  1946. numero di pacchetti nel buffer di cattura \ e' \ aumentato. \ La 
  1947. \-
  1948. \+
  1949. \+
  1950. sessione puo' essere abbandonata \ o \ mantenendo \ i \ dati \ nel 
  1951. \-\/
  1952. \+
  1953. \+
  1954. buffer di cattura, oppure svuotandolo lasciando \ piu' \ spazio 
  1955. \-
  1956. \+
  1957. \+
  1958. per una successiva cattura.\,
  1959. \-
  1960. \+
  1961. \+
  1962. \,
  1963. \-
  1964. \+
  1965. \+
  1966. \3D (DOS Shell) - \1Premendo 'd' l'utente ha a \ disposizione \ una 
  1967. \-
  1968. \+
  1969. \+
  1970. shell del sistema operativo. In essa e' possibile \ effettuare 
  1971. \-
  1972. \+
  1973. \+
  1974. in generale tutto cio' che normalmente si fa da DOS, a \ patto 
  1975. \-
  1976. \+
  1977. \+
  1978. di tenere presente queste \ due \ avvertenze: \ non \ trattenersi 
  1979. \-
  1980. \+
  1981. \+
  1982. molto in tale sessione specie se vi \ e' \ molto \ traffico \ sul 
  1983. \-
  1984. \+
  1985. \+
  1986. canale radio (i pacchetti in arrivo si accumulano nel \ buffer 
  1987. \-
  1988. \+
  1989. \+
  1990. di seriale e possono andare in overrun) ed evitare \ nel \ modo 
  1991. \-
  1992. \+
  1993. \+
  1994. piu' assoluto di eseguire programmi che agiscano sulla stessa 
  1995. \-
  1996. \+
  1997. \+
  1998. porta \ seriale \ \ (COM1:). \ \ In \ \ questo \ \ caso \ \ NETSPY \ \ non 
  1999. \-
  2000. \+
  2001. \+
  2002. funzionerebbe piu' e sarebbe necessario un reset di tutto \ il 
  2003. \-
  2004. \+
  2005. \+
  2006. sistema.\,
  2007. \-
  2008. \+
  2009. \+
  2010. \,
  2011. \-
  2012. \+
  2013. \+
  2014. \3V (Vista Grafica) - \ \1Questa \ e' \ l'opzione \ che \ consente \ di 
  2015. \-
  2016. \+
  2017. \+
  2018. passare dal formato tabellare al formato grafico.\,
  2019. \-
  2020. \+
  2021. \+
  2022. Quest'ultimo riespecchia \ fedelmente \ il \ formato \ tabellare; 
  2023. \-
  2024. \+
  2025. \+
  2026. l'angolo superiore sinistro e' assegnato in \ permanenza \ alla 
  2027. \-
  2028. \+
  2029. \+
  2030. visualizzazione \ del \ nominativo \ di \ tutti \ i \ pacchetti \ in 
  2031. \-
  2032. \+
  2033. \+
  2034. transito, \ costituendo \ cosi' \ l'equivalente \ grafico \ \ della 
  2035. \-
  2036. \+
  2037. \+
  2038. 'scroll window' del modo 'testo' in cui sono visualizzati gli 
  2039. \-
  2040. \+
  2041. \+
  2042. ultimi 5 pacchetti ricevuti.\,
  2043. \-
  2044. \+
  2045. \+
  2046. E' opportuno far notare che cio' che si \ vede \ sullo \ schermo 
  2047. \-
  2048. \+
  2049. \+
  2050. sono i collegamenti che hanno \ mittente \ e \ destinatario \ nel 
  2051. \-
  2052. \+
  2053. \+
  2054. pacchetto e cioe' quelli \ a \ LIVELLO \ FISICO \ AX25, \ compresi 
  2055. \-
  2056. \+
  2057. \+
  2058. NETROM e IP.\,
  2059. \-
  2060. \+
  2061. \+
  2062. Nel \ formato \ grafico \ sono \ disponibili \ due \ \ comandi \ \ per 
  2063. \-
  2064. \+
  2065. \+
  2066. l'utente:\,
  2067. \-
  2068. \+
  2069. \+
  2070.      \3(R)idisegna \   \1le \ \ stazioni \ \ sullo \ \ schermo \ \ vengono 
  2071. \-
  2072. \+
  2073. \+
  2074. \ \ \ \ \ riposizionate; \ questo \ per \ permettere \ all'utente \ \ di 
  2075. \-
  2076. \+
  2077. \+
  2078. \ \ \ \ \ cambiare una \ configurazione \ poco \ apprezzabile \ da \ un 
  2079. \-
  2080. \+
  2081. \+
  2082. \ \ \ \ \ punto di vista estetico.\,
  2083. \-
  2084. \+
  2085. \+
  2086. \ \ \ \ \ \3ESC   \1torna al menu precedente, dopo \ aver \ 'chiuso' \ il 
  2087. \-
  2088. \+
  2089. \+
  2090. \ \ \ \ \ sistema grafico.\,
  2091. \-
  2092. \+
  2093. \+
  2094. \,
  2095. \-
  2096. \+
  2097. \+
  2098. \3E (Esce senza salvare)- \1Con questo comando l'utente ritorna a 
  2099. \-
  2100. \+
  2101. \+
  2102. DOS senza salvare sul file LOG.PKT il contenuto della tabella 
  2103. \-
  2104. \+
  2105. \+
  2106. principale. In detto file rimarranno solo gli eventuali \ link 
  2107. \-
  2108. \+
  2109. \+
  2110. 'vecchi' eliminati dalla tabella \ per \ dare \ posto \ ai \ nuovi 
  2111. \-
  2112. \+
  2113. \+
  2114. arrivati. All'uscita del programma e' possibile \ togliere \ il 
  2115. \-
  2116. \+
  2117. \+
  2118. TNC da KISS mode per farlo tornare in modo normale, \ mediante 
  2119. \-
  2120. \+
  2121. \+
  2122. la \3PutSer1()\1, con la sequenza 0Ch, FFh, 0Ch valida per il \ PK 
  2123. \-
  2124. \+
  2125. \+
  2126. 87 della AEA.\,
  2127. \-
  2128. \+
  2129. \+
  2130. \,
  2131. \-
  2132. \+
  2133. \+
  2134. \3S (Esce Salvando \ su \ file) \ \1- \ Battendo \ 's' \ l'utente \ esce 
  2135. \-
  2136. \+
  2137. \+
  2138. (previa conferma) dal programma salvando su file il contenuto 
  2139. \-
  2140. \+
  2141. \+
  2142. della tabella principale.\,
  2143. \-
  2144. \+
  2145. \+
  2146. \,
  2147. \-
  2148. \+
  2149. \+
  2150.    \45.3 LE PRINCIPALI STRUTTURE DATI.\,
  2151. \-
  2152. \+
  2153. \+
  2154. \1In questa sezione vengono descritte le \ principali \ strutture 
  2155. \-
  2156. \+
  2157. \+
  2158. dati usate per implementare il programma.\,
  2159. \-
  2160. \+
  2161. \+
  2162. Avendo gia' parlato del buffer di seriale \3Com1buf \1vediamo ora 
  2163. \-
  2164. \+
  2165. \+
  2166. le rimanenti strutture significative.\,
  2167. \-
  2168. \+
  2169. \+
  2170. La piu' importante e' sicuramente \3Info[]\1: essa contiene tutte 
  2171. \-\/
  2172. \+
  2173. \+
  2174. le informazioni relative \ ad \ un \ link: \ i \ nominativi \ degli 
  2175. \-
  2176. \+
  2177. \+
  2178. operatori (\3.link[]\1), il tipo di protocollo presente a livello 
  2179. \-
  2180. \+
  2181. \+
  2182. piu' alto (\3.protocollo[])\1, il numero di pacchetti I scambiati 
  2183. \-
  2184. \+
  2185. \+
  2186. (.\3num_p)\1, il numero di collisioni \ rilevate \ (.\3num_coll\1), \ il 
  2187. \-
  2188. \+
  2189. \+
  2190. numero di pacchetti inviati da una parte all'altra del link e 
  2191. \-
  2192. \+
  2193. \+
  2194. viceversa (.\3a_to_btot, \ \1.\3b_to_atot)\1, \ il \ numero \ progressivo 
  2195. \-
  2196. \+
  2197. \+
  2198. dell'ultimo \ \ pacchetto \ \ \ I \ \ \ intercettato \ \ \ (.\3a_to_bprog, 
  2199. \-
  2200. \+
  2201. \+
  2202. \1.\3b_to_aprog\1), \ la \ data \ e \ l'ora \ del \ primo \ e \ dell'ultimo 
  2203. \-
  2204. \+
  2205. \+
  2206. pacchetto \ \ \ intercettato \ \ \ \ (.\3data_primo, \ \ \ \ \1.\3data_ultimo, 
  2207. \-
  2208. \+
  2209. \+
  2210. \1.\3ora_primo, \1.\3ora_ultimo) \1lo stato del link, cioe' \ se \ esiste 
  2211. \-
  2212. \+
  2213. \+
  2214. ancora la connessione o se e' gia' cessata \ (.\3stato\1), \ e \ una 
  2215. \-
  2216. \+
  2217. \+
  2218. struttura a lista del tipo elemento - puntatore \ all'elemento 
  2219. \-
  2220. \+
  2221. \+
  2222. successivo dove vengono salvati i nominativi degli \ eventuali 
  2223. \-
  2224. \+
  2225. \+
  2226. digipeaters (.\3digi_struct).\,
  2227. \-
  2228. \+
  2229. \+
  2230. \1Un'altra importante struttura dati e' quella nella quale sono 
  2231. \-
  2232. \+
  2233. \+
  2234. memorizzati byte per \ byte \ i \ pacchetti \ che \ devono \ essere 
  2235. \-
  2236. \+
  2237. \+
  2238. intercettati. Essa e' costituita \ da \ un \ array \ \3buffer[] \ \1di 
  2239. \-
  2240. \+
  2241. \+
  2242. strutture \ composte \ dai \ seguenti \ campi: \ \3.*pacchetto, \ \1che 
  2243. \-
  2244. \+
  2245. \+
  2246. contiene i byte relativi al pacchetto catturato, \ e \ \3.pac_len 
  2247. \-
  2248. \+
  2249. \+
  2250. \1che indica la sua lunghezza.\,
  2251. \-
  2252. \+
  2253. \+
  2254. Per quanto riguarda \ la \ parte \ grafica, \ le \ strutture \ dati 
  2255. \-
  2256. \+
  2257. \+
  2258. significative \ sono \ l'array \ \3punto[] \ \1di \ \ strutture \ \ cosi' 
  2259. \-
  2260. \+
  2261. \+
  2262. composte: (\3.stato\1) in cui e' memorizzato lo stato \ del \ punto 
  2263. \-
  2264. \+
  2265. \+
  2266. sullo schermo, (\3.nome\1) che contiene \ il \ nome \ dell'eventuale 
  2267. \-
  2268. \+
  2269. \+
  2270. stazione presente in quel punto e (\3.link[]\1) che e' \ un \ array 
  2271. \-
  2272. \+
  2273. \+
  2274. di nomi delle eventuali stazioni collegate.\,
  2275. \-
  2276. \+
  2277. \+
  2278. Questo array e' usato dalle varie funzioni per sapere \ se \ un 
  2279. \-
  2280. \+
  2281. \+
  2282. punto sullo schermo e' libero, \ se \ e' \ una \ stazione \ o \ una 
  2283. \-\/
  2284. \+
  2285. \+
  2286. linea. Inoltre, nel caso il punto sia una stazione \ si \ tiene 
  2287. \-
  2288. \+
  2289. \+
  2290. traccia dei suoi eventuali collegamenti con altre stazioni.\,
  2291. \-
  2292. \+
  2293. \+
  2294. L'altra struttura dati di rilievo e' la strittura \3chiave \ \1che 
  2295. \-
  2296. \+
  2297. \+
  2298. consente di \ creare \ una \ lista \ di \ corrispondenze \ nomi \ di 
  2299. \-
  2300. \+
  2301. \+
  2302. stazione  - posizione da esse occupata sullo schermo.\,
  2303. \-
  2304. \+
  2305. \+
  2306. In questa lista si inseriscono le nuove stazioni, si \ trovano 
  2307. \-
  2308. \+
  2309. \+
  2310. quelle gia' \ inserite, \ e \ vengono \ rimosse \ quelle \ che \ non 
  2311. \-
  2312. \+
  2313. \+
  2314. servono \ piu'; \ in \ sostanza, \ questa \ struttura \ svolge \ \ le 
  2315. \-
  2316. \+
  2317. \+
  2318. funzioni di un piccolo data-base.\,
  2319. \-
  2320. \+
  2321. \+
  2322. \,
  2323. \-
  2324. \+
  2325. \+
  2326.    \45.4 LE PRINCIPALI COSTANTI DEL PROGRAMMA.\,
  2327. \-
  2328. \+
  2329. \+
  2330. \1Si riporta un elenco delle \ costanti \ significative \ presenti 
  2331. \-
  2332. \+
  2333. \+
  2334. nel \ programma, \ dove \ sono \ implementate \ tramite \ \ #define. 
  2335. \-
  2336. \+
  2337. \+
  2338. Volutamente vengono tralasciate \ le \ costanti \ relative \ alle 
  2339. \-
  2340. \+
  2341. \+
  2342. routine di \ inizializzazione \ ed \ uso \ della \ porta \ seriale. 
  2343. \-
  2344. \+
  2345. \+
  2346. BUFSIZE: 10000 - Dimensione in byte del buffer di seriale.\,
  2347. \-
  2348. \+
  2349. \+
  2350. FEND: 192 - Byte del kiss mode che da' l'inizio e la fine \ di 
  2351. \-
  2352. \+
  2353. \+
  2354. un pacchetto.\,
  2355. \-
  2356. \+
  2357. \+
  2358. FESC, TFEND, TFESC - Parametri che permettono di eseguire \ il 
  2359. \-
  2360. \+
  2361. \+
  2362. byte stuffing di un pacchetto.\,
  2363. \-
  2364. \+
  2365. \+
  2366. NET_ROM: 207, IP: 204 \ - \ Valori \  del \   Byte \   PID \    che 
  2367. \-
  2368. \+
  2369. \+
  2370. identificano i rispettiviprotocolli a  livello 3.\,
  2371. \-
  2372. \+
  2373. \+
  2374. MAX_LINK: \ 10 \ - \ Numero \ massimo \ di \ link \ \ nella \ \ tabella 
  2375. \-
  2376. \+
  2377. \+
  2378. principale.\,
  2379. \-
  2380. \+
  2381. \+
  2382. TIME_OUT: 15 \ - \ Numero \ di \ minuti \ dopo \ i \ quali \ un \ link 
  2383. \-
  2384. \+
  2385. \+
  2386. 'silenzioso' viene \ considerato \ disconnesso. \ TIME_OUT \ deve 
  2387. \-
  2388. \+
  2389. \+
  2390. essere compresa nell'intervallo (0, 59).\,
  2391. \-
  2392. \+
  2393. \+
  2394. NUMPAKMAX: 250  - Numero \ massimo \ di \ pacchetti \ catturabili 
  2395. \-\/
  2396. \+
  2397. \+
  2398. byte per byte.\,
  2399. \-
  2400. \+
  2401. \+
  2402. TEMPO_AGGIORNAMENTO: 30 - Numero \ di \ secondi \ dopo \ i \ quali 
  2403. \-\/
  2404. \+
  2405. \+
  2406. viene svuotato il \ buffer \ di \ seriale \ durante \ l'uso \ della 
  2407. \-
  2408. \+
  2409. \+
  2410. sessione di Analisi dei pacchetti.\,
  2411. \-
  2412. \+
  2413. \+
  2414. \,
  2415. \-
  2416. \+
  2417. \+
  2418.    \45.5 LE PRINCIPALI ROUTINE DEL PROGRAMMA.\,
  2419. \-
  2420. \+
  2421. \+
  2422. \,
  2423. \-
  2424. \+
  2425. \+
  2426. \3void \ \ Introduzione \ \ (void) \1- \ \ All'inizio \ \ del \ \ programma 
  2427. \-
  2428. \+
  2429. \+
  2430. visualizza le due pagine di informazioni.\,
  2431. \-
  2432. \+
  2433. \+
  2434. \,
  2435. \-
  2436. \+
  2437. \+
  2438. \3void Lista_Digipeater() \1- Questa routine crea \ la \ lista \ dei 
  2439. \-
  2440. \+
  2441. \+
  2442. digipeater \ eventualmente \ presenti \ nel \ \ campo \ \ indirizzo, 
  2443. \-
  2444. \+
  2445. \+
  2446. salvandoli nella struttura \3Digi_struct\1.\,
  2447. \-
  2448. \+
  2449. \+
  2450. \,
  2451. \-
  2452. \+
  2453. \+
  2454. \3void Byte_Stuffing(), Decodifica_Ind(),\,
  2455. \-
  2456. \+
  2457. \+
  2458. Decodifica_Controllo(), Decodifica_Tipo() \1- \ Queste \ routines 
  2459. \-
  2460. \+
  2461. \+
  2462. decodificano i \ parametri \ significativi \ di \ ogni \ pacchetto 
  2463. \-
  2464. \+
  2465. \+
  2466. intercettato.\,
  2467. \-
  2468. \+
  2469. \+
  2470. \,
  2471. \-
  2472. \+
  2473. \+
  2474. \3void \ Gestisci_File \ (void) \ - \ \ \1All'inizio \ \ del \ \ programma 
  2475. \-
  2476. \+
  2477. \+
  2478. controlla se esiste gia' un file "log.pkt" - Se si' \ lo \ apre 
  2479. \-
  2480. \+
  2481. \+
  2482. per \ l'eventuale \ aggiunta \ dei \ dati, \ altrimenti \ lo \ \ crea 
  2483. \-
  2484. \+
  2485. \+
  2486. scrivendo per prima cosa delle \ informazioni \ su \ come \ detto 
  2487. \-
  2488. \+
  2489. \+
  2490. file e' strutturato.\,
  2491. \-
  2492. \+
  2493. \+
  2494. \,
  2495. \-
  2496. \+
  2497. \+
  2498. \3void Aggiorna_Connessioni (void) - \1Questa \ routine \ considera 
  2499. \-
  2500. \+
  2501. \+
  2502. disconnesso un link che \ non \ dialoga \ da \ piu' \ di \ TIME_OUT 
  2503. \-
  2504. \+
  2505. \+
  2506. minuti, ponendo cosi' lo stato a 0 (disconnesso). \ Utile \ per 
  2507. \-\/
  2508. \+
  2509. \+
  2510. quei link di cui non si riceve il pacchetto DISC o per quegli 
  2511. \-
  2512. \+
  2513. \+
  2514. altri in cui il dialogo avviene al di fuori del normale \ AX25 
  2515. \-
  2516. \+
  2517. \+
  2518. (per esempio link in NETROM o IP).\,
  2519. \-
  2520. \+
  2521. \+
  2522. \,
  2523. \-
  2524. \+
  2525. \+
  2526. \3void Scrivi_Orologio (byte x,y) - \1Questa routine aggiorna data 
  2527. \-
  2528. \+
  2529. \+
  2530. e ora \ correnti \ che \ vengono \ visualizzate \ nella \ schermata 
  2531. \-
  2532. \+
  2533. \+
  2534. principale alle posizioni indicate da x e y.\,
  2535. \-
  2536. \+
  2537. \+
  2538. \,
  2539. \-
  2540. \+
  2541. \+
  2542. \3void \ Visualizza_Menu \ (void)\1, \   \3void \ Mostra_Info \ \ (void),    
  2543. \-
  2544. \+
  2545. \+
  2546. void Host_Off (void)\1, \3void Esci() - \1Visualizzano il menu \ dei 
  2547. \-
  2548. \+
  2549. \+
  2550. comandi disponibili nella finestra video in basso \ a \ destra\3, 
  2551. \-
  2552. \+
  2553. \+
  2554. \1e\3/\1o gestiscono le eventuali scelte dell'utente.\,
  2555. \-
  2556. \+
  2557. \+
  2558. \,
  2559. \-\/
  2560. \+
  2561. \+
  2562. \3void Usa_FullScreen (void) - void Usa_Window1 (void) \ - \ void 
  2563. \-
  2564. \+
  2565. \+
  2566. (Usa_Window2) - \1Gestiscono il sistema di riferimento \ attuale 
  2567. \-
  2568. \+
  2569. \+
  2570. per il cursore.\,
  2571. \-
  2572. \+
  2573. \+
  2574. \,
  2575. \-
  2576. \+
  2577. \+
  2578. \3Int Esiste_Link (unsigned char *i, crea_posto_vuoto) - \1Questa 
  2579. \-
  2580. \+
  2581. \+
  2582. routine analizza il link \ presente \ nella \ variabile \ globale 
  2583. \-
  2584. \+
  2585. \+
  2586. LINK_1 e stabilisce se in tabella esiste gia' oppure \ no. \ In 
  2587. \-
  2588. \+
  2589. \+
  2590. caso \ positivo \ ritorna \ \ 1, \ \ altrimenti \ \ ritorna \ \ 0. \ \ In 
  2591. \-
  2592. \+
  2593. \+
  2594. quest'ultimo caso, \ inoltre, se  crea_posto_vuoto e' a 1, la 
  2595. \-
  2596. \+
  2597. \+
  2598. routine restituisce tramite *i l'indice di \ tabella \ dove \ e' 
  2599. \-
  2600. \+
  2601. \+
  2602. possibile \ \ memorizzare \ \ il \ \ nuovo \ \ link \ \ \ (eventualmente 
  2603. \-
  2604. \+
  2605. \+
  2606. eliminando, salvandolo su file tramite apposita \ routine, \ il 
  2607. \-
  2608. \+
  2609. \+
  2610. link  disconnesso piu' vecchio; se nessun link in tabella \ e' 
  2611. \-
  2612. \+
  2613. \+
  2614. in stato di disconnessione, la ricerca del piu' vecchio viene 
  2615. \-
  2616. \+
  2617. \+
  2618. fatta su tutti i link) .\,
  2619. \-\/
  2620. \+
  2621. \+
  2622. \3void Salva_Info(unsigned char nr) - \1Salva su file il link \ di 
  2623. \-
  2624. \+
  2625. \+
  2626. indice nr della tabella.\,
  2627. \-
  2628. \+
  2629. \+
  2630. \,
  2631. \-
  2632. \+
  2633. \+
  2634. \3void Crea_Nuovo_Link (unsigned char in, fr) \1- Crea \ il \ nuovo 
  2635. \-
  2636. \+
  2637. \+
  2638. link LINK1 alla posizione in, ponendo i parametri del link in 
  2639. \-
  2640. \+
  2641. \+
  2642. accordo con il frame ricevuto fr.\,
  2643. \-
  2644. \+
  2645. \+
  2646. \,
  2647. \-
  2648. \+
  2649. \+
  2650. \3void Cattura_Pacchetto(), Resetta_Capture() - \ \1Gestiscono \ la 
  2651. \-
  2652. \+
  2653. \+
  2654. cattura byte a byte dei pacchetti riferendosi alla \ variabile 
  2655. \-
  2656. \+
  2657. \+
  2658. capture \ che \ viene \ \ eventualmente \ \ resettata \ \ quando \ \ si 
  2659. \-
  2660. \+
  2661. \+
  2662. verificano certe condizioni.\,
  2663. \-
  2664. \+
  2665. \+
  2666. \,
  2667. \-
  2668. \+
  2669. \+
  2670. \3void Analisi_Pacchetti() - \1Per\3m\1ette l'analisi \ dei \ pacchetti 
  2671. \-
  2672. \+
  2673. \+
  2674. catturati, secondo le modalita' di cui sopra.\,
  2675. \-
  2676. \+
  2677. \+
  2678. \,
  2679. \-
  2680. \+
  2681. \+
  2682. \3void Salva_Tabella (void) \ \1- \ All'uscita \ del \ programma, \ se 
  2683. \-
  2684. \+
  2685. \+
  2686. richiesto, salva su file la tabella corrente.\,
  2687. \-
  2688. \+
  2689. \+
  2690. \,
  2691. \-
  2692. \+
  2693. \+
  2694. \3Dos_Shell (void) \ - \1Apre \ una \ shell \ del \ DOS \ gestendo \ \ il 
  2695. \-
  2696. \+
  2697. \+
  2698. salvataggio della situazione video e tutti gli imprevisti che 
  2699. \-
  2700. \+
  2701. \+
  2702. possono capitare a tale livello.\,
  2703. \-
  2704. \+
  2705. \+
  2706. \,
  2707. \-
  2708. \+
  2709. \+
  2710. \3Controlla_Tbaud (int*speed) \1- \ Controlla \ che \ il \ valore \ di 
  2711. \-
  2712. \+
  2713. \+
  2714. velocita' inserito sulla linea di \ comando \ sia \ ragionevole, 
  2715. \-
  2716. \+
  2717. \+
  2718. (300, 600, 1200, 2400, 4800 \ , \ 9600) \ altrimenti \ lo \ assume 
  2719. \-
  2720. \+
  2721. \+
  2722. 1200.\,
  2723. \-
  2724. \+
  2725. \+
  2726. \3void StartPlacet(void) \1- Predispone la partenza \ del \ sistema 
  2727. \-
  2728. \+
  2729. \+
  2730. grafico e la \ creazione \ dinamica \ delle \ strutture \ dati \ in 
  2731. \-
  2732. \+
  2733. \+
  2734. funzione del tipo di scheda video disponibile.\,
  2735. \-
  2736. \+
  2737. \+
  2738. \,
  2739. \-
  2740. \+
  2741. \+
  2742. \3void EndPlacet(void) \1- Rilascia \ la \ memoria \ allocata \ dalla 
  2743. \-
  2744. \+
  2745. \+
  2746. funzione precedente e predispone il ritorno \ del \ sistema \ al 
  2747. \-
  2748. \+
  2749. \+
  2750. modo 'testo'.\,
  2751. \-
  2752. \+
  2753. \+
  2754. \,
  2755. \-
  2756. \+
  2757. \+
  2758. \3word PiazzaStazione(char *nome) \1- Disegna una stazione \ sullo 
  2759. \-
  2760. \+
  2761. \+
  2762. schermo in modo casuale e ritorna un \ numero \ associato \ alla 
  2763. \-
  2764. \+
  2765. \+
  2766. sua posizione.\,
  2767. \-
  2768. \+
  2769. \+
  2770. \,
  2771. \-
  2772. \+
  2773. \+
  2774. \3void\ PiazzaStazioni(char *nome1, char *nome2, byte pr\,
  2775. \-
  2776. \+
  2777. \+
  2778. \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ word *s1, \    word \ *s2) \ \1- \ Disegna \ due 
  2779. \-
  2780. \+
  2781. \+
  2782. stazioni sullo schermo in modo casuale, ritorna in \3s1 \1e \3s2 \1le 
  2783. \-
  2784. \+
  2785. \+
  2786. posizioni delle medesime e \ provvede \ a \ collegarle \ con \ una 
  2787. \-
  2788. \+
  2789. \+
  2790. linea di diverso tipo a seconda del \ valore \ del \ protocolllo 
  2791. \-
  2792. \+
  2793. \+
  2794. contenuto in \3pr\1.\,
  2795. \-
  2796. \+
  2797. \+
  2798. \,
  2799. \-
  2800. \+
  2801. \+
  2802. \3boolean LinkaStazioni(word s1, char *nome, byte pr, word *s2)\,
  2803. \-
  2804. \+
  2805. \+
  2806. \1Collega la stazione associata a \3nome \1alla stazione \ \3s1\1, \ gia' 
  2807. \-
  2808. \+
  2809. \+
  2810. presente sullo schermo \ con \ una \ linea \ di \ diverso \ tipo \ a 
  2811. \-
  2812. \+
  2813. \+
  2814. sseconda del valore del protocollo contenuto in \3pr\1.\,
  2815. \-
  2816. \+
  2817. \+
  2818. Ritorna in \3s2 \1la posizione della stazione \ collegata; \ se \ la 
  2819. \-
  2820. \+
  2821. \+
  2822. funzione non riesce a collegare la nuova \ stazione \ e \ quella 
  2823. \-
  2824. \+
  2825. \+
  2826. vecchia, la funzione ritorna \3FALSE\1.\,
  2827. \-
  2828. \+
  2829. \+
  2830. \3boolean LinkAttivi(word s) \1- Questa funzione ritorna \ \3TRUE \ \1o 
  2831. \-
  2832. \+
  2833. \+
  2834. \3FALSE \1a seconda che la stazione \3s \1sia o \ meno \ collegata \ con 
  2835. \-
  2836. \+
  2837. \+
  2838. altre stazioni.\,
  2839. \-
  2840. \+
  2841. \+
  2842. \,
  2843. \-
  2844. \+
  2845. \+
  2846. \3boolean StazioniCollegate(word s1, word s2) \1- Questa funzione 
  2847. \-
  2848. \+
  2849. \+
  2850. ritorna \3TRUE \1se la \ stazione \ \3s1 \ \1e \ la \ \3s2 \ \1sono \ collegate, 
  2851. \-
  2852. \+
  2853. \+
  2854. \3FALSE \1altrimenti.\,
  2855. \-
  2856. \+
  2857. \+
  2858. \,
  2859. \-
  2860. \+
  2861. \+
  2862. \3void RimuoviStazione(word s) \1- Cancella la stazione \ \3s \ \1dallo 
  2863. \-
  2864. \+
  2865. \+
  2866. schermo a aggiorna l'array \3punto[]\1.\,
  2867. \-
  2868. \+
  2869. \+
  2870. \,
  2871. \-
  2872. \+
  2873. \+
  2874. \3void RimuoviLInk(word s1, word s2) \1- Cancella il collegamento 
  2875. \-
  2876. \+
  2877. \+
  2878. fra la stazione \3s1 \1e la \3s2 \1e aggiorna l'array \3punto[]\1.\,
  2879. \-
  2880. \+
  2881. \+
  2882. \,
  2883. \-
  2884. \+
  2885. \+
  2886. \3void BlinkStazione(word s) \1- Fa lampeggiare la stazione \3s\1.\,
  2887. \-
  2888. \+
  2889. \+
  2890. \,
  2891. \-
  2892. \+
  2893. \+
  2894. \3void AddStazione(char *nome, word s) \1- Aggiunge nel data-base 
  2895. \-
  2896. \+
  2897. \+
  2898. la nuova relazione nome_stazione - posizione, aggiornando \ la 
  2899. \-
  2900. \+
  2901. \+
  2902. lista \3chiave\1.\,
  2903. \-
  2904. \+
  2905. \+
  2906. \,
  2907. \-
  2908. \+
  2909. \+
  2910. \3void DelDtazione(char \ *nome) \ \1- \ Rimuove \ dal \ data-base \ la 
  2911. \-
  2912. \+
  2913. \+
  2914. posizione della stazione associata a \3nome\1: se la stazione non 
  2915. \-
  2916. \+
  2917. \+
  2918. e' presente nel data-base, la funzione ritorna \3NOT_FOUND\1.\,
  2919. \-
  2920. \+
  2921. \+
  2922. \,
  2923. \-
  2924. \+
  2925. \+
  2926. \3void ClearKeyt(void) \1- Reinizializza il data-base rilasciando 
  2927. \-
  2928. \+
  2929. \+
  2930. tutta la memoria di cui era costituita la lista \3chiave\1.\,
  2931. \-
  2932. \=
  2933.