Compare commits

...

176 commits

Author SHA1 Message Date
Hibby 4f0df4999c Update to include the good stuff 2026-01-07 22:21:08 +00:00
Hibby 162b03be13 Release 2026-01-07 21:55:19 +00:00
Hibby b0660dea06 Remove Patch for TelnetV6, fixed upstream 2026-01-07 21:50:03 +00:00
Hibby 26f10ca1b6 Update upstream source from tag 'upstream/6.0.25.15+repack'
Update to upstream version '6.0.25.15+repack'
with Debian dir 72d93ed8ce
2026-01-07 21:45:17 +00:00
Hibby dae2bbc721 New upstream version 6.0.25.15+repack 2026-01-07 21:45:15 +00:00
Hibby b031f8dedf Release 2025-12-23 16:46:05 +00:00
Hibby 84b34add07 Patch TelnetV6 to build 2025-12-23 16:39:54 +00:00
Hibby d5f8de2e8f Update upstream source from tag 'upstream/6.0.25.13+repack'
Update to upstream version '6.0.25.13+repack'
with Debian dir 26b4e77a37
2025-12-23 16:30:09 +00:00
Hibby 559d5bbf7c New upstream version 6.0.25.13+repack 2025-12-23 16:30:05 +00:00
Hibby ee15c1a996 Release! 2025-11-22 15:14:42 +00:00
Hibby 944fdfc524 Update upstream source from tag 'upstream/6.0.25.12+repack'
Update to upstream version '6.0.25.12+repack'
with Debian dir 0b59d86e0b
2025-11-22 15:09:25 +00:00
Hibby 52e35f45b4 New upstream version 6.0.25.12+repack 2025-11-22 15:09:21 +00:00
Hibby 3fbe745ec9 Release 25.11 2025-11-11 21:53:27 +00:00
Hibby 1338e2c0a4 Update upstream source from tag 'upstream/6.0.25.11+repack'
Update to upstream version '6.0.25.11+repack'
with Debian dir 9c0f82ee4c
2025-11-11 21:50:49 +00:00
Hibby 8dc88bc829 Changelog update, release 2025-11-09 22:45:36 +00:00
Hibby 58ab380142 Refresh patches 2025-11-09 22:35:15 +00:00
Hibby 3c2c1cf9f8 Update upstream source from tag 'upstream/6.0.25.9+repack'
Update to upstream version '6.0.25.9+repack'
with Debian dir 15e3115d6f
2025-11-09 22:34:23 +00:00
Hibby 367ab8fb01 New upstream version 6.0.25.9+repack 2025-11-09 22:34:20 +00:00
Hibby e569b24f9a Changelog! 2025-10-24 00:48:59 +01:00
Hibby 272c31f62b Refresh patches with gbp pq! 2025-10-24 00:40:43 +01:00
Hibby f99a060918 Update upstream source from tag 'upstream/6.0.25.8+repack'
Update to upstream version '6.0.25.8+repack'
with Debian dir 34f11488df
2025-10-24 00:36:53 +01:00
Hibby 13c0b79af7 Don't forget about the changelog 2025-10-10 23:55:55 +01:00
Hibby 2e55f0a4ca Build on latest gcc standards 2025-10-10 23:54:35 +01:00
Hibby acbaf26ac1 New upstream 2025-10-10 23:51:40 +01:00
Hibby 70d9b41cc1 Update upstream source from tag 'upstream/6.0.25.06+repack'
Update to upstream version '6.0.25.06+repack'
with Debian dir 0466cb7b03
2025-10-10 23:37:36 +01:00
Hibby c0425ff0e2 Migrate patches tp gbp pq 2025-09-20 15:58:22 +01:00
Hibby e4d8eadb91 Set c standard, it builds! 2025-09-20 15:41:51 +01:00
Hibby ac03394a07
First work on new version 2025-09-09 22:10:43 +01:00
Hibby d0f299bc02 Update upstream source from tag 'upstream/6.0.25.1+repack'
Update to upstream version '6.0.25.1+repack'
with Debian dir 5c600492d3
2025-09-04 22:52:15 +01:00
Hibby 78f78927ab
Release new version 2025-08-17 22:40:01 +01:00
Hibby 27d95452b1 Update upstream source from tag 'upstream/6.0.24.82+repack'
Update to upstream version '6.0.24.82+repack'
with Debian dir a145ad04db
2025-08-17 22:31:33 +01:00
Hibby e925e16114 New upstream version 6.0.24.82+repack 2025-08-17 22:31:27 +01:00
Hibby d97d9d821b
Commit before next update! 2025-08-17 22:30:20 +01:00
Hibby a6b3c4bdc9 Update upstream source from tag 'upstream/6.0.24.80+repack'
Update to upstream version '6.0.24.80+repack'
with Debian dir 9e943f8d36
2025-08-12 20:09:07 +01:00
Hibby 3e1cbdfa4d New upstream version 6.0.24.80+repack 2025-08-12 20:09:04 +01:00
Hibby 7a5122a60f
Changelog for release, makefile patch refresh 2025-07-31 01:31:52 +01:00
Hibby 0013c3199a Update upstream source from tag 'upstream/6.0.24.78+repack'
Update to upstream version '6.0.24.78+repack'
with Debian dir 819c1fdecb
2025-07-31 01:28:57 +01:00
Hibby 5d30fbc104
New files to exclude 2025-07-31 01:28:13 +01:00
Hibby e21707174e
Release! 2025-07-22 21:52:16 +01:00
Hibby 26324bdc39
First build 2025-07-22 21:44:33 +01:00
Hibby 1cc87cf766 Update upstream source from tag 'upstream/6.0.24.77+repack'
Update to upstream version '6.0.24.77+repack'
with Debian dir bbbd57413e
2025-07-22 20:57:03 +01:00
Hibby 30b1e26a04
Did a port on minibuildd for +1, this is technically +2 2025-07-16 19:16:00 +01:00
Hibby 31bda6ce76
Trixie release 2025-07-16 19:11:08 +01:00
Hibby d2c3489aef
Release 2025-07-15 01:11:11 +01:00
Hibby 6371d5385a Update upstream source from tag 'upstream/6.0.24.75+repack'
Update to upstream version '6.0.24.75+repack'
with Debian dir 8aa30a6de8
2025-07-14 23:14:14 +01:00
Hibby b2315840b2 New upstream version 6.0.24.75+repack 2025-07-14 23:14:11 +01:00
Hibby 8d3874ec4e
Update d/copyright to ignore svn 2025-07-14 23:12:11 +01:00
Hibby 6a4b588a48
Release and autoport magic 2025-05-21 22:12:07 +01:00
Hibby 426f47ccb6
It builds successfully! 2025-05-21 21:45:54 +01:00
Hibby 3ecb593511 Update upstream source from tag 'upstream/6.0.24.71+repack'
Update to upstream version '6.0.24.71+repack'
with Debian dir d79186aef0
2025-05-21 21:33:54 +01:00
Hibby 0d3ee7fd56 New upstream version 6.0.24.71+repack 2025-05-21 21:33:52 +01:00
Hibby 96197688e7
New upstream version 6.0.24.69.1+repack 2025-05-21 21:32:18 +01:00
Hibby d3b4158645
New upstream version 6.0.24.69+repack 2025-05-21 21:32:18 +01:00
Hibby fec78cece5
Update changelog 2025-05-21 21:32:17 +01:00
Hibby bdf8a8367e
New upstream version 6.0.24.67+repack 2025-05-21 21:32:17 +01:00
Hibby f0ac0675f6
Release, try out some MINI_BUILDD_OPTIONS 2025-03-11 00:51:56 +00:00
Hibby 329e2f441d
Who knows at this point 2025-03-11 00:28:11 +00:00
Hibby 0b4a17004f
New upstream 2025-03-04 22:50:37 +00:00
Hibby f0b507a096 Update upstream source from tag 'upstream/6.0.24.66+repack'
Update to upstream version '6.0.24.66+repack'
with Debian dir 0a1e01b2c4
2025-03-04 22:46:54 +00:00
Hibby 9d0d20064d
Release! 2025-02-25 09:39:10 +00:00
Hibby ead72b2575
New import packaging 2025-02-25 09:35:39 +00:00
Hibby f1d8b647c7 Update upstream source from tag 'upstream/6.0.24.65+repack'
Update to upstream version '6.0.24.65+repack'
with Debian dir 324f0a8474
2025-02-25 09:32:59 +00:00
Hibby bfcf049c56
New packaging tweaks 2025-02-03 22:35:11 +00:00
Hibby 488e218d34 Update upstream source from tag 'upstream/6.0.24.59a+repack'
Update to upstream version '6.0.24.59a+repack'
with Debian dir 618298da94
2025-02-03 22:19:01 +00:00
Hibby 3efea8aa10
Release 2025-01-06 21:41:04 +00:00
Hibby 8e9260b52d
Updates for .56 2025-01-06 21:37:03 +00:00
Hibby 5105f0adf3 Update upstream source from tag 'upstream/6.0.24.56+repack'
Update to upstream version '6.0.24.56+repack'
with Debian dir 5e2bea687a
2025-01-06 21:26:32 +00:00
Hibby b060bf5d39
Update upstream source from tag 'upstream/6.0.24.55+repack'
Update to upstream version '6.0.24.55+repack'
with Debian dir ba150ac059
2025-01-05 23:35:13 +00:00
Hibby 33d8e6f75a
Release to unstable 2024-12-17 16:51:59 +00:00
Hibby 58d2baad53
New upstream and packaging tweaks 2024-12-17 16:45:51 +00:00
Hibby 1f73eb5601 Update upstream source from tag 'upstream/6.0.24.54+repack'
Update to upstream version '6.0.24.54+repack'
with Debian dir f571d496d3
2024-12-16 17:54:18 +00:00
Hibby a7d635fe2f New upstream version 6.0.24.54+repack 2024-12-16 17:54:16 +00:00
Hibby eab73bee95
.53 build 2024-12-09 10:06:20 +00:00
Hibby 745a9f8e88 Update upstream source from tag 'upstream/6.0.24.53+repack'
Update to upstream version '6.0.24.53+repack'
with Debian dir 64961bc210
2024-12-03 00:27:59 +00:00
Hibby dd84b546a0
Release 2024-11-30 22:14:12 +00:00
Hibby 3a600bee23 Update upstream source from tag 'upstream/6.0.24.52+repack'
Update to upstream version '6.0.24.52+repack'
with Debian dir 0b34b91ce1
2024-11-30 21:42:45 +00:00
Hibby d09a168608 Update upstream source from tag 'upstream/6.0.24.51.3+repack+really50'
Update to upstream version '6.0.24.51.3+repack+really50'
with Debian dir 0b34b91ce1
2024-11-30 11:27:30 +00:00
Hibby 757c658adc Update upstream source from tag 'upstream/6.0.24.51.2+repack+really.50'
Update to upstream version '6.0.24.51.2+repack+really.50'
with Debian dir 0b34b91ce1
2024-11-30 11:21:00 +00:00
Hibby 37bacc3178
Update required for build on trixie - I knew there was weirdness
somewhere!
2024-11-29 19:57:43 +00:00
Hibby 7690eb8f59
Release! 2024-11-29 19:33:20 +00:00
Hibby a675c89dc3 Update upstream source from tag 'upstream/6.0.24.51.1+repack'
Update to upstream version '6.0.24.51.1+repack'
with Debian dir 345d0bf3b0
2024-11-29 19:19:21 +00:00
Hibby 7433c77604
little tweaks before import 2024-11-29 19:18:48 +00:00
Hibby 6bd281ab30
Tweaks to get functionality 2024-11-29 16:13:51 +00:00
Hibby c0637b3841
Last batch of changes, ready for release! 2024-11-29 13:23:18 +00:00
Hibby 3a840054a7 Update upstream source from tag 'upstream/6.0.24.51+repack'
Update to upstream version '6.0.24.51+repack'
with Debian dir cbfe17e0e2
2024-11-29 12:56:28 +00:00
Hibby 8a18ca1868
pull more files out, update watch for repack 2024-11-29 12:55:39 +00:00
Hibby 49e27728c3
Removal of files I don't think we need to ship 2024-11-29 12:09:05 +00:00
Hibby 8e7a943558
This builds and links to system libs! 2024-11-29 12:04:09 +00:00
Hibby e35489a925
Latest revisions 2024-11-29 11:37:37 +00:00
Hibby c77b3e9f47
More updates, large makefile rewrite for dynamic linking and cleaner
build, WIP.
2024-11-29 02:24:20 +00:00
Hibby 1e83f7e725
First pass of fixes for new build 2024-11-28 22:50:13 +00:00
Hibby 5d8d8963ef Update upstream source from tag 'upstream/6.0.24.51'
Update to upstream version '6.0.24.51'
with Debian dir b28e5722f6
2024-11-28 22:34:01 +00:00
Hibby 96d6e87d12
Release! 2024-11-12 21:58:14 +00:00
Hibby 5bd018b10f
Little packaging tidies 2024-11-12 21:53:24 +00:00
Hibby 4d14474d92 Update upstream source from tag 'upstream/6.0.24.50'
Update to upstream version '6.0.24.50'
with Debian dir 3f4098912b
2024-11-12 21:20:03 +00:00
Hibby 1b40c8c7b5
Try files-excluded, Tidy up copyright! 2024-11-12 21:18:17 +00:00
Hibby a5ce8b2319
Release! 2024-11-05 22:09:13 +00:00
Hibby 6b795ee1f6
Patch Refresh and mqtt details 2024-11-05 21:46:27 +00:00
Hibby 5767c5f6e8 Update upstream source from tag 'upstream/6.0.24.49'
Update to upstream version '6.0.24.49'
with Debian dir 985e9a7aed
2024-11-05 21:03:23 +00:00
Hibby 61f49ee46b
Release for hibbian 2024-10-11 15:49:55 +01:00
Hibby 6e6693fde1
Refresh Patches 2024-10-11 15:46:34 +01:00
Hibby 1a7f29f7d7
Look at me, I am the master now 2024-10-11 15:42:39 +01:00
Hibby f527c60884
Merge branch 'debian/latest' into hibbian/latest 2024-10-11 15:42:00 +01:00
Hibby 3de6b0150f Update upstream source from tag 'upstream/6.0.24.45'
Update to upstream version '6.0.24.45'
with Debian dir 9a5822f2bb
2024-10-11 15:37:17 +01:00
Hibby 0d48067b82
Sneak in the 32bit fixes 2024-09-26 23:13:41 +01:00
Hibby b18a579b0c
Updates to .42 2024-09-25 01:37:12 +01:00
Hibby ba9f74d1b8
more tweaks to get to build 2024-08-30 12:38:57 +01:00
Hibby 550b4483cb
we can't build without this backup! 2024-08-30 12:25:12 +01:00
Hibby 383e238d61
32bit fix release 2024-08-30 12:23:59 +01:00
Hibby 371dac17ff
32bits isn't building 2024-08-30 12:21:15 +01:00
Hibby 24843bc9cd
Add additional group membership for ninotnc SMT users
Fixes: #1
2024-08-30 12:06:42 +01:00
Hibby f17801297c
Release 2024-08-30 11:54:54 +01:00
Hibby f62a0288be
Try hardening on for size 2024-08-30 11:54:32 +01:00
Hibby 85da9edc16
Try hardening on for size 2024-08-30 11:46:56 +01:00
Hibby 666c2aabb4
Start tidying up headers 2024-08-30 11:46:04 +01:00
Hibby a47cc11d8a
First build needs 2024-08-30 10:23:16 +01:00
Hibby b26c87817a Update upstream source from tag 'upstream/6.0.24.42'
Update to upstream version '6.0.24.42'
with Debian dir 41e80b6ddf
2024-08-30 10:15:03 +01:00
Hibby 60585818de
Move config back to /etc on install 2024-08-18 01:44:28 +01:00
Hibby 9dacd97014
Release 2024-07-07 16:09:46 +01:00
Hibby fc0275b903
Upstream revision 2024-07-07 16:08:01 +01:00
Hibby ca2a16b7fc Update upstream source from tag 'upstream/6.0.24.40'
Update to upstream version '6.0.24.40'
with Debian dir 5582820246
2024-07-07 16:06:15 +01:00
Hibby d122a87dd1
New patch to run secure-by-default until upstream patch 2024-07-05 08:35:03 +01:00
Hibby 5b3543c12a
Merge pull request #4 from Online-Amateur-Radio-Club-M0OUK/secure-by-default
Change default value for SECURETELNET from 0 to 1
2024-07-05 08:30:10 +01:00
Tom Fanning d37331205e Create secure-by-default.patch 2024-07-03 10:02:44 +01:00
Tom M0LTE 026ad61c90
Merge pull request #1 from mquin/patch-1
bpq32.cfg: Set SECURETELNET on Telnet port
2024-07-03 09:33:30 +01:00
Mike Quin 5d125856cd
bpq32.cfg: Set SECURETELNET on Telnet port
The SECURETELNET option restricts outbound telnet connections from the node to users who have authenticated.
2024-07-02 19:48:28 +01:00
Hibby a7ecf779fc
Let's fly 2024-06-09 22:38:58 +01:00
Hibby c26f6fe9d8
Packaging updates round 2 2024-06-09 22:34:46 +01:00
Hibby 91fc60e6f0
Packaging updates 2024-06-09 21:52:56 +01:00
Hibby 3b36ba2a06 Update upstream source from tag 'upstream/6.0.24.38'
Update to upstream version '6.0.24.38'
with Debian dir 05f0c663f1
2024-06-09 21:48:46 +01:00
Hibby ec1e97d985
Update bpq32.cfg
Based on feedback, chat app is now ID 2
2024-06-09 11:15:36 +01:00
Hibby 75eadc6bbe
Release -2 update 2024-04-08 22:27:43 +01:00
Hibby eaab24a3c0
Update postinst 2024-04-08 23:21:31 +02:00
Hibby 4b1144ed94
New upstream 2024-04-06 02:15:37 +01:00
Hibby 37b1c8b074 Update upstream source from tag 'upstream/6.0.24.34'
Update to upstream version '6.0.24.34'
with Debian dir e7ec7ee355
2024-04-06 02:10:15 +01:00
Hibby 0b5e0e5023
Merge branch 'debian/latest' of github.com:Online-Amateur-Radio-Club-M0OUK/oarc-bpqnode into debian/latest 2024-03-26 20:58:02 +00:00
Hibby 66ff00a200
Release 2024-03-26 20:57:34 +00:00
Hibby 566b839fd4
Release 2024-03-26 20:24:27 +00:00
Hibby 5f9fb109ff
New upstream & Packaging tidy 2024-03-26 01:28:08 +00:00
Hibby 94179f117a Update upstream source from tag 'upstream/6.0.24.33'
Update to upstream version '6.0.24.33'
with Debian dir 1cb47d2883
2024-03-26 00:53:01 +00:00
Hibby 831f4a75eb
Release 2024-02-23 23:25:02 +00:00
Hibby 3f1fd46905
Upstream revision 2024-02-23 21:38:02 +00:00
Hibby 5b1c61bd78 Update upstream source from tag 'upstream/6.0.24.30'
Update to upstream version '6.0.24.30'
with Debian dir 4f7e13431e
2024-02-23 21:36:42 +00:00
Hibby ee7345ce92
Release 2024-02-13 00:07:16 +00:00
Hibby 733afdfcbc
New upstream 2024-02-13 00:03:15 +00:00
Hibby 2dd6d1f7bf Update upstream source from tag 'upstream/6.0.24.29'
Update to upstream version '6.0.24.29'
with Debian dir ba277a512a
2024-02-12 23:26:50 +00:00
Dave Hibberd 6ee8a719cf
Release 2024-01-18 10:32:10 +00:00
Dave Hibberd d4d0aaa8ab
Update permissions post install on config to allow for web ui edits 2024-01-18 10:31:35 +00:00
Dave Hibberd 710cc6fde7
Release 2024-01-16 20:52:57 +00:00
Dave Hibberd eec767af84
First build of new revision 2024-01-16 20:44:01 +00:00
Dave Hibberd 0c8b9a1da7 Update upstream source from tag 'upstream/6.0.24.27'
Update to upstream version '6.0.24.27'
with Debian dir be0d74d7ed
2024-01-16 20:42:35 +00:00
Dave Hibberd 018d733dee
release 2023-12-28 10:45:07 +00:00
Dave Hibberd 851dcb6fd8
first build of new upstream 2023-12-28 10:44:40 +00:00
Dave Hibberd ce4f1b11b0 Update upstream source from tag 'upstream/6.0.24.25'
Update to upstream version '6.0.24.25'
with Debian dir c5f88a7af8
2023-12-28 10:31:16 +00:00
Dave Hibberd 1fbded9d3a
Tested final release for new layout 2023-12-16 14:40:33 +00:00
Dave Hibberd a4103962fc
bpq config move 2023-12-16 13:35:16 +00:00
Dave Hibberd 397da35dac
Release 2023-12-08 12:29:51 +00:00
Dave Hibberd 9c15385cb6
Upstream import 2023-12-08 12:27:53 +00:00
Dave Hibberd fd1249b1e2 Update upstream source from tag 'upstream/6.0.24.22'
Update to upstream version '6.0.24.22'
with Debian dir 0520fb299a
2023-12-08 12:26:59 +00:00
Dave Hibberd fda3d6ffac
Release! 2023-10-31 22:50:30 +00:00
Dave Hibberd 37a1ea33be
Update changelog 2023-10-31 22:47:35 +00:00
Dave Hibberd 78e830ab37 Update upstream source from tag 'upstream/6.0.24.16'
Update to upstream version '6.0.24.16'
with Debian dir 638c20d26e
2023-10-31 22:42:30 +00:00
Dave Hibberd 9155d3ba64
New control file 2023-10-31 22:42:17 +00:00
Dave Hibberd 6adcb91ee5
release 2023-10-15 21:45:42 +01:00
Dave Hibberd 77f96f5b63
Update and add conffiles 2023-10-15 21:40:20 +01:00
Dave Hibberd 6f53d92599
release after successful build 2023-10-10 22:20:19 +01:00
Dave Hibberd 46c6058d94
upstream revision 2023-10-10 22:17:39 +01:00
Dave Hibberd 3e029049d7 Update upstream source from tag 'upstream/6.0.24.15'
Update to upstream version '6.0.24.15'
with Debian dir 55d9f12f07
2023-10-10 22:07:21 +01:00
Dave Hibberd b6a50b9b6c
Release the first version into the wild 2023-08-28 23:21:21 +01:00
Dave Hibberd fc474c29fe
Adding run-as-user and a user with the folder as ~ 2023-08-28 23:18:58 +01:00
Dave Hibberd 6546bac3f5
Updates based on feedback from M0LTE 2023-08-28 21:00:50 +01:00
Dave Hibberd ee2ac63a82
Start with the new 6.0.24.2 from upstream 2023-08-28 20:40:52 +01:00
Dave Hibberd 95a6ab069f
Merge branch 'upstream/latest' into debian/latest 2023-08-28 20:39:34 +01:00
Dave Hibberd 055c1c1891 Tweaks to copyright so it's correct 2023-07-18 01:31:08 +01:00
Dave Hibberd 964b72495c Adding gbp.conf so it builds under gbp 2023-07-18 01:29:10 +01:00
Dave Hibberd acb26fd980 Added Debian packaging so far 2023-07-18 01:26:17 +01:00
53 changed files with 1579 additions and 1596 deletions

View file

@ -3256,9 +3256,9 @@ static VOID ADSBConnect(void * unused)
{
err=WSAGetLastError();
#ifdef LINBPQ
printf("Connect Failed for ADSB socket - error code = %d\n", err);
// printf("Connect Failed for ADSB socket - error code = %d\n", err);
#else
Debugprintf("Connect Failed for ADSB socket - error code = %d", err);
// Debugprintf("Connect Failed for ADSB socket - error code = %d", err);
#endif
closesocket(TCPSock);
ADSBConnected = FALSE;

View file

@ -441,112 +441,6 @@ HANDLE hMapFile;
// Logging
static int LogAge = 14;
#ifdef WIN32
int DeleteAPRSLogFiles()
{
WIN32_FIND_DATA ffd;
char szDir[MAX_PATH];
char File[MAX_PATH];
HANDLE hFind = INVALID_HANDLE_VALUE;
DWORD dwError=0;
LARGE_INTEGER ft;
time_t now = time(NULL);
int Age;
// Prepare string for use with FindFile functions. First, copy the
// string to a buffer, then append '\*' to the directory name.
strcpy(szDir, GetLogDirectory());
strcat(szDir, "/logs/APRS*.log");
// Find the first file in the directory.
hFind = FindFirstFile(szDir, &ffd);
if (INVALID_HANDLE_VALUE == hFind)
return dwError;
// Walk directory
do
{
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
OutputDebugString(ffd.cFileName);
}
else
{
ft.HighPart = ffd.ftCreationTime.dwHighDateTime;
ft.LowPart = ffd.ftCreationTime.dwLowDateTime;
ft.QuadPart -= 116444736000000000;
ft.QuadPart /= 10000000;
Age = (int)((now - ft.LowPart) / 86400);
if (Age > LogAge)
{
sprintf(File, "%s/logs/%s%c", GetLogDirectory(), ffd.cFileName, 0);
Debugprintf("Deleting %s", File);
DeleteFile(File);
}
}
}
while (FindNextFile(hFind, &ffd) != 0);
FindClose(hFind);
return dwError;
}
#else
#include <dirent.h>
int APRSFilter(const struct dirent * dir)
{
return (memcmp(dir->d_name, "APRS", 4) == 0 && strstr(dir->d_name, ".log"));
}
int DeleteAPRSLogFiles()
{
struct dirent **namelist;
int n;
struct stat STAT;
time_t now = time(NULL);
int Age = 0, res;
char FN[256];
n = scandir("logs", &namelist, APRSFilter, alphasort);
if (n < 0)
perror("scandir");
else
{
while(n--)
{
sprintf(FN, "logs/%s", namelist[n]->d_name);
if (stat(FN, &STAT) == 0)
{
Age = (now - STAT.st_mtime) / 86400;
if (Age > LogAge)
{
Debugprintf("Deleting %s\n", FN);
unlink(FN);
}
}
free(namelist[n]);
}
free(namelist);
}
return 0;
}
#endif
int APRSWriteLog(char * msg)
{
FILE *file;
@ -646,8 +540,6 @@ Dll BOOL APIENTRY Init_APRS()
MobileBeaconInterval = 0;
BeaconInterval = 0;
DeleteAPRSLogFiles();
memset(MHTABLE, 0, sizeof(MHTABLE));
ConvToAX25(MYNODECALL, MYCALL);

View file

@ -1456,7 +1456,7 @@ VOID SaveHousekeeping(struct HTTPConnectionInfo * Session, char * MsgPtr, char *
GetParam(input, "MaxAge=", Temp);
MaxAge = atoi(Temp);
GetParam(input, "LogLife=", Temp);
LogAge = atoi(Temp);
BBSLogAge = atoi(Temp);
GetParam(input, "UserLife=", Temp);
UserLifetime= atoi(Temp);
@ -2666,7 +2666,7 @@ VOID SendHouseKeeping(char * Reply, int * ReplyLen, char * Key)
*ReplyLen = sprintf(Reply, HousekeepingTemplate,
BBSName, Key, Key, Key, Key, Key, Key, Key, Key, Key,
MaintTime, MaintInterval, MaxMsgno, BidLifetime, LogAge, UserLifetime,
MaintTime, MaintInterval, MaxMsgno, BidLifetime, BBSLogAge, UserLifetime,
(DeletetoRecycleBin) ? CHKD : UNC,
(SendNonDeliveryMsgs) ? CHKD : UNC,
(SuppressMaintEmail) ? CHKD : UNC,

View file

@ -9939,8 +9939,8 @@ VOID SaveConfig(char * ConfigName)
SaveIntValue(group, "MaxMsgno", MaxMsgno);
SaveIntValue(group, "BidLifetime", BidLifetime);
SaveIntValue(group, "MaxAge", MaxAge);
SaveIntValue(group, "LogLifetime", LogAge);
SaveIntValue(group, "LogLifetime", LogAge);
SaveIntValue(group, "LogLifetime", BBSLogAge);
SaveIntValue(group, "LogLifetime", BBSLogAge);
SaveIntValue(group, "MaintInterval", MaintInterval);
SaveIntValue(group, "UserLifetime", UserLifetime);
SaveIntValue(group, "MaintTime", MaintTime);
@ -10601,7 +10601,7 @@ BOOL GetConfig(char * ConfigName)
LastHouseKeepingTime = GetIntValue(group, "LastHouseKeepingTime");
LastTrafficTime = GetIntValue(group, "LastTrafficTime");
MaxMsgno = GetIntValue(group, "MaxMsgno");
LogAge = GetIntValue(group, "LogLifetime");
BBSLogAge = GetIntValue(group, "LogLifetime");
BidLifetime = GetIntValue(group, "BidLifetime");
MaxAge = GetIntValue(group, "MaxAge");
if (MaxAge == 0)

490
BPQINP3.c
View file

@ -37,10 +37,19 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
extern int DEBUGINP3;
int NegativePercent = 120; // if time is 10% worse send negative info
int PositivePercent = 80; // if time is 20% better send positive info
int NegativeDelay = 10; // Seconds between checks for negative info - should be quite shourt
int PositiveDelay = 300;
time_t SENDRIFTIME = 0;
int RIFInterval = 60;
VOID SendNegativeInfo();
VOID SortRoutes(struct DEST_LIST * Dest);
VOID SendRTTMsg(struct ROUTE * Route);
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame);
void NETROMCloseTCP(struct ROUTE * Route);
static VOID SendNetFrame(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame)
{
@ -90,7 +99,7 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
VOID UpdateRoute(struct DEST_LIST * Dest, struct INP3_DEST_ROUTE_ENTRY * ROUTEPTR, int hops, int rtt);
VOID KillRoute(struct INP3_DEST_ROUTE_ENTRY * ROUTEPTR);
VOID AddHere(struct INP3_DEST_ROUTE_ENTRY * ROUTEPTR,struct ROUTE * Route , int hops, int rtt);
VOID SendRIPToNeighbour(struct ROUTE * Route);
VOID SendRIFToNewNeighbour(struct ROUTE * Route);
VOID DecayNETROMRoutes(struct ROUTE * Route);
VOID DeleteINP3Routes(struct ROUTE * Route);
BOOL L2SETUPCROSSLINKEX(PROUTE ROUTE, int Retries);
@ -102,7 +111,8 @@ struct _RTTMSG RTTMsg = {""};
//struct ROUTE DummyRoute = {"","",""};
int RIPTimerCount = 0; // 1 sec to 10 sec counter
int PosTimerCount = 0; // 1 sec to 5 Mins counter
int PosTimerCount = 0;
int NegTimerCount = 0;
// Timer Runs every 10 Secs
@ -119,6 +129,8 @@ VOID InitialiseRTT()
{
UCHAR temp[256] = "";
SENDRIFTIME = time(NULL);
memset(&RTTMsg, ' ', sizeof(struct _RTTMSG));
memcpy(RTTMsg.ID, "L3RTT: ", 7);
memcpy(RTTMsg.VERSION, "LEVEL3_V2.1 ", 12);
@ -167,7 +179,7 @@ VOID DeleteINP3Routes(struct ROUTE * Route)
Route->Status = 0;
Route->Timeout = 0;
Route->NeighbourSRTT = 0;
Route->localport = 0;
Dest--;
// Delete any Dest entries via this Route
@ -200,7 +212,8 @@ VOID DeleteINP3Routes(struct ROUTE * Route)
{
// Only entry
Dest->INP3ROUTE[0].SRTT = 60000;
Dest->INP3ROUTE[0].STT = 60000;
Dest->INP3ROUTE[0].Hops = 255;
if (DEBUGINP3) Debugprintf("Was the only INP3 route");
@ -211,7 +224,7 @@ VOID DeleteINP3Routes(struct ROUTE * Route)
continue;
}
Dest->INP3ROUTE[1].LastRTT = Dest->INP3ROUTE[0].SRTT; // So next scan will check if rtt has increaced enough to need a RIF
Dest->INP3ROUTE[1].RouteLastTT[Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->recNum] = Dest->INP3ROUTE[0].STT; // So next scan will check if rtt has increaced enough to need a RIF
memcpy(&Dest->INP3ROUTE[0], &Dest->INP3ROUTE[1], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memcpy(&Dest->INP3ROUTE[1], &Dest->INP3ROUTE[2], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memset(&Dest->INP3ROUTE[2], 0, sizeof(struct INP3_DEST_ROUTE_ENTRY));
@ -361,6 +374,9 @@ VOID ProcessRTTReply(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff)
if (RTT > 60000 || RTT < 0)
return; // Ignore if more than 60 secs (why ??)
if (DEBUGINP3) Debugprintf("INP3 RTT reply from %s - SRTT was %d, Current RTT %d", Normcall, Route->SRTT, RTT);
Route->RTT = RTT;
if (Route->SRTT == 0)
@ -553,6 +569,7 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
}
// Adding New Node
memset(Dest, 0, sizeof(struct DEST_LIST));
@ -562,8 +579,11 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
// Set up First Route
Dest->INP3ROUTE[0].Hops = hops;
Dest->INP3ROUTE[0].SRTT = rtt;
Dest->INP3ROUTE[0].LastRTT = 0;
Dest->INP3ROUTE[0].STT = rtt;
if (Dest->INP3ROUTE[0].RouteLastTT == 0)
Dest->INP3ROUTE[0].RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
Dest->INP3ROUTE[0].RouteLastTT[Route->recNum] = 0;
Dest->INP3FLAGS = NewNode;
@ -587,7 +607,7 @@ Found:
// Update ALIAS
ConvFromAX25(Dest->DEST_CALL, call);
if (DEBUGINP3) Debugprintf("INP3 Updating Node %s Hops %d RTT %d", call, hops, rtt);
if (DEBUGINP3) Debugprintf("INP3 Updating Node %s Hops %d TT %d", call, hops, rtt);
if (alias[0] > ' ')
memcpy(Dest->DEST_ALIAS, alias, 6);
@ -598,7 +618,7 @@ Found:
if (ROUTEPTR->ROUT_NEIGHBOUR == Route)
{
if (DEBUGINP3) Debugprintf("INP3 Already have as route[0] - updating");
if (DEBUGINP3) Debugprintf("INP3 Already have as route[0] - TT was %d updating to %d", ROUTEPTR->STT, rtt);
UpdateRoute(Dest, ROUTEPTR, hops, rtt);
return;
}
@ -607,7 +627,7 @@ Found:
if (ROUTEPTR->ROUT_NEIGHBOUR == Route)
{
if (DEBUGINP3) Debugprintf("INP3 Already have as route[1] - updating");
if (DEBUGINP3) Debugprintf("INP3 Already have as route[1] - TT was %d updating to %d", ROUTEPTR->STT, rtt);
UpdateRoute(Dest, ROUTEPTR, hops, rtt);
return;
}
@ -616,7 +636,7 @@ Found:
if (ROUTEPTR->ROUT_NEIGHBOUR == Route)
{
if (DEBUGINP3) Debugprintf("INP3 Already have as route[2] - updating");
if (DEBUGINP3) Debugprintf("INP3 Already have as route[2] - TT was %d updating to %d", ROUTEPTR->STT, rtt);
UpdateRoute(Dest, ROUTEPTR, hops, rtt);
return;
}
@ -646,7 +666,7 @@ Found:
// Note that wont replace any netrom routes with INP3 ones unless we add pseudo rtt values to netrom entries
if (Dest->INP3ROUTE[0].SRTT > rtt)
if (Dest->INP3ROUTE[0].STT > rtt)
{
// We are better. Move others down and add on front
@ -658,7 +678,7 @@ Found:
return;
}
if (Dest->INP3ROUTE[1].SRTT > rtt)
if (Dest->INP3ROUTE[1].STT > rtt)
{
// We are better. Move 2nd down and add
@ -668,7 +688,7 @@ Found:
return;
}
if (Dest->INP3ROUTE[2].SRTT > rtt)
if (Dest->INP3ROUTE[2].STT > rtt)
{
// We are better. Add here
@ -688,64 +708,17 @@ Found:
VOID AddHere(struct INP3_DEST_ROUTE_ENTRY * ROUTEPTR,struct ROUTE * Route , int hops, int rtt)
{
ROUTEPTR->Hops = hops;
ROUTEPTR->SRTT = rtt;
ROUTEPTR->LastRTT = 0;
ROUTEPTR->RTT = 0;
if (ROUTEPTR->RouteLastTT == 0)
ROUTEPTR->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
ROUTEPTR->RouteLastTT[Route->recNum] = 0;
ROUTEPTR->STT = rtt;
ROUTEPTR->ROUT_NEIGHBOUR = Route;
return;
}
/* LEA EDI,DEST_CALL[EBX]
MOV ECX,7
REP MOVSB
MOV ECX,6 ; ADD ALIAS
MOV ESI,OFFSET32 TEMPFIELD
REP MOVSB
POP ESI
;
; GET _NEIGHBOURS FOR THIS DESTINATION
;
CALL CONVTOAX25
JNZ SHORT BADROUTE
;
CALL GETVALUE
MOV _SAVEPORT,AL ; SET PORT FOR _FINDNEIGHBOUR
CALL GETVALUE
MOV _ROUTEQUAL,AL
;
MOV ESI,OFFSET32 AX25CALL
PUSH EBX ; SAVE DEST
CALL _FINDNEIGHBOUR
MOV EAX,EBX ; ROUTE TO AX
POP EBX
JZ SHORT NOTBADROUTE
JMP SHORT BADROUTE
NOTBADROUTE:
;
; UPDATE ROUTE LIST FOR THIS DEST
;
MOV ROUT1_NEIGHBOUR[EBX],EAX
MOV AL,_ROUTEQUAL
MOV ROUT1_QUALITY[EBX],AL
MOV ROUT1_OBSCOUNT[EBX],255 ; LOCKED
;
POP EDI
POP EBX
INC _NUMBEROFNODES
JMP SENDOK
*/
struct INP3_DEST_ROUTE_ENTRY Temp;
@ -762,7 +735,7 @@ VOID SortRoutes(struct DEST_LIST * Dest)
if (Dest->INP3ROUTE[1].ROUT_NEIGHBOUR == 0)
{
Call1[ConvFromAX25(Dest->INP3ROUTE[0].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call1)] = 0;
if (DEBUGINP3) Debugprintf("INP3 1 route %d %s", Dest->INP3ROUTE[0].SRTT, Call1);
if (DEBUGINP3) Debugprintf("INP3 1 route %d %s", Dest->INP3ROUTE[0].STT, Call1);
return; // Only One, so cant be out of order
}
if (Dest->INP3ROUTE[2].ROUT_NEIGHBOUR == 0)
@ -772,9 +745,9 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call1[ConvFromAX25(Dest->INP3ROUTE[0].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call1)] = 0;
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
if (DEBUGINP3) Debugprintf("INP3 2 routes %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2);
if (DEBUGINP3) Debugprintf("INP3 2 routes %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2);
if (Dest->INP3ROUTE[0].SRTT <= Dest->INP3ROUTE[1].SRTT)
if (Dest->INP3ROUTE[0].STT <= Dest->INP3ROUTE[1].STT)
return;
// Swap one and two
@ -786,7 +759,7 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call1[ConvFromAX25(Dest->INP3ROUTE[0].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call1)] = 0;
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
if (DEBUGINP3) Debugprintf("INP3 2 routes %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2);
if (DEBUGINP3) Debugprintf("INP3 2 routes %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2);
return;
}
@ -797,16 +770,16 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
Call3[ConvFromAX25(Dest->INP3ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call3)] = 0;
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2, Dest->INP3ROUTE[2].SRTT, Call3);
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2, Dest->INP3ROUTE[2].STT, Call3);
// In order?
if (Dest->INP3ROUTE[0].SRTT <= Dest->INP3ROUTE[1].SRTT && Dest->INP3ROUTE[1].SRTT <= Dest->INP3ROUTE[2].SRTT)// In order?
if (Dest->INP3ROUTE[0].STT <= Dest->INP3ROUTE[1].STT && Dest->INP3ROUTE[1].STT <= Dest->INP3ROUTE[2].STT)// In order?
return;
// If second is better that first swap
if (Dest->INP3ROUTE[0].SRTT > Dest->INP3ROUTE[1].SRTT)
if (Dest->INP3ROUTE[0].STT > Dest->INP3ROUTE[1].STT)
{
memcpy(&Temp, &Dest->INP3ROUTE[0], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memcpy(&Dest->INP3ROUTE[0], &Dest->INP3ROUTE[1], sizeof(struct INP3_DEST_ROUTE_ENTRY));
@ -818,11 +791,11 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
Call3[ConvFromAX25(Dest->INP3ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call3)] = 0;
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2, Dest->INP3ROUTE[2].SRTT, Call3);
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2, Dest->INP3ROUTE[2].STT, Call3);
// if 3 is better than 2 swap them. As two is worse than one. three will then be worst
if (Dest->INP3ROUTE[1].SRTT > Dest->INP3ROUTE[2].SRTT)
if (Dest->INP3ROUTE[1].STT > Dest->INP3ROUTE[2].STT)
{
memcpy(&Temp, &Dest->INP3ROUTE[1], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memcpy(&Dest->INP3ROUTE[1], &Dest->INP3ROUTE[2], sizeof(struct INP3_DEST_ROUTE_ENTRY));
@ -834,12 +807,12 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
Call3[ConvFromAX25(Dest->INP3ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call3)] = 0;
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2, Dest->INP3ROUTE[2].SRTT, Call3);
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2, Dest->INP3ROUTE[2].STT, Call3);
// 3 is now slowest. 2 could still be better than 1
if (Dest->INP3ROUTE[0].SRTT > Dest->INP3ROUTE[1].SRTT)
if (Dest->INP3ROUTE[0].STT > Dest->INP3ROUTE[1].STT)
{
memcpy(&Temp, &Dest->INP3ROUTE[0], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memcpy(&Dest->INP3ROUTE[0], &Dest->INP3ROUTE[1], sizeof(struct INP3_DEST_ROUTE_ENTRY));
@ -851,9 +824,9 @@ VOID SortRoutes(struct DEST_LIST * Dest)
Call2[ConvFromAX25(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call2)] = 0;
Call3[ConvFromAX25(Dest->INP3ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Call3)] = 0;
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].SRTT, Call1, Dest->INP3ROUTE[1].SRTT, Call2, Dest->INP3ROUTE[2].SRTT, Call3);
if (DEBUGINP3) Debugprintf("INP3 3 routes %d %s %d %s %d %s", Dest->INP3ROUTE[0].STT, Call1, Dest->INP3ROUTE[1].STT, Call2, Dest->INP3ROUTE[2].STT, Call3);
if (Dest->INP3ROUTE[0].SRTT <= Dest->INP3ROUTE[1].SRTT && Dest->INP3ROUTE[1].SRTT <= Dest->INP3ROUTE[2].SRTT)// In order?
if (Dest->INP3ROUTE[0].STT <= Dest->INP3ROUTE[1].STT && Dest->INP3ROUTE[1].STT <= Dest->INP3ROUTE[2].STT)// In order?
return;
// Something went wrong
@ -871,7 +844,7 @@ VOID UpdateRoute(struct DEST_LIST * Dest, struct INP3_DEST_ROUTE_ENTRY * ROUTEPT
// This is not a INP3 Route - Convert it
ROUTEPTR->Hops = hops;
ROUTEPTR->SRTT = rtt;
ROUTEPTR->STT = rtt;
SortRoutes(Dest);
return;
@ -879,7 +852,7 @@ VOID UpdateRoute(struct DEST_LIST * Dest, struct INP3_DEST_ROUTE_ENTRY * ROUTEPT
if (rtt == 60000)
{
ROUTEPTR->SRTT = rtt;
ROUTEPTR->STT = rtt;
ROUTEPTR->Hops = hops;
SortRoutes(Dest);
@ -887,7 +860,7 @@ VOID UpdateRoute(struct DEST_LIST * Dest, struct INP3_DEST_ROUTE_ENTRY * ROUTEPT
}
ROUTEPTR->SRTT = rtt;
ROUTEPTR->STT = rtt;
ROUTEPTR->Hops = hops;
SortRoutes(Dest);
@ -916,6 +889,16 @@ VOID ProcessRTTMsg(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff, int Len
return;
}
// Check TTL
if (Buff->L3TTL < 2)
{
ReleaseBuffer(Buff);
return;
}
Buff->L3TTL--;
if (Route->NEIGHBOUR_LINK->LINKPORT && (Route->NEIGHBOUR_LINK->LINKPORT->ALLOWINP3 || Route->NEIGHBOUR_LINK->LINKPORT->ENABLEINP3))
Route->INP3Node = 1;
@ -947,6 +930,9 @@ VOID ProcessRTTMsg(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff, int Len
if (OtherRTT < 60000) // Don't save suspect values
Route->NeighbourSRTT = OtherRTT;
if (DEBUGINP3) Debugprintf("INP3 RTT Msg from %s remote SRTT %u", Normcall, OtherRTT);
}
// Look for $M and $H (MAXRTT MAXHOPS)
@ -1123,17 +1109,11 @@ VOID SendOurRIF(struct ROUTE * Route)
int totLen = 1;
int App;
APPLCALLS * APPL;
char Normcall[10];
Msg = GetBuff();
if (Msg == 0)
return;
Normcall[ConvFromAX25(Route->NEIGHBOUR_LINK->LINKCALL, Normcall)] = 0;
if (DEBUGINP3) Debugprintf("INP3 Sending Initial RIF to %s ", Normcall);
Msg->L3SRCE[0] = 0xff;
// send a RIF for our Node and all our APPLCalls
@ -1174,7 +1154,6 @@ int SendRIPTimer()
int INP3Delay;
char Normcall[10];
for (count=0; count<MaxRoutes; count++)
{
if (Route->NEIGHBOUR_CALL[0] != 0)
@ -1228,14 +1207,15 @@ int SendRIPTimer()
Route->ConnectionAttempts++;
if (Route->INP3Node)
if (Route->INP3Node && ((Route->TCPPort == 0 || strcmp(Route->TCPHost, "0.0.0.0") != 0)))
{
Normcall[ConvFromAX25(Route->NEIGHBOUR_CALL, Normcall)] = 0;
if (DEBUGINP3) Debugprintf("INP3 Activating link to %s", Normcall);
}
L2SETUPCROSSLINKEX(Route, 2); // Only try SABM twice
L2SETUPCROSSLINKEX(Route, 2); // Only try SABM/XID twice
Route->NeighbourSRTT = 0; // just in case!
Route->BCTimer = 0;
Route->LastConnectAttempt = REALTIMETICKS;
@ -1296,9 +1276,27 @@ int SendRIPTimer()
char Call [11] = "";
ConvFromAX25(Route->NEIGHBOUR_CALL, Call);
if (DEBUGINP3) Debugprintf("BPQ32 INP3 Neighbour %s Lost", Call);
if (DEBUGINP3) Debugprintf("BPQ32 INP3 Neighbour %s Lost (No Response to RTT)", Call);
DecayNETROMRoutes(Route);
DeleteINP3Routes(Route);
Route->Status = 0; // Down
// close the link
if (Route->TCPPort == 0) // NetromTCP doesn't have a real link
{
Route->NEIGHBOUR_LINK->KILLTIMER = 0;
Route->NEIGHBOUR_LINK->L2TIMER = 1; // TO FORCE DISC
Route->NEIGHBOUR_LINK->L2STATE = 4; // DISCONNECTING
}
else
{
// but we should reset the TCP connection
NETROMCloseTCP(Route);
}
}
Route->BCTimer = 5; // Wait a while before retrying
@ -1354,39 +1352,101 @@ VOID SendRIF(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Msg)
SendNetFrame(Route, Msg);
}
VOID SendRIPToOtherNeighbours(UCHAR * axcall, UCHAR * alias, struct INP3_DEST_ROUTE_ENTRY * Entry)
VOID SendRIFToOtherNeighbours(UCHAR * axcall, UCHAR * alias, struct INP3_DEST_ROUTE_ENTRY * Entry, int Negative, int portNum)
{
struct ROUTE * Routes = NEIGHBOURS;
struct _L3MESSAGEBUFFER * Msg;
int count, MaxRoutes = MAXNEIGHBOURS;
char Normcall[10];
int sendHops, sendTT;
char NodeCall[10];
char destCall[10];
Normcall[ConvFromAX25(axcall, Normcall)] = 0;
int sendHops, sendTT, lastTT;
if (DEBUGINP3) Debugprintf("INP3 SendRIPToOtherNeighbours for %s", Normcall);
// if portNum is set sending a periodic refresh. Just sent to this port
NodeCall[ConvFromAX25(axcall, NodeCall)] = 0;
for (count = 0; count < MaxRoutes; count++)
{
if ((Routes->INP3Node) &&
if ((Entry->ROUT_NEIGHBOUR && Routes->INP3Node) &&
(Routes->Status) &&
// (memcmp(Routes->NEIGHBOUR_CALL
(Routes != Entry->ROUT_NEIGHBOUR)) // Dont send to originator of route
{
// as the value sent will be different for each link, we need to check if change is enough here
sendHops = Entry->Hops + 1;
sendTT = Entry->SRTT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
lastTT = Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum];
if (!portNum)
{
if (Negative)
{
// only send if significantly worse
if (sendTT < (lastTT * NegativePercent) / 100)
{
Routes+=1;
continue;
}
}
else
{
// Send if significantly better
if (sendTT > (lastTT * PositivePercent) / 100)
{
Routes+=1;
continue;
}
}
}
// Don't send if Node is the Neighbour we are sending to
if (memcmp(Routes->NEIGHBOUR_CALL, axcall, 7) == 0)
{
if (DEBUGINP3) Debugprintf("INP3 SendRIFToOtherNeighbours Don't send %s to itself", NodeCall);
Routes+=1;
continue;
}
if (portNum && Routes->NEIGHBOUR_PORT != portNum)
{
Routes+=1;
continue;
}
if (portNum)
Routes->Status &= ~SentOurRIF;
Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] = sendTT;
// send, but only if within their constraints
if ((Routes->RemoteMAXHOPS == 0 || Routes->RemoteMAXHOPS >= Entry->Hops) &&
(Routes->RemoteMAXRTT == 0 || Routes->RemoteMAXRTT >= Entry->SRTT || Entry->SRTT == 60000))
(Routes->RemoteMAXRTT == 0 || Routes->RemoteMAXRTT >= sendTT || sendTT == 60000))
{
if (DEBUGINP3)
{
if (portNum)
Debugprintf("INP3 %s Timer Refresh Sending to port %d", NodeCall, portNum);
else
Debugprintf("INP3 %s Old TT %d New %d Sufficent change so sending ", NodeCall, lastTT, sendTT);
}
Msg = Routes->Msg;
if (Msg == NULL)
{
Normcall[ConvFromAX25(Routes->NEIGHBOUR_CALL, Normcall)] = 0;
if (DEBUGINP3) Debugprintf("INP3 Building RIF to send to %s", Normcall);
if (DEBUGINP3)
{
destCall[ConvFromAX25(Entry->ROUT_NEIGHBOUR->NEIGHBOUR_CALL, destCall)] = 0;
Debugprintf("INP3 Building RIF to send to %s", destCall);
}
Msg = Routes->Msg = CreateRIFHeader(Routes);
}
@ -1399,6 +1459,7 @@ VOID SendRIPToOtherNeighbours(UCHAR * axcall, UCHAR * alias, struct INP3_DEST_RO
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH],
axcall, alias, sendHops, sendTT);
if (Msg->LENGTH > 250 - 15)
// if (Msg->LENGTH > Routes->NBOUR_PACLEN - 11)
{
@ -1408,11 +1469,13 @@ VOID SendRIPToOtherNeighbours(UCHAR * axcall, UCHAR * alias, struct INP3_DEST_RO
}
}
}
Routes+=1;
}
}
VOID SendRIPToNeighbour(struct ROUTE * Route)
VOID SendRIFToNewNeighbour(struct ROUTE * Route)
{
int i;
struct DEST_LIST * Dest = DESTS;
@ -1441,10 +1504,12 @@ VOID SendRIPToNeighbour(struct ROUTE * Route)
// Best Route not via this neighbour - send, but only if within their constraints
sendHops = Entry->Hops + 1;
sendTT = Entry->SRTT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] = sendTT;
if ((Route->RemoteMAXHOPS == 0 || Route->RemoteMAXHOPS >= Entry->Hops) &&
(Route->RemoteMAXRTT == 0 || Route->RemoteMAXRTT >= Entry->SRTT || Entry->SRTT == 60000))
(Route->RemoteMAXRTT == 0 || Route->RemoteMAXRTT >= Entry->STT || Entry->STT == 60000))
{
Msg = Route->Msg;
@ -1487,7 +1552,7 @@ VOID FlushRIFs()
{
Routes->Status |= SentOurRIF;
SendOurRIF(Routes);
SendRIPToNeighbour(Routes);
SendRIFToNewNeighbour(Routes);
}
if (Routes->Msg)
@ -1505,9 +1570,11 @@ VOID FlushRIFs()
VOID SendNegativeInfo()
{
int i, Preload;
int i;
struct DEST_LIST * Dest = DESTS;
struct INP3_DEST_ROUTE_ENTRY * Entry;
char call[11]="";
Dest--;
@ -1525,22 +1592,16 @@ VOID SendNegativeInfo()
Entry = &Dest->INP3ROUTE[0];
if (Entry->SRTT > Entry->LastRTT)
{
if (Entry->LastRTT) // if zero haven't yet reported +ve info
{
if (Entry->LastRTT == 1) // if 1, probably new, so send alias
SendRIPToOtherNeighbours(Dest->DEST_CALL, Dest->DEST_ALIAS, Entry);
if (Entry->ROUT_NEIGHBOUR == 0)
continue;
if (Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] == 0) // if zero haven't yet reported +ve info. Shouldn't really be reporting negative without positive but just in case
SendRIFToOtherNeighbours(Dest->DEST_CALL, Dest->DEST_ALIAS, Entry, TRUE, FALSE);
else
SendRIPToOtherNeighbours(Dest->DEST_CALL, 0, Entry);
SendRIFToOtherNeighbours(Dest->DEST_CALL, 0, Entry, TRUE, FALSE);
Preload = Entry->SRTT /10;
if (Entry->SRTT < 60000)
Entry->LastRTT = Entry->SRTT + Preload; //10% Negative Preload
}
}
if (Entry->SRTT >= 60000)
if (Entry->STT >= 60000)
{
// It is dead, and we have reported it if necessary, so remove if no NETROM Routes
@ -1579,22 +1640,17 @@ VOID SendPositiveInfo()
{
Dest++;
Entry = &Dest->INP3ROUTE[0];
if (Dest->DEST_CALL[0] == 0) // unused entry
continue;
if (( (Entry->SRTT) && (Entry->LastRTT == 0) )|| // if zero haven't yet reported +ve info
((((Entry->SRTT * 125) /100) < Entry->LastRTT) && // Better by 25%
((Entry->LastRTT - Entry->SRTT) > 10))) // and 100ms
{
SendRIPToOtherNeighbours(Dest->DEST_CALL, 0, Entry);
Dest->INP3ROUTE[0].LastRTT = (Dest->INP3ROUTE[0].SRTT * 11) / 10; //10% Negative Preload
}
Entry = &Dest->INP3ROUTE[0];
SendRIFToOtherNeighbours(Dest->DEST_CALL, 0, Entry, FALSE, FALSE);
}
}
VOID SendNewInfo()
{
int i;
unsigned int NewRTT;
struct DEST_LIST * Dest = DESTS;
struct INP3_DEST_ROUTE_ENTRY * Entry;
@ -1612,14 +1668,169 @@ VOID SendNewInfo()
Entry = &Dest->INP3ROUTE[0];
SendRIPToOtherNeighbours(Dest->DEST_CALL, Dest->DEST_ALIAS, Entry);
NewRTT = (Entry->SRTT * 11) / 10;
Entry->LastRTT = NewRTT; //10% Negative Preload
SendRIFToOtherNeighbours(Dest->DEST_CALL, Dest->DEST_ALIAS, Entry, FALSE, FALSE);
}
}
}
// Refresh RIF entries for each route. Shouldn't be necessary, but add for now
int routeCount = 0;
struct ROUTE * Route = NULL;
VOID sendAlltoOneNeigbour(struct ROUTE * Route)
{
char Call[10];
struct DEST_LIST * Dest = DESTS;
struct INP3_DEST_ROUTE_ENTRY * Entry;
int i;
struct _L3MESSAGEBUFFER * Msg;
int sendHops, sendTT, lastTT;
APPLCALLS * APPL;
int App;
Call[ConvFromAX25(Route->NEIGHBOUR_CALL, Call)] = 0;
if (DEBUGINP3) Debugprintf("INP3 Manual send RIF to %s", Call);
// send a RIF for our Node and all our APPLCalls
Msg = Route->Msg;
if (Msg == NULL)
Msg = Route->Msg = CreateRIFHeader(Route);
if (Msg == 0)
return;
if (Route->OldBPQ)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->RTTIncrement * 10);
else
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->RTTIncrement);
for (App = 0; App < NumberofAppls; App++)
{
APPL=&APPLCALLTABLE[App];
if (APPL->APPLQUAL > 0)
{
if (Route->OldBPQ)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->RTTIncrement * 10);
else
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->RTTIncrement);
}
}
// Send all dests that have this route as their best inp3 route
Dest--;
for (i=0; i < MAXDESTS; i++)
{
Dest++;
Entry = &Dest->INP3ROUTE[0];
if (Entry->ROUT_NEIGHBOUR == 0)
continue;
if (Entry->ROUT_NEIGHBOUR && Route->INP3Node && Route->Status && Route != Entry->ROUT_NEIGHBOUR) // Dont send to originator of route
{
// as the value sent will be different for each link, we need to check if change is enough here
// Don't send if Node is the Neighbour we are sending to
if (memcmp(Route->NEIGHBOUR_CALL, Dest->DEST_CALL, 7) == 0)
{
if (DEBUGINP3) Debugprintf("INP3 Timer RIF Don't send %s to itself", Call);
Route++;
continue;
}
sendHops = Entry->Hops + 1;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
lastTT = Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum];
Entry->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] = sendTT;
// send, but only if within their constraints
if ((Route->RemoteMAXHOPS == 0 || Route->RemoteMAXHOPS >= Entry->Hops) && (Route->RemoteMAXRTT == 0 || Route->RemoteMAXRTT >= sendTT))
{
Msg = Route->Msg;
if (Msg == NULL)
Msg = Route->Msg = CreateRIFHeader(Route);
if (Msg)
{
if (Route->OldBPQ)
sendTT *= 10;
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], Dest->DEST_CALL, Dest->DEST_ALIAS, sendHops, sendTT);
if (Msg->LENGTH > 250 - 15)
{
SendRIF(Route, Msg);
Route->Msg = NULL;
}
}
}
}
}
if (Route->Msg)
{
SendRIF(Route, Route->Msg);
Route->Msg = NULL;
}
}
VOID SendAllInfo()
{
time_t Now = time(NULL);
if (routeCount == 0) // Not sending
{
if (RIFInterval == 0 || (Now - SENDRIFTIME) < RIFInterval) // Time for new send?
return;
Route = NEIGHBOURS;
}
// Build RIF
while (Route->INP3Node == 0)
{
Route++;
routeCount++;
if (routeCount == MAXNEIGHBOURS)
{
//cycle finished
SENDRIFTIME = Now;
routeCount = 0;
return;
}
}
sendAlltoOneNeigbour(Route);
Route++;
routeCount++;
if (routeCount == MAXNEIGHBOURS)
{
//cycle finished
SENDRIFTIME = Now;
routeCount = 0;
}
}
VOID INP3TIMER()
{
@ -1642,20 +1853,27 @@ VOID INP3TIMER()
#endif
SendNegativeInfo(); // Urgent
if (NegTimerCount == 0)
{
NegTimerCount = NegativeDelay;
SendNegativeInfo();
}
else
NegTimerCount--;
if (RIPTimerCount == 0)
{
RIPTimerCount = 10;
SendNewInfo(); // Not quite so urgent
SendRIPTimer();
SendAllInfo(); // Timer Driven refresh
}
else
RIPTimerCount--;
if (PosTimerCount == 0)
{
PosTimerCount = 300; // 5 mins
PosTimerCount = PositiveDelay;
SendPositiveInfo();
}
else

View file

@ -731,7 +731,7 @@ VOID WINAPI OnSelChanged(HWND hwndDlg)
SetDlgItemInt(pHdr->hwndDisplay, IDC_MAXMSG, MaxMsgno, FALSE);
SetDlgItemInt(pHdr->hwndDisplay, IDC_BIDLIFETIME, BidLifetime, FALSE);
SetDlgItemInt(pHdr->hwndDisplay, IDC_USERLIFETIME, UserLifetime, FALSE);
SetDlgItemInt(pHdr->hwndDisplay, IDC_LOGLIFETIME, LogAge, FALSE);
SetDlgItemInt(pHdr->hwndDisplay, IDC_LOGLIFETIME, BBSLogAge, FALSE);
SetDlgItemInt(pHdr->hwndDisplay, IDC_MAINTINTERVAL, MaintInterval, FALSE);
sprintf(Time, "%04d", MaintTime);
SetDlgItemText(pHdr->hwndDisplay, IDC_MAINTTIME, Time);
@ -1979,7 +1979,7 @@ VOID SaveMAINTConfigFromDialog()
if (MaxMsgno > 99000) MaxMsgno = 99000;
BidLifetime = GetDlgItemInt(hwndDisplay, IDC_BIDLIFETIME, &OK1, FALSE);
LogAge = GetDlgItemInt(hwndDisplay, IDC_LOGLIFETIME, &OK1, FALSE);
BBSLogAge = GetDlgItemInt(hwndDisplay, IDC_LOGLIFETIME, &OK1, FALSE);
UserLifetime = GetDlgItemInt(hwndDisplay, IDC_USERLIFETIME, &OK1, FALSE);
MaintInterval = GetDlgItemInt(hwndDisplay, IDC_MAINTINTERVAL, &OK1, FALSE);
MaintTime = GetDlgItemInt(hwndDisplay, IDC_MAINTTIME, &OK1, FALSE);
@ -2657,7 +2657,7 @@ BOOL GetConfigFromRegistry()
Vallen=4;
RegQueryValueEx(hKey,"LogLifetime",0,
(ULONG *)&Type,(UCHAR *)&LogAge,(ULONG *)&Vallen);
(ULONG *)&Type,(UCHAR *)&BBSLogAge,(ULONG *)&Vallen);
Vallen=4;
retCode += RegQueryValueEx(hKey,"BidLifetime",0,

18
Bpq32.c
View file

@ -1292,6 +1292,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Improvments to INP3 (4, 5)
// Add Node API /api/tcpqueues (5)
// Add sending link events to OARC API (disabled by default) (6)
// Add option to write monitor output to a file (6)
// Fix possible program error in Telnet_Connected (7)
// Close links when program is closed down (7)
// Fix possible problem with deleting routes when using both NODES and INP3 routing on same link (7)
@ -1300,12 +1301,14 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Fix FRMR caused by sending SREJ when no frames outstanding (8)
// Fix some issues with NetromX connects and Route Selection when running INP3 and NODES routing (9)
// Fix connecting to a netrom node with c p node command (10)
<<<<<<< Updated upstream
||||||| Stash base
=======
// Add validation of INP3 RTT messages and various INP3 fixes (12)
// Change NetromX connect syntax to Service@Node to fix passing commands to local applications (12)
>>>>>>> Stashed changes
// Add config file option to enable writing monitor data to a file at startup (13)
// Add option to use V2.0 on a route (14)
// Don't reset NS on RR R(F) following I(P) just on RR poll following timeout. Can get problems with delayed RR R(F) (reverted) (14)
// Ignore packets that would cause an FRMR and respond to FRMR with DM (14)
// Add option to send periodic INP3 RIF refresh (15)
#define CKernel
@ -2826,6 +2829,12 @@ BOOL APIENTRY DllMain(HANDLE hInst, DWORD ul_reason_being_called, LPVOID lpReser
return 0;
}
if (sizeof(struct NR_DEST_ROUTE_ENTRY) != sizeof(struct INP3_DEST_ROUTE_ENTRY))
{
MessageBox(NULL,"Route Entry mismatch - fix and rebuild", "BPQ32", MB_OK);
return 0;
}
GetSemaphore(&Semaphore, 4);
BPQHOSTVECPTR = &BPQHOSTVECTOR[0];
@ -4229,7 +4238,6 @@ int APIENTRY Restart()
CloseHandle(hProc);
}
return 0;
}

105
Cmd.c
View file

@ -71,6 +71,7 @@ int CompareAlias(const void *a, const void *b);
int CompareRoutes(const void * a, const void * b);
void SendVARANetromNodes(struct TNCINFO * TNC, MESSAGE *Buffer);
VOID DoNetromConnect(TRANSPORTENTRY * Session, char * Bufferptr, struct DEST_LIST * Dest, BOOL Spy, int Service);
VOID sendAlltoOneNeigbour(struct ROUTE * Route);
extern VOID KISSTX(struct KISSINFO * KISS, PMESSAGE Buffer);
@ -84,6 +85,7 @@ UCHAR SAVEDAPPLFLAGS = 0;
UCHAR ALIASINVOKED = 0;
extern int MONTOFILEFLAG;
extern int RIFInterval;
VOID * CMDPTR = 0;
@ -357,6 +359,36 @@ VOID POLLNODES(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struc
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
}
VOID SENDRIF(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
{
struct ROUTE * Route;
int Portnum = atoi(CmdTail);
unsigned char axCall[7];
char * Call = strlop(CmdTail, ' ');
if (Call && Portnum)
{
ConvToAX25(Call, axCall);
if (FindNeighbour(axCall, Portnum, &Route))
{
sendAlltoOneNeigbour(Route);
strcpy(Bufferptr, OKMSG);
Bufferptr += (int)strlen(OKMSG);
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
return;
}
}
Bufferptr = Cmdprintf(Session, Bufferptr, "Route not found\r");
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
return;
}
VOID SENDNODES(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
{
int Portnum = atoi(CmdTail);
@ -1910,9 +1942,13 @@ char * DisplayRoute(TRANSPORTENTRY * Session, char * Bufferptr, struct ROUTE *
double srtt = Routes->SRTT/100.0;
double nsrtt = Routes->NeighbourSRTT/100.0;
Bufferptr = Cmdprintf(Session, Bufferptr, " %4.2fs %4.2fs", srtt, nsrtt);
Bufferptr = Cmdprintf(Session, Bufferptr, " %4.2fs %4.2fs %X", srtt, nsrtt, Routes->Status);
}
if (Routes->TCPPort)
Bufferptr = Cmdprintf(Session, Bufferptr, " %d", Routes->localport);
Bufferptr = Cmdprintf(Session, Bufferptr, "\r");
}
else
@ -2737,12 +2773,6 @@ NoPort:
// SEE IF CALL TO ANY OF OUR HOST SESSIONS - UNLESS DIGIS SPECIFIED
<<<<<<< Updated upstream
// if (axcalls[7] == 0 && axcalls[9])
||||||| Stash base
if (axcalls[7] == 0 && axcalls[9] )
=======
>>>>>>> Stashed changes
if (axcalls[7] == 0)
{
// If this connect is as a result of a command alias, don't check appls or we will loop
@ -2794,60 +2824,7 @@ NoPort:
}
}
<<<<<<< Updated upstream
// if no digis see if connect to known node.
// But now could have a single numeric param as a service number (Paula's Netromx)
// cmdCopy is command tail (after call)
// Make sure field is numeric
if (cmdCopy[0] != ' ')
{
i = 0;
while (cmdCopy[i] >= '0' && cmdCopy[i]<= '9')
i++;
if (i && cmdCopy[i] != ' ') // have an all digit param = probably a service
goto Downlink;
else
{
if (i > 0) // Some digits
{
haveService = 1;
Service = atoi(cmdCopy);
}
}
}
if (axcalls[7] == 0 || haveService)
||||||| Stash base
// if no digis see if connect to known node. But now could have a single numeric param as a service number (Paula's Netromx)
// cmdCopy is command tail (after call)
// Make sure field is numeric
i = 0;
while (cmdCopy[i] >= '0' && cmdCopy[i]<= '9')
i++;
if (cmdCopy[i] != ' ')
goto Downlink;
else
{
if (i > 0) // Some digits
{
haveService = 1;
Service = atoi(cmdCopy);
}
}
if (axcalls[7] == 0 || haveService)
=======
if (axcalls[7] == 0)
>>>>>>> Stashed changes
{
// SEE IF CALL TO ANOTHER NODE
@ -3365,7 +3342,7 @@ char * DoOneNode(TRANSPORTENTRY * Session, char * Bufferptr, struct DEST_LIST *
if (Neighbour)
{
double srtt = Route->SRTT/100.0;
double srtt = Route->STT/100.0;
len = ConvFromAX25(Neighbour->NEIGHBOUR_CALL, Normcall);
Normcall[len] = 0;
@ -3385,7 +3362,7 @@ int DoViaEntry(struct DEST_LIST * Dest, int n, char * line, int cursor)
char Portcall[10];
int len;
if (Dest->NRROUTE[n].ROUT_NEIGHBOUR != 0 && Dest->NRROUTE[n].ROUT_NEIGHBOUR->INP3Node == 0)
if (Dest->NRROUTE[n].ROUT_NEIGHBOUR != 0)
{
len=ConvFromAX25(Dest->NRROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Portcall);
Portcall[len]=0;
@ -3414,7 +3391,7 @@ int DoINP3ViaEntry(struct DEST_LIST * Dest, int n, char * line, int cursor)
if (Dest->INP3ROUTE[n].ROUT_NEIGHBOUR != 0)
{
srtt = Dest->INP3ROUTE[n].SRTT/100.0;
srtt = Dest->INP3ROUTE[n].STT/100.0;
len=ConvFromAX25(Dest->INP3ROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Portcall);
Portcall[len]=0;
@ -4688,6 +4665,7 @@ struct CMDX COMMANDS[] =
"RESTARTTNC ",10,&RESTARTTNC,0,
"POLLNODES ",8, &POLLNODES,0,
"SENDNODES ",8, &SENDNODES,0,
"SENDRIF ",7, &SENDRIF,0,
"EXTRESTART ",10, EXTPORTVAL, offsetof(EXTPORTDATA, EXTRESTART),
"TXDELAY ",3, PORTVAL, offsetof(PORTCONTROLX, PORTTXDELAY),
"MAXFRAME ",3, PORTVAL, offsetof(PORTCONTROLX, PORTWINDOW),
@ -4745,6 +4723,7 @@ struct CMDX COMMANDS[] =
"L4WINDOW ",6,SWITCHVAL,(size_t)&L4DEFAULTWINDOW,
"BTINTERVAL ",5,SWITCHVAL,(size_t)&BTINTERVAL,
"DEBUGINP3 ",8,SWITCHVAL,(size_t)&DEBUGINP3,
"RIFINTERVAL ",11,SWITCHVALW,(size_t)&RIFInterval,
"MAXHOPS ",7,SWITCHVAL,(size_t)&MaxHops,
"PREFERINP3 ",10,SWITCHVAL,(size_t)&PREFERINP3ROUTES,
"MAXRTT ",6,SWITCHVALW,(size_t)&MAXRTT,

View file

@ -76,6 +76,7 @@ char * FormatMH(PMHSTRUC MH, char Format);
void WriteConnectLog(char * fromCall, char * toCall, UCHAR * Mode);
void SendDataToPktMap();
void NETROMTCPResolve();
VOID FindLostBuffers();
extern BOOL LogAllConnects;
extern BOOL M0LTEMap;
@ -565,6 +566,15 @@ VOID * _GetBuff(char * File, int Line)
Msg->Linkptr = NULL;
Msg->Padding[0] = 0; // Used for modem status info
}
else if (QCOUNT != 0)
{
// Queue must be corrupt
Debugprintf("Fatal - Getbuff returned NULL and Q not empty - exit");
FindLostBuffers();
WriteMiniDump();
Restart();
}
else
Debugprintf("Warning - Getbuff returned NULL");

View file

@ -4187,7 +4187,7 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in destaddr;
Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
// Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
if (sock == INVALID_SOCKET)
return 0;
@ -4210,7 +4210,7 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
n = sendto(sock, TNC->ProgramPath, (int)strlen(TNC->ProgramPath), 0, (struct sockaddr *)&destaddr, sizeof(destaddr));
Debugprintf("Restart TNC - sendto returned %d", n);
// Debugprintf("Restart TNC - sendto returned %d", n);
Sleep(100);
closesocket(sock);

View file

@ -147,9 +147,15 @@ char IndexNoAPRS[] = "<meta http-equiv=\"refresh\" content=\"0;url=/Node/NodeInd
char Tail[] = "</body></html>";
char RouteHddr[] = "<h2 align=center>Routes</h2><table align=center border=2 style=font-family:monospace bgcolor=white>"
"<tr><th>Port</th><th>Call</th><th>Quality</th><th>Node Count</th><th>Frame Count</th><th>Retries</th><th>Percent</th><th>Maxframe</th><th>Frack</th><th>Last Heard</th><th>Queued</th><th>Rem Qual</th></tr>";
"<tr><th>Port</th><th>Call</th><th>Quality</th><th>Node Count</th><th>Frame Count</th><th>Retries</th><th>Percent</th><th>Maxframe</th>"
"<th>Frack</th><th>Last Heard</th><th>Queued</th><th>Rem Qual</th><th>SRTT</th><th>Rem SRTT</th></tr>";
char RouteLine[] = "<tr><td>%s%d</td><td>%s%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d%</td><td>%d</td><td>%d</td>"
"<td>%02d:%02d<td>%d</td><td>%d</td></td><td></td><td></td></tr>";
char RouteLineINP3[] = "<tr><td>%s%d</td><td>%s%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d%</td><td>%d</td><td>%d</td>"
"<td>%02d:%02d</td><td>%d</td><td>%d</td><td>%4.2fs</td><td>%4.2fs</td></tr>";
char RouteLine[] = "<tr><td>%s%d</td><td>%s%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d%</td><td>%d</td><td>%d</td><td>%02d:%02d</td><td>%d</td><td>%d</td></tr>";
char xNodeHddr[] = "<align=center><form align=center method=get action=/Node/Nodes.html>"
"<table align=center bgcolor=white>"
"<tr><td><input type=submit class='btn' name=a value=\"Nodes Sorted by Alias\"></td><td>"
@ -1390,23 +1396,23 @@ int SetupNodeMenu(char * Buff, int LOCAL)
char SigninBit[] = "<td><a href=/Node/Signon.html>SYSOP Signin</a></td>";
char NodeTail[] =
"<td><a href=/Node/EditCfg.html>Edit Config</a></td>"
"<td><div onmouseover=myShow() class='dropdown'>"
"<button class=\"dropbtn\">View Logs</button>"
"<div id=\"myDropdown\" class=\"dropdown-content\">"
"<form id = doDate form action='/node/ShowLog.html'><label>"
"Select Date: <input type='date' name='date' id=e>"
"<script>"
"document.getElementById('e').value = new Date().toISOString().substring(0, 10);"
"</script></label>"
"<input type=submit class='btn' name='BBS' value='BBS Log'></br>"
"<input type=submit class='btn' name='Debug' value='BBS Debug Log'></br>"
"<input type=submit class='btn' name='Telnet' value='Telnet Log'></br>"
"<input type=submit class='btn' name='CMS' value='CMS Log'></br>"
"<input type=submit class='btn' name='Chat' value='Chat Log'></br>"
"</form></div>"
"</div>"
"</td></tr></table>";
"<td><a href=/Node/EditCfg.html>Edit Config</a></td>\
<td><div onmouseover=myShow() class='dropdown'>\
<button class=\"dropbtn\">View Logs</button>\
<div id=\"myDropdown\" class=\"dropdown-content\">\
<form id = doDate form action='/node/ShowLog.html'><label>\
Select Date: <input type='date' name='date' id=e>\
<script>\
document.getElementById('e').value = new Date().toISOString().substring(0, 10);\
</script></label>\
<input type=submit class='btn' name='BBS' value='BBS Log'></br>\
<input type=submit class='btn' name='Debug' value='BBS Debug Log'></br>\
<input type=submit class='btn' name='Telnet' value='Telnet Log'></br>\
<input type=submit class='btn' name='CMS' value='CMS Log'></br>\
<input type=submit class='btn' name='Chat' value='Chat Log'></br>\
</form></div>\
</div>\
</td></tr></table>";
Len = sprintf(Buff, NodeMenuHeader, Mycall);
@ -1560,10 +1566,9 @@ VOID SaveConfigFile(SOCKET sock , char * MsgPtr, char * Rest, int LOCAL)
}
ReplyLen = sprintf(Reply, "<html><script>alert(\"%s\");window.close();</script></html>", Mess);
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n", ReplyLen + (int)strlen(Tail));
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n", ReplyLen);
send(sock, Header, HeaderLen, 0);
send(sock, Reply, ReplyLen, 0);
send(sock, Tail, (int)strlen(Tail), 0);
}
return;
}
@ -3942,10 +3947,22 @@ doHeader:
else
Percent = 0;
if (Routes->INP3Node) // INP3 Enabled?
{
double srtt = Routes->SRTT/100.0;
double nsrtt = Routes->NeighbourSRTT/100.0;
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], RouteLineINP3, Active, Routes->NEIGHBOUR_PORT, Normcall, locked,
Routes->NEIGHBOUR_QUAL, NodeCount, Iframes, Retries, Percent, Routes->NBOUR_MAXFRAME, Routes->NBOUR_FRACK,
Routes->NEIGHBOUR_TIME >> 8, Routes->NEIGHBOUR_TIME & 0xff, Queued, Routes->OtherendsRouteQual, srtt, nsrtt);
}
else
{
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], RouteLine, Active, Routes->NEIGHBOUR_PORT, Normcall, locked,
Routes->NEIGHBOUR_QUAL, NodeCount, Iframes, Retries, Percent, Routes->NBOUR_MAXFRAME, Routes->NBOUR_FRACK,
Routes->NEIGHBOUR_TIME >> 8, Routes->NEIGHBOUR_TIME & 0xff, Queued, Routes->OtherendsRouteQual);
}
}
Routes+=1;
}
}

View file

@ -30,7 +30,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
char * APIENTRY GetBPQDirectory();
int LogAge = 7;
int BBSLogAge = 7;
BOOL DeletetoRecycleBin = FALSE;
BOOL SuppressMaintEmail = FALSE;
@ -61,7 +61,7 @@ struct Override ** LTFROM;
struct Override ** LTTO;
struct Override ** LTAT;
int DeleteLogFiles();
int DeleteBBSLogFiles();
VOID SendNonDeliveryMessage(struct MsgInfo * OldMsg, BOOL Forwarded, int Age);
int CreateWPMessage();
@ -281,7 +281,7 @@ VOID DoHouseKeeping(BOOL Manual)
UpdateWP();
DeleteLogFiles();
DeleteBBSLogFiles();
RemoveKilledMessages();
ExpireMessages();
@ -799,7 +799,7 @@ VOID MailHousekeepingResults()
extern UCHAR LogDirectory[260];
int DeleteLogFiles()
int DeleteBBSLogFiles()
{
WIN32_FIND_DATA ffd;
@ -848,7 +848,7 @@ int DeleteLogFiles()
Age = (int)((now - ft.LowPart) / 86400);
if (Age > LogAge)
if (Age > BBSLogAge)
{
sprintf(File, "%s/logs/%s%c", GetLogDirectory(), ffd.cFileName, 0);
if (DeletetoRecycleBin)
@ -875,7 +875,7 @@ int Filter(const struct dirent * dir)
return memcmp(dir->d_name, "log", 3) == 0 && strstr(dir->d_name, ".txt");
}
int DeleteLogFiles()
int DeleteBBSLogFiles()
{
struct dirent **namelist;
int n;
@ -897,7 +897,7 @@ int DeleteLogFiles()
{
Age = (now - STAT.st_mtime) / 86400;
if (Age > LogAge)
if (Age > BBSLogAge)
{
printf("Deleting %s\n", FN);
unlink(FN);

View file

@ -20,6 +20,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
//
// C replacement for L2Code.asm
//
#define FRMRHACK
#define Kernel
#define _CRT_SECURE_NO_DEPRECATE
@ -1215,6 +1218,17 @@ VOID L2LINKACTIVE(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE *
LINK->L2STATE = 2;
LINK->Ver2point2 = FALSE;
LINK->L2TIMER = 1; // Use retry to send SABM
LINK->L2RETRIES--; // Make sure at least one is sent
// if an L3 link mark neighbour as not V2.2
if (LINK->LINKTYPE == 3)
{
struct ROUTE * ROUTE = LINK->NEIGHBOUR; // TO NEIGHBOUR
if (ROUTE)
ROUTE->noV2point2 = 1;
}
ReleaseBuffer(Buffer);
return;
@ -1901,7 +1915,7 @@ BOOL InternalL2SETUPCROSSLINK(PROUTE ROUTE, int Retries)
else
LINK->LINKWINDOW = PORT->PORTWINDOW;
if (SUPPORT2point2)
if (SUPPORT2point2 && (ROUTE->noV2point2 == 0))
LINK->L2STATE = 1; // Send XID
else
LINK->L2STATE = 2;
@ -2156,7 +2170,27 @@ VOID L2_PROCESS(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * B
// FRAME REJECT RECEIVED - LOG IT AND RESET LINK
RESET2(LINK);
//#ifdef FRMRHACK
// Treat as DM and break link
Debugprintf("BPQ32 FRMR received, disconnecting link");
InformPartner(LINK, LINKLOST); // SEND DISC TO OTHER END
L2SENDCOMMAND(LINK, DM);
CLEAROUTLINK(LINK);
if (PORT->TNC && PORT->TNC->Hardware == H_KISSHF)
DetachKISSHF(PORT);
PORT->L2FRMRRX++;
return;
//#endif
/* RESET2(LINK);
LINK->L2STATE = 2; // INITIALISING
LINK->L2ACKREQ = 0; // DONT SEND ANYTHING ELSE
@ -2166,7 +2200,7 @@ VOID L2_PROCESS(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * B
L2SENDCOMMAND(LINK, SABM | PFBIT);
return;
*/
default:
// ANY OTHER - IGNORE
@ -3829,6 +3863,13 @@ VOID SENDFRMR(struct _LINKTABLE * LINK)
MESSAGE * Buffer;
UCHAR * ptr;
#ifdef FRMRHACK // Ignore any frames with invalid n(r). If spurious error retry should fix it. If not link will retry out and reset
if (LINK->SDREJF & SDNRER)
return;
#endif
Buffer = SETUPL2MESSAGE(LINK, FRMR);
if (Buffer == NULL)

View file

@ -620,7 +620,7 @@ VOID PROCROUTES(struct DEST_LIST * DEST, struct ROUTE * ROUTE, int Qual)
if (DEST->DEST_STATE & 0x80) // BBS ENTRY
return;
for (Index = 0; Index < 4; Index++)
for (Index = 0; Index < 3; Index++)
{
if (DEST->NRROUTE[Index].ROUT_NEIGHBOUR == ROUTE)
{
@ -692,6 +692,7 @@ UpdatateThisEntry:
// IT DID - THIS IS ALSO CALLED BY CHECKL3TABLES. TRY RESETING
// OBS, BUT NOT QUALITY
if ((DEST->NRROUTE[Index].ROUT_OBSCOUNT & 0x80) == 0)
DEST->NRROUTE[Index].ROUT_OBSCOUNT = OBSINIT; // SET OBSOLESCENCE COUNT
@ -1432,6 +1433,7 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
{
// not Locked
if (ActiveRoute < 3) // Not INP3 Route
DEST->NRROUTE[ActiveRoute].ROUT_OBSCOUNT--;
// if ROUTE HAS EXPIRED - WE SHOULD CLEAR IT, AND MOVE OTHERS (IF ANY) UP
@ -1564,6 +1566,9 @@ struct DEST_LIST * CHECKL3TABLES(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * Msg
{
int Index = DEST->DEST_ROUTE -1;
if (Index > 2) // INP3 Route
return DEST;
if (DEST->NRROUTE[Index].ROUT_OBSCOUNT & 0x80) // Locked:
return DEST;
@ -1592,6 +1597,9 @@ VOID REFRESHROUTE(TRANSPORTENTRY * Session)
Index--;
if (Index > 2) // INP3 Route
return;
if (DEST->NRROUTE[Index].ROUT_OBSCOUNT & 0x80)
return; // Locked

View file

@ -86,14 +86,6 @@ void SendBBSDataToPktMap();
void CloseAllLinks();
void hookNodeClosing(char * Reason);
void NETROMTCPResolve();
<<<<<<< Updated upstream
extern uint64_t INP3timeLoadedMS;
||||||| Stash base
extern uint64_t INP3timeLoadedMS;
=======
>>>>>>> Stashed changes
BOOL IncludesMail = FALSE;
BOOL IncludesChat = FALSE;
@ -874,7 +866,6 @@ int main(int argc, char * argv[])
srand(time(NULL));
// look for optarg format parameters
{

0
MHSave.txt Normal file
View file

View file

@ -1020,8 +1020,7 @@ void WritePacketLogThread(void * param)
int MsgLen;
MESSAGE * MSG;
MESSAGE * Q;
char buffer[512];
char buffer[2048];
while(1)
{
@ -1075,6 +1074,8 @@ void WritePacketLogThread(void * param)
MsgLen = IntDecodeFrame(MSG, buffer, MSG->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
IntSetTraceOptionsEx(MMASK, SaveMTX, SaveMCOM, SaveMUI);
buffer[MsgLen++] = 0x0a; // Add lf
fwrite(buffer , 1, MsgLen, Handle);
GetSemaphore(&Semaphore, 101);

File diff suppressed because it is too large Load diff

6
RHP.c
View file

@ -387,6 +387,12 @@ int processRHCPOpen(struct ConnectionInfo * sockptr, SOCKET Socket, char * Msg,
if (_stricmp(pfam, "ax25") != 0)
return sprintf(ReplyBuffer, "{\"type\": \"openReply\", \"id\": %d, \"handle\": %d, \"errCode\": 12, \"errText\": \"Bad parameter\"}", ID, 0);
if (strlen(Local) > 10)
return sprintf(ReplyBuffer, "{\"type\": \"openReply\", \"id\": %d, \"handle\": %d, \"errCode\": 6, \"errText\": \"%s\"}", ID, 0, ErrCodes[6]);
if (strlen(Remote) > 10)
return sprintf(ReplyBuffer, "{\"type\": \"openReply\", \"id\": %d, \"handle\": %d, \"errCode\": 7, \"errText\": \"%s\"}", ID, 0, ErrCodes[7]);
if (_stricmp(Mode, "stream") == 0)
{
{

View file

@ -56,6 +56,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
extern UCHAR LogDirectory[];
extern int MONTOFILEFLAG;
static char ClassName[]="TELNETSERVER";
static char WindowTitle[] = "Telnet Server";
@ -177,24 +178,22 @@ void NETROMConnectionLost(struct ConnectionInfo * sockptr);
void NETROMConnectionAccepted(struct ConnectionInfo * sockptr);
struct ConnectionInfo * AllocateNRTCPRec();
static int LogAge = 13;
int DeleteLogFile(char * Log, int KeepDays);
void DeleteLogFiles(int Age)
{
DeleteLogFile("Telnet", Age);
DeleteLogFile("CMSAccess_", Age);
DeleteLogFile("ConnectLog_",Age);
DeleteLogFile("APRS_", Age);
if (MONTOFILEFLAG)
DeleteLogFile("PacketLog_", MONTOFILEFLAG);
}
#ifdef WIN32
int DeleteLogFile(char * Log);
void DeleteTelnetLogFiles()
int DeleteLogFile(char * Log, int KeepDays)
{
DeleteLogFile("/logs/Telnet*.log");
DeleteLogFile("/logs/CMSAccess_*.log");
DeleteLogFile("/logs/ConnectLog_*.log");
}
int DeleteLogFile(char * Log)
{
WIN32_FIND_DATA ffd;
char szDir[MAX_PATH];
@ -205,11 +204,11 @@ int DeleteLogFile(char * Log)
time_t now = time(NULL);
int Age;
// Prepare string for use with FindFile functions. First, copy the
// string to a buffer, then append '\*' to the directory name.
strcpy(szDir, GetLogDirectory());
strcat(szDir, "/Logs/");
strcat(szDir, Log);
strcat(szDir, "*.log");
// Find the first file in the directory.
@ -218,8 +217,6 @@ int DeleteLogFile(char * Log)
if (INVALID_HANDLE_VALUE == hFind)
return dwError;
// List all the files in the directory with some info about them.
do
{
if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
@ -236,7 +233,7 @@ int DeleteLogFile(char * Log)
Age = (int)((now - ft.LowPart) / 86400);
if (Age > LogAge)
if (Age > KeepDays)
{
sprintf(File, "%s/logs/%s%c", GetLogDirectory(), ffd.cFileName, 0);
Debugprintf("Deleting %s", File);
@ -256,13 +253,10 @@ int DeleteLogFile(char * Log)
int TelFilter(const struct dirent * dir)
{
return (memcmp(dir->d_name, "CMSAccess", 9) == 0
|| memcmp(dir->d_name, "Telnet", 6) == 0
|| memcmp(dir->d_name, "ConnectLog", 6) == 0)
&& strstr(dir->d_name, ".log");
return strstr(dir->d_name, ".log") != 0;
}
int DeleteTelnetLogFiles()
int DeleteLogFile(char * Log, int KeepDays)
{
struct dirent **namelist;
int n;
@ -278,18 +272,22 @@ int DeleteTelnetLogFiles()
else
{
while(n--)
{
if (memcmp(namelist[n]->d_name, Log, strlen(Log)) == 0)
{
sprintf(FN, "logs/%s", namelist[n]->d_name);
if (stat(FN, &STAT) == 0)
{
Age = (now - STAT.st_mtime) / 86400;
if (Age > LogAge)
if (Age > KeepDays)
{
Debugprintf("Deleting %s\n", FN);
Debugprintf("Deleting %s", FN);
unlink(FN);
}
}
}
free(namelist[n]);
}
free(namelist);
@ -1194,6 +1192,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
TNC = TNCInfo[n];
TNC->Port = n;
TNC->PortRecord = PortRecord;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_TELNET;
TNC->RIG = &TNC->DummyRig; // Not using Rig control, so use Dummy
@ -1445,8 +1444,6 @@ void * TelnetExtInit(EXTPORTDATA * PortEntry)
}
*/
DeleteTelnetLogFiles();
initUTF8();
sprintf(msg,"Telnet Server ");

View file

@ -10,23 +10,15 @@
#endif
<<<<<<< Updated upstream
#define KVers 6,0,25,11
#define KVerstring "6.0.25.11\0"
||||||| Stash base
#define KVers 6,0,25,8
#define KVerstring "6.0.25.8\0"
=======
#define KVers 6,0,25,12
#define KVerstring "6.0.25.12\0"
>>>>>>> Stashed changes
#define KVers 6,0,25,15
#define KVerstring "6.0.25.15\0"
#ifdef CKernel
#define Vers KVers
#define Verstring KVerstring
#define Datestring "October 2025"
#define Datestring "December 2025"
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
#define VerDesc "BPQ32 Switch\0"

View file

@ -2929,7 +2929,7 @@ BOOL RestartTNC(struct TNCINFO * TNC)
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in destaddr;
Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
// Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
if (sock == INVALID_SOCKET)
return 0;
@ -2952,7 +2952,7 @@ BOOL RestartTNC(struct TNCINFO * TNC)
n = sendto(sock, TNC->ProgramPath, (int)strlen(TNC->ProgramPath), 0, (struct sockaddr *)&destaddr, sizeof(destaddr));
Debugprintf("Restart TNC - sendto returned %d", n);
// Debugprintf("Restart TNC - sendto returned %d", n);
Sleep(100);
closesocket(sock);

View file

@ -120,7 +120,7 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
struct sockaddr_in destaddr;
Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
// Debugprintf("trying to restart TNC %s", TNC->ProgramPath);
if (sock == INVALID_SOCKET)
return 0;
@ -143,7 +143,7 @@ static BOOL RestartTNC(struct TNCINFO * TNC)
n = sendto(sock, TNC->ProgramPath, (int)strlen(TNC->ProgramPath), 0, (struct sockaddr *)&destaddr, sizeof(destaddr));
Debugprintf("Restart TNC - sendto returned %d", n);
// Debugprintf("Restart TNC - sendto returned %d", n);
Sleep(100);
closesocket(sock);

View file

@ -258,6 +258,9 @@ typedef struct ROUTE
int TCPPort;
struct NRTCPSTRUCT * TCPSession;
struct addrinfo * TCPAddress; // Resolved Address
int localport; // for consistancy check
int recNum; // This entry's index it Routes table
int noV2point2; // Set to force V2.0 connect. Can be set in config or dynamically learned
} *PROUTE;
@ -265,10 +268,8 @@ typedef struct ROUTE
#define GotRTTRequest 1 // Other end has sent us a RTT Packet
#define GotRTTResponse 2 // Other end has sent us a RTT Response
#define GotRIF 4 // Other end has sent RIF, so is probably an INP3 Node
// (could just be monitoring RTT for some reason
#define SentRTTRequest 8
#define SentOurRIF 16 // Set when we have sent a rif for our Call and any ApplCalls
#define SentRTTRequest 4
#define SentOurRIF 8 // Set when we have sent a rif for our Call and any ApplCalls
// (only sent when we have seen both a request and response)
#pragma pack(1)
@ -480,18 +481,18 @@ typedef struct _APPLCALLS
typedef struct NR_DEST_ROUTE_ENTRY
{
struct ROUTE * ROUT_NEIGHBOUR; // POINTER TO NEXT NODE IN PATH
uint16_t * Dummy; // Padding so records are same length
UCHAR ROUT_QUALITY; // QUALITY
UCHAR ROUT_OBSCOUNT;
UCHAR ROUT_LOCKED;
UCHAR Padding[4]; // So Entries are the same length
} *PNR_DEST_ROUTE_ENTRY;
typedef struct INP3_DEST_ROUTE_ENTRY
{
struct ROUTE * ROUT_NEIGHBOUR; // POINTER TO NEXT NODE IN PATH
USHORT LastRTT; // Last Value Reported
USHORT RTT; // Current
USHORT SRTT; // Smoothed RTT
uint16_t * RouteLastTT; // Last time sent should be saved for each neighbour. Area is mallod'ed as needed
USHORT STT; // Current time to dest from here (was called RTT but is one way not round trip.
// Is actually a smoothed value as is calculated from smoothed link times)
UCHAR Hops;
} *PDEST_ROUTE_ENTRY;
@ -744,6 +745,8 @@ typedef struct PORTCONTROL
int Hardware; // TNC H_TYPE. Copied here for access from application context
int isRF; // For API reporting. -1 is unspecified
int SENDRIFTIMER;
time_t LastRIFTime;
} PORTCONTROLX, *PPORTCONTROL;

View file

@ -1591,7 +1591,7 @@ extern RECT DebugRect;
extern HWND hMonitor;
//extern HWND hConsole;
//extern RECT ConsoleRect;
extern int LogAge;
extern int BBSLogAge;
extern BOOL DeletetoRecycleBin;
extern BOOL SuppressMaintEmail;
extern BOOL SaveRegDuringMaint;

39
cMain.c
View file

@ -58,6 +58,7 @@ VOID L2SENDCOMMAND(struct _LINKTABLE * LINK, int CMD);
void WritePacketLogThread(void * param);
void hookNodeStarted();
void hookNodeRunning();
void DeleteLogFiles(int Age);
void APIL2Trace(struct _MESSAGE * Message, char * Dirn);
#include "configstructs.h"
@ -71,11 +72,15 @@ extern int nodeStartedSent;
extern SOCKADDR_IN UDPreportdest;
extern char NodeAPIServer[80];
extern int NodeAPIPort;
extern int RIFInterval;
time_t LastNodeStatus = 0;
int nodeStatusTimer = 20 * 60; // 20 mins
int LogAge = 10;
struct PORTCONFIG * PortRec;
#define RNRSET 0x2 // RNR RECEIVED FROM OTHER END
@ -675,6 +680,7 @@ BOOL Start()
struct CMDX * CMD;
int PortSlot = 1;
uintptr_t int3;
int index = 0; // Entry No. in ROUTES
unsigned char * ptr2 = 0, * ptr3, * ptr4;
USHORT * CWPTR;
@ -844,6 +850,10 @@ BOOL Start()
MAXLINKS = cfg->C_MAXLINKS;
MAXDESTS = cfg->C_MAXDESTS;
MAXNEIGHBOURS = cfg->C_MAXNEIGHBOURS;
if (MAXNEIGHBOURS == 0)
MAXNEIGHBOURS = 1;
MAXCIRCUITS = cfg->C_MAXCIRCUITS;
HIDENODES = cfg->C_HIDENODES;
@ -882,11 +892,14 @@ BOOL Start()
PREFERINP3ROUTES = cfg->C_PREFERINP3ROUTES;
if (cfg->C_DEBUGINP3)
DEBUGINP3 = 0;
DEBUGINP3 = cfg->C_DEBUGINP3;
EnableOARCAPI = cfg->C_OARCAPI;
MONTOFILEFLAG = cfg->C_MONTOFILE;
RIFInterval = cfg->C_RIFInterval;
if (cfg->C_OnlyVer2point0)
SUPPORT2point2 = 0;
@ -1361,6 +1374,7 @@ BOOL Start()
char * VIA;
char axcall[8];
ConvToAX25(Rcfg->call, ROUTE->NEIGHBOUR_CALL);
// if VIA convert digis
@ -1405,6 +1419,9 @@ BOOL Start()
ROUTE->NoKeepAlive = 0; // Cant have INP3 and NOKEEPALIVES
}
if (Rcfg->noV2point2)
ROUTE->noV2point2 = 1;
ROUTE->NBOUR_MAXFRAME = Rcfg->pwind & 0x3f;
FRACK = Rcfg->pfrack;
@ -1423,6 +1440,8 @@ BOOL Start()
ROUTE->TCPAddress->ai_addr = (struct sockaddr *) zalloc(sizeof(struct sockaddr));
}
ROUTE->recNum = index++;
Rcfg++;
ROUTE++;
}
@ -1582,6 +1601,11 @@ BOOL Start()
if (AUTOSAVEMH)
ReadMH(); // Only if AutoSave configured
// Tidy Log Files
DeleteLogFiles(LogAge);
// set up stream number in BPQHOSTVECTOR
for (i = 0; i < 64; i++)
@ -1656,14 +1680,19 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE)
{
struct ROUTE * ROUTE = NEIGHBOURS;
struct ROUTE * FIRSTSPARE = NULL;
int n = MAXNEIGHBOURS;
char Normcall[10];
int n;
while (n--)
for (n = 0; n < MAXNEIGHBOURS; n++)
{
if (ROUTE->NEIGHBOUR_CALL[0] == 0) // Spare
{
if (FIRSTSPARE == NULL)
{
FIRSTSPARE = ROUTE;
ROUTE->recNum = n;
}
}
if (ROUTE->NEIGHBOUR_PORT != Port)
{
@ -1671,7 +1700,6 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE)
continue;
}
Normcall[ConvFromAX25(ROUTE->NEIGHBOUR_CALL, Normcall)] = 0;
if (CompareCalls(ROUTE->NEIGHBOUR_CALL, Call))
@ -1685,6 +1713,7 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE)
// ENTRY NOT FOUND - FIRSTSPARE HAS FIRST FREE ENTRY, OR ZERO IF TABLE FULL
*REQROUTE = FIRSTSPARE;
return FALSE;
}

101
config.c
View file

@ -310,7 +310,9 @@ static char *keywords[] =
"LogL4Connects", "LogAllConnects", "SAVEMH", "ENABLEADIFLOG", "ENABLEEVENTS", "SAVEAPRSMSGS",
"EnableM0LTEMap", "MQTT", "MQTT_HOST", "MQTT_PORT", "MQTT_USER", "MQTT_PASS",
"L4Compress", "L4CompMaxframe", "L4CompPaclen", "L2Compress", "L2CompMaxframe",
"L2CompPaclen", "PREFERINP3ROUTES", "OnlyVer2point0", "DEBUGINP3", "ENABLEOARCAPI"
"L2CompPaclen", "PREFERINP3ROUTES", "OnlyVer2point0", "DEBUGINP3", "ENABLEOARCAPI", "MONTOFILE",
"RIFInterval"
}; /* parameter keywords */
static void * offset[] =
@ -334,7 +336,8 @@ static void * offset[] =
&xxcfg.C_LogL4Connects, &xxcfg.C_LogAllConnects, &xxcfg.C_SaveMH, &xxcfg.C_ADIF, &xxcfg.C_EVENTS, &xxcfg.C_SaveAPRSMsgs,
&xxcfg.C_M0LTEMap, &xxcfg.C_MQTT, &xxcfg.C_MQTT_HOST, &xxcfg.C_MQTT_PORT, &xxcfg.C_MQTT_USER, &xxcfg.C_MQTT_PASS,
&xxcfg.C_L4Compress, &xxcfg.C_L4CompMaxframe, &xxcfg.C_L4CompPaclen, &xxcfg.C_L2Compress, &xxcfg.C_L2CompMaxframe,
&xxcfg.C_L2CompPaclen, &xxcfg.C_PREFERINP3ROUTES, &xxcfg.C_OnlyVer2point0, &xxcfg.C_DEBUGINP3, &xxcfg.C_OARCAPI}; /* offset for corresponding data in config file */
&xxcfg.C_L2CompPaclen, &xxcfg.C_PREFERINP3ROUTES, &xxcfg.C_OnlyVer2point0, &xxcfg.C_DEBUGINP3, &xxcfg.C_OARCAPI, &xxcfg.C_MONTOFILE,
&xxcfg.C_RIFInterval}; /* offset for corresponding data in config file */
static int routine[] =
{
@ -357,7 +360,8 @@ static int routine[] =
2, 2, 1, 2, 2, 2,
2, 2, 0, 1, 20, 20,
1, 1, 1, 1, 1,
1, 1, 1, 1, 1}; // Routine to process param
1, 1, 1, 1, 1, 1,
1}; // Routine to process param
int PARAMLIM = sizeof(routine)/sizeof(int);
//int NUMBEROFKEYWORDS = sizeof(routine)/sizeof(int);
@ -560,7 +564,6 @@ BOOL ProcessConfig()
heading = 1;
}
paramok[6]=1; /* dont need BUFFERS */
paramok[8]=1; /* dont need TRANSDELAY */
paramok[13]=1; // NodeAlias
@ -610,35 +613,35 @@ BOOL ProcessConfig()
paramok[45+i]=1; /* or APPLCALLS, APPLALIASS APPLQUAL */
paramok[69]=1; // BText optional
paramok[70]=1; // IPGateway optional
paramok[70]=1; // NETROMCALL optional
paramok[71]=1; // C_IS_CHAT optional
paramok[72]=1; // MAXRTT optional
paramok[73]=1; // MAXHOPS optional
paramok[74]=1; // LogL4Connects optional
paramok[75]=1; // LogAllConnects optional
paramok[76]=1; // SAVEMH optional
paramok[77]=1; // ENABLEADIFLOG optional
paramok[78]=1; // EnableEvents optional
paramok[79]=1; // SaveAPRSMsgs optional
paramok[79]=1; // SaveAPRSMsgs optional
paramok[80]=1; // EnableM0LTEMap optional
paramok[81]=1; // MQTT Params
paramok[73]=1; // MAXTT optional
paramok[74]=1; // MAXHOPS optional
paramok[75]=1; // LogL4Connects optional
paramok[76]=1; // LogAllConnects optional
paramok[77]=1; // SAVEMH optional
paramok[78]=1; // ENABLEADIFLOG optional
paramok[79]=1; // EnableEvents optional
paramok[80]=1; // SaveAPRSMsgs optional
paramok[81]=1; // EnableM0LTEMap optional
paramok[82]=1; // MQTT Params
paramok[83]=1; // MQTT Params
paramok[84]=1; // MQTT Params
paramok[85]=1; // MQTT Params
paramok[86]=1; // L4Compress
paramok[87]=1; // L4Compress Maxframe
paramok[88]=1; // L4Compress Paclen
paramok[89]=1; // L2Compress
paramok[90]=1; // L2Compress Maxframe
paramok[91]=1; // L2Compress Paclen
paramok[92]=1; // PREFERINP3ROUTES
paramok[93]=1; // ONLYVer2point0
paramok[94]=1; // DEBUGINP3
paramok[95]=1; // EnableOARCAPI
paramok[96]=1; // OARCAPI
paramok[86]=1; // MQTT Params
paramok[87]=1; // L4Compress
paramok[88]=1; // L4Compress Maxframe
paramok[89]=1; // L4Compress Paclen
paramok[90]=1; // L2Compress
paramok[91]=1; // L2Compress Maxframe
paramok[92]=1; // L2Compress Paclen
paramok[93]=1; // PREFERINP3ROUTES
paramok[94]=1; // ONLYVer2point0
paramok[95]=1; // DEBUGINP3
paramok[96]=1; // EnableOARCAPI
paramok[97]=1; // MONTOFILE
paramok[98]=1; // RIFInterval
for (i=0; i < PARAMLIM; i++)
@ -651,7 +654,7 @@ BOOL ProcessConfig()
Consoleprintf("The following parameters were not correctly specified");
heading = 1;
}
Consoleprintf(keywords[i]);
Consoleprintf("%s", keywords[i]);
}
}
@ -1680,7 +1683,15 @@ int routes(int i)
char * val = strtok_s(NULL, " ,=", &context);
if (val)
Route->farQual = atoi(val);
Route->nokeepalives = atoi(val);
}
else if (strcmp(ptr, "NOV2.2") == 0)
{
char * val = strtok_s(NULL, " ,=", &context);
if (val)
Route->noV2point2 = atoi(val);
}
@ -3069,13 +3080,39 @@ int simple(int i)
/* Set PARAMOK flags on all values that are defaulted */
for (i=0; i < PARAMLIM; i++)
paramok[i]=1;
paramok[15] = 0; // Must have callsign
paramok[45] = 0; // Dont Have Appl1Call
paramok[53] = 0; // or APPL1ALIAS
// Set defined flag on defaulted params
paramok[0] = 1; // OBSINIT
paramok[1] = 1; // OBSMIN
paramok[2] = 1; // NODESINTERVAL
paramok[3] = 1; // L3TIMETOLIVE
paramok[4] = 1; // L4RETRIES
paramok[5] = 1; // L4TIMEOUT
paramok[7] = 1; // PACLEN
paramok[9] = 1; // T3
paramok[10] = 1; // IDLETIME
paramok[11] = 1; // BBS
paramok[12] = 1; // NODE
paramok[18] = 1; // IDMSG:
paramok[19] = 1; // INFOMSG:
paramok[22] = 1; // MAXLINKS
paramok[23] = 1; // MAXNODES
paramok[24] = 1; // MAXROUTES
paramok[25] = 1; // MAXCIRCUITS
paramok[26] = 1; // IDINTERVAL
paramok[27] = 1; // MINQUAL
paramok[28] = 1; // HIDENODES
paramok[29] = 1; // L4DELAY
paramok[30] = 1; // L4WINDOW
paramok[31] = 1; // BTINTERVAL
paramok[36] = 1; // CTEXT:
paramok[39] = 1; // ENABLE_LINKED
paramok[41] = 1; // FULL_CTEXT
return(1);
}

View file

@ -97,6 +97,7 @@ struct ROUTECONFIG
int farQual;
int inp3;
int nokeepalives;
int noV2point2;
char * tcphost;
int tcpport;
};
@ -187,6 +188,9 @@ struct CONFIGTABLE
int C_OnlyVer2point0;
int C_DEBUGINP3;
int C_OARCAPI;
int C_MONTOFILE;
int C_RIFInterval;
//#define ApplOffset 80000 // Applications offset in config buffer

View file

@ -39,7 +39,7 @@ int DEBUGINP3 = 0;
int EnableOARCAPI = 0;
int RTTInterval = 24; // 4 Minutes
int RTTInterval = 30; // 10 second increments - 5 Minutes
BOOL IPRequired = FALSE;
BOOL PMRequired = FALSE;

11
debian/NEWS vendored Normal file
View file

@ -0,0 +1,11 @@
linbpq (6.0.24.22-2) unstable; urgency=medium
This is quite a big update, with config moving from /opt/oarc/bpq/bpq32.cfg to
/etc/bpq32.cfg. The system shall do this automatically for you, however
computers and their programmers are not perfect.
I strongly recommend at this point backing up your entire
/opt/oarc/bpq/ directory (cp -r /opt/oarc/bpq/ ~/bpq-backup/) before
proceeding with the upgrade
-- Dave Hibberd <d@vehibberd.com> Sat, 16 Dec 2023 13:30:06 +0000

23
debian/README.Debian vendored Normal file
View file

@ -0,0 +1,23 @@
README for linbpq on Debian
===========================
Please see https://wiki.oarc.uk/packet:linbpq-apt-installation for this guide
# Set config
Copy the config, edit it & set permissions.
The permissions are so linbpq web interface can edit the config.
sudo mv /usr/share/doc/linbpq/examples/bpq32.cfg /etc/bpq32.cfg
sudo nano /etc/bpq32.cfg
sudo chown :linbpq /etc/bpq32.cfg
sudo chmod 644 /etc/bpq32.cfg
# Start linbpq
sudo systemctl start linbpq
# Access your node
It shall be available by accessing http://localhost:8008 in the browser or telnet localhost 8010
-- Dave Hibberd <hibby@debian.org> Tue, 26 Mar 2024 00:53:42 +0000

50
debian/bpq32.cfg vendored Normal file
View file

@ -0,0 +1,50 @@
SIMPLE
NODECALL=MB7NAA
NODEALIAS=AANODE
LOCATOR=AA00aa
PASSWORD=xxxxxxxx
AUTOSAVE=1
NODESINTERVAL=10
MINQUAL=10
CTEXT:
Thanks for connecting.
Type ? for help.
***
PORT
PORTNUM=1
ID=VHF
TYPE=ASYNC
PROTOCOL=KISS
KISSOPTIONS=ACKMODE
COMPORT=/dev/ttyACM0
SPEED=57600
FRACK=4000
PACLEN=150
DIGIFLAG=0
QUALITY=192
MINQUAL=20
ENDPORT
PORT
PORTNUM=9
ID=Telnet
DRIVER=Telnet
CONFIG
LOGGING=1
CMS=1
DisconnectOnClose=1
SECURETELNET=1
TCPPORT=8010
FBBPORT=8011
HTTPPORT=8008
LOGINPROMPT=user:
PASSWORDPROMPT=password:
MAXSESSIONS=10
CTEXT=Thanks for connecting\n Enter ? for list of commands\n\n
USER=username,xxxxxxxx,m0aaa,,SYSOP
ENDPORT
LINCHAT
APPLICATION 2,CHAT,,MB7NAA-9,AACHAT,255

359
debian/changelog vendored Normal file
View file

@ -0,0 +1,359 @@
linbpq (6.0.25.15+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.15+repack
* Remove Patch for TelnetV6, fixed upstream
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Wed, 07 Jan 2026 21:53:20 +0000
linbpq (6.0.25.13+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* 6.0.25.12 hacky merge due t it not ffing.
* New upstream version 6.0.25.13+repack
* Patch TelnetV6 to build
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 23 Dec 2025 16:45:56 +0000
linbpq (6.0.25.12+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.12+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Sat, 22 Nov 2025 15:11:09 +0000
linbpq (6.0.25.11+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.11+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 11 Nov 2025 21:52:58 +0000
linbpq (6.0.25.9+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.9+repack
* Refresh patches
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Sun, 09 Nov 2025 22:45:07 +0000
linbpq (6.0.25.8+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* Build on latest gcc standards
* New upstream version 6.0.25.8+repack
* Refresh patches with gbp pq!
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Fri, 24 Oct 2025 00:45:16 +0100
linbpq (6.0.25.06+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.06+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Fri, 10 Oct 2025 23:42:04 +0100
linbpq (6.0.25.1+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.1+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Sat, 20 Sep 2025 15:43:32 +0100
linbpq (6.0.24.82+repack-1~hibbian13+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.24.82+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Sun, 17 Aug 2025 22:36:49 +0100
linbpq (6.0.24.78+repack-1~hibbian~TRIXIE+1) trixie-hibbian-unstable; urgency=medium
* New Upstream
* New files excluded
- No binaries in this release at all maybe!
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Thu, 31 Jul 2025 01:31:38 +0100
linbpq (6.0.24.77+repack-1~hibbian~TRIXIE+1) trixie-hibbian-unstable; urgency=medium
* New upstream version 6.0.24.77+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 22 Jul 2025 21:46:13 +0100
linbpq (6.0.24.75+repack-1~hibbian~TRIXIE+2) trixie-hibbian-unstable; urgency=medium
* First trixie release
* Drop hard-dep on hibbian-archive-keyring
-- Dave Hibberd <hibby@debian.org> Wed, 16 Jul 2025 19:10:33 +0100
linbpq (6.0.24.75+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream version 6.0.25.75+repack
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 15 Jul 2025 01:10:43 +0100
linbpq (6.0.24.71+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream version 6.0.24.67+repack
* New upstream version 6.0.24.69+repack
* New upstream version 6.0.24.69.1+repack
* New upstream version 6.0.24.71+repack
* Okay that's a lot of updates.
* Refreshed d/p/makefile to reflect new CFLAG
* MINI_BUILDD_OPTION: auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Wed, 21 May 2025 21:45:59 +0100
linbpq (6.0.24.66+repack-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Update postinst script to be a little quieter
* MINI_BUILDD_OPTION:
auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 11 Mar 2025 00:51:35 +0000
linbpq (6.0.24.66+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream version 6.0.24.66+repack
-- Dave Hibberd <hibby@debian.org> Tue, 04 Mar 2025 22:50:09 +0000
linbpq (6.0.24.65+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
-- Dave Hibberd <hibby@debian.org> Tue, 25 Feb 2025 09:33:24 +0000
linbpq (6.0.24.59a+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* Little tweaks to makefile patch to account for new -rdynamic
-- Dave Hibberd <hibby@debian.org> Mon, 03 Feb 2025 22:32:11 +0000
linbpq (6.0.24.56+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
-- Dave Hibberd <hibby@debian.org> Mon, 06 Jan 2025 21:37:44 +0000
linbpq (6.0.24.55+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* d/rules
- Increased hardening
-- Dave Hibberd <hibby@debian.org> Sun, 05 Jan 2025 23:35:06 +0000
linbpq (6.0.24.54+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* Drop AGW Patch
* Drop Spelling Patch
* Drop Dynamic Links patch
-- Dave Hibberd <hibby@debian.org> Tue, 17 Dec 2024 16:46:05 +0000
linbpq (6.0.24.53+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream
- Patches refreshed
- dropped some edits in ftbfs-gcc14
- dropped d/patches/headers.patch
-- Dave Hibberd <hibby@debian.org> Tue, 03 Dec 2024 00:57:57 +0000
linbpq (6.0.24.52+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream
- Patches happy
-- Dave Hibberd <hibby@debian.org> Sat, 30 Nov 2024 21:47:17 +0000
linbpq (6.0.24.51.1+repack-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Iron out an issue with time...
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 19:57:28 +0000
linbpq (6.0.24.51.1+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import after bug report
* Roll back some ftbfs-gcc14 edits
* Remove some more lib headers
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 19:30:22 +0000
linbpq (6.0.24.51+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
- Patches refreshed
* Upstream is now repacked to include less files
* Big build system review, now using Debian CFLAGS and LDFLAGS
- Hardening enabled, mostly
- A debug symbols package is now available
* Oh yeah, everything is now dynamic linking
- libpng
- libpaho-mqtt
- libjansson
- libminiupnpc
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 13:08:38 +0000
linbpq (6.0.24.50-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
* Files excluded at origtargz generation time for cleanliness
-- Dave Hibberd <hibby@debian.org> Tue, 12 Nov 2024 21:56:38 +0000
linbpq (6.0.24.49-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream import
* Patches refreshed
* Add mqtt requirements
-- Dave Hibberd <hibby@debian.org> Tue, 05 Nov 2024 21:52:29 +0000
linbpq (6.0.24.45-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
* Patches refreshed
-- Dave Hibberd <hibby@debian.org> Fri, 11 Oct 2024 15:48:41 +0100
linbpq (6.0.24.42-1~hibbian+3) bookworm-hibbian-unstable; urgency=medium
* 32bit build error
- Patch updated to fix hopefully
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 12:21:57 +0100
linbpq (6.0.24.42-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Forgot to fix the ninotnc-smt issue, fixed now
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 12:05:54 +0100
linbpq (6.0.24.42-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* Install config to /etc
* New upstream update
* Patches refreshed
* Debian hardening enabled
- 2 new patches created that touch almost every file
- Considered experimental.
- gcc14 builds for Debian Trixie!
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 10:15:11 +0100
linbpq (6.0.24.40-1) unstable; urgency=medium
* Fresh upstream release
- Patches refreshed
* Secure by default patch
-- Dave Hibberd <hibby@debian.org> Sun, 07 Jul 2024 16:09:28 +0100
linbpq (6.0.24.38-1) unstable; urgency=medium
* New Upstream
* Tweak config file per recommendation from 2M0MQN to make first start simple
* Bump standards to 4.7.0.0
-- Dave Hibberd <hibby@debian.org> Sun, 09 Jun 2024 22:38:40 +0100
linbpq (6.0.24.34-2) unstable; urgency=medium
* Fix config permissions bug as reported by Alex 2E1PKY
-- Dave Hibberd <hibby@debian.org> Mon, 08 Apr 2024 22:27:02 +0100
linbpq (6.0.24.34-1) unstable; urgency=medium
* Upstream bump
-- Dave Hibberd <hibby@debian.org> Sat, 06 Apr 2024 02:15:28 +0100
linbpq (6.0.24.33-1) unstable; urgency=medium
* Upstream bump
* Moved config file to examples
* Updated service to fail on no config
* Added helpful README.Debian
-- Dave Hibberd <hibby@debian.org> Tue, 26 Mar 2024 20:24:08 +0000
linbpq (6.0.24.30-1) unstable; urgency=medium
* Upstream bump
-- Dave Hibberd <hibby@debian.org> Fri, 23 Feb 2024 23:24:46 +0000
linbpq (6.0.24.29-1) unstable; urgency=medium
* Upstream bump
* Added my new details
* Tidied up some packaging errors
-- Dave Hibberd <hibby@debian.org> Tue, 13 Feb 2024 00:06:33 +0000
linbpq (6.0.24.27-2) unstable; urgency=medium
* Permissions fix for web-config-editor users
-- Dave Hibberd <d@vehibberd.com> Thu, 18 Jan 2024 10:31:56 +0000
linbpq (6.0.24.27-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Tue, 16 Jan 2024 20:51:43 +0000
linbpq (6.0.24.25-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Thu, 28 Dec 2023 10:44:47 +0000
linbpq (6.0.24.22-2) unstable; urgency=medium
* Moved config file home, caused chaos
-- Dave Hibberd <d@vehibberd.com> Sat, 16 Dec 2023 14:40:20 +0000
linbpq (6.0.24.22-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Fri, 08 Dec 2023 12:29:40 +0000
linbpq (6.0.24.16-1) unstable; urgency=medium
* New Upstream release
-- Dave Hibberd <d@vehibberd.com> Tue, 31 Oct 2023 22:50:01 +0000
linbpq (6.0.24.15-2) unstable; urgency=medium
* debian/conffiles introduced to stop linbpq overwriting config files
- Thanks to Mark 2M0IIG for raising concern about this bug!
-- Dave Hibberd <d@vehibberd.com> Sun, 15 Oct 2023 21:45:24 +0100
linbpq (6.0.24.15-1) unstable; urgency=medium
* New upstream release
-- Dave Hibberd <d@vehibberd.com> Tue, 10 Oct 2023 22:19:48 +0100
linbpq (6.0.24.2-1) unstable; urgency=medium
* Initial release.
-- Dave Hibberd <d@vehibberd.com> Mon, 28 Aug 2023 23:20:45 +0100

20
debian/control vendored Normal file
View file

@ -0,0 +1,20 @@
Source: linbpq
Section: hamradio
Priority: optional
Maintainer: Dave Hibberd <hibby@debian.org>
Standards-Version: 4.7.2
Vcs-Browser: https://git.hibbian.org/Hibbian/linbpq
Vcs-Git: https://git.hibbian.org/Hibbian/linbpq.git
Homepage: https://www.cantab.net/users/john.wiseman/Documents/
Build-Depends: debhelper-compat (= 13)
Build-Depends-Arch: libssl-dev, libminiupnpc-dev, libpcap-dev, libconfig-dev, zlib1g-dev, libpaho-mqtt-dev, libjansson-dev, libpng-dev
Rules-Requires-Root: no
Package: linbpq
Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser
Description: Packet node and ax25 stack
LINBPQ is a Linux version of the BPQ32 Node, BBS and Chat Server components.
It is actively developed by John G8BPQ and contains a complete, independent
implementation of ax.25 and net/rom as well as BBS and Chat applications and
can be used either as a packet switch or as a full featured node.

37
debian/copyright vendored Normal file
View file

@ -0,0 +1,37 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: linBPQ
Upstream-Contact: John Wiseman G8BPQ <john.wiseman@cantab.net>
Source: https://www.cantab.net/users/john.wiseman/Documents/
Files-Excluded: *.vcproj* *.bak *.lib *.dll *.wav *.asm *.vcxproj* *.pdb *.exe
.gitignore XAprs zlib.h zconf.h MQTT* pcap.h miniupnpc.h upnpdev.h
igd_desc_parse.h upnpcommands.h upnperrors.h miniupnpctypes.h
*.svn-base *.db *.obj
Files: *
Copyright: 1990-2025 John Wiseman G8BPQ <john.wiseman@cantab.net>
License: GPL-3
Files: debian/*
Copyright: 2016-2025 Dave Hibberd <d@vehibberd.com>
License: GPL-3
Files: debian/linbpq.service
Copyright: 2024-2025 Tom Fanning M0LTE
License: GPL-3
License: GPL-3
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
The GPL License which applies to this package can be found on your Debian
system at /usr/share/common-licenses/GPL-3.

2
debian/dirs vendored Normal file
View file

@ -0,0 +1,2 @@
usr/sbin
opt/oarc/bpq

3
debian/gbp.conf vendored Normal file
View file

@ -0,0 +1,3 @@
[DEFAULT]
debian-branch = hibbian/latest
upstream-branch = upstream/latest

6
debian/gitlab-ci.yml vendored Normal file
View file

@ -0,0 +1,6 @@
include:
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
reprotest:
extends: .test-reprotest-diffoscope

1
debian/install vendored Normal file
View file

@ -0,0 +1 @@
debian/bpq32.cfg etc/

1
debian/linbpq.examples vendored Normal file
View file

@ -0,0 +1 @@
debian/bpq32.cfg

14
debian/linbpq.service vendored Normal file
View file

@ -0,0 +1,14 @@
[Unit]
Description=Linbpq systemd service file
After=network.target
ConditionPathExists=/etc/bpq32.cfg
[Service]
ExecStart=/usr/sbin/linbpq -c /etc -d /opt/oarc/bpq -l /opt/oarc/bpq
WorkingDirectory=/opt/oarc/bpq
Restart=always
User=linbpq
Group=linbpq
[Install]
WantedBy=multi-user.target

11
debian/lintian-overrides vendored Normal file
View file

@ -0,0 +1,11 @@
# weirdness from oarc packaging
linbpq: dir-or-file-in-opt [opt/oarc/]
linbpq: dir-or-file-in-opt [opt/oarc/bpq/]
# i know!
linbpq: no-manual-page [usr/sbin/linbpq]
# Directory is populated on first run
linbpq: package-contains-empty-directory [opt/oarc/bpq/]
# Code convenience
linbpq: spelling-error-in-binary Dont Don't [usr/sbin/linbpq]
linbpq: spelling-error-in-binary Paramters Parameters [usr/sbin/linbpq]
linbpq: spelling-error-in-binary lon long [usr/sbin/linbpq]

57
debian/patches/makefile vendored Normal file
View file

@ -0,0 +1,57 @@
From: Dave Hibberd <hibby@debian.org>
Date: Sat, 20 Sep 2025 15:42:15 +0100
Subject: makefile
---
makefile | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/makefile b/makefile
index 26403e5..0f15cc0 100644
--- a/makefile
+++ b/makefile
@@ -2,8 +2,7 @@
# To exclude i2c support run make noi2c
-OBJS = pngwtran.o pngrtran.o pngset.o pngrio.o pngwio.o pngtrans.o pngrutil.o pngwutil.o\
- pngread.o pngwrite.o png.o pngerror.o pngget.o pngmem.o APRSIconData.o AISCommon.o\
+OBJS = APRSIconData.o AISCommon.o\
upnp.o APRSStdPages.o HSMODEM.o WinRPR.o KISSHF.o TNCEmulators.o bpqhdlc.o SerialPort.o\
adif.o WebMail.o utf8Routines.o VARA.o LzFind.o Alloc.o LzmaDec.o LzmaEnc.o LzmaLib.o \
Multicast.o ARDOP.o IPCode.o FLDigi.o linether.o CMSAuth.o APRSCode.o BPQtoAGW.o KAMPactor.o\
@@ -17,12 +16,12 @@ OBJS = pngwtran.o pngrtran.o pngset.o pngrio.o pngwio.o pngtrans.o pngrutil.o pn
# Configuration:
-#Default to Linux
- CC = gcc
- LDFLAGS = -Xlinker -Map=output.map -lrt
+CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
+CFLAGS+=$(shell dpkg-buildflags --get CPPFLAGS)
+LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)
-all: CFLAGS = -DLINBPQ -MMD -g -fcommon -fasynchronous-unwind-tables $(EXTRA_CFLAGS)
-all: LIBS = -lpaho-mqtt3a -ljansson -lminiupnpc -lm -lz -lpthread -lconfig -lpcap
+all: CFLAGS += -DLINBPQ -MMD -g -rdynamic -fcommon -fasynchronous-unwind-tables
+all: LIBS = -lpaho-mqtt3a -ljansson -lminiupnpc -lrt -lm -lz -lpthread -lconfig -lpcap -lpng
all: linbpq
#other OS
@@ -74,12 +73,11 @@ noi2c: linbpq
linbpq: $(OBJS)
- cc $(OBJS) $(CFLAGS) $(LDFLAGS) $(LIBS) -o linbpq
- sudo setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" linbpq
+ $(CC) $(OBJS) $(CFLAGS) $(LDFLAGS) $(LIBS) -o linbpq
-include *.d
-clean :
- rm *.d
- rm linbpq $(OBJS)
+install:
+ install -b -m 755 -D -d debian/linbpq/usr/sbin
+ install -b -m 755 -p linbpq debian/linbpq/usr/sbin

2
debian/patches/series vendored Normal file
View file

@ -0,0 +1,2 @@
spelling-fixes.patch
makefile

21
debian/patches/spelling-fixes.patch vendored Normal file
View file

@ -0,0 +1,21 @@
From: Dave Hibberd <hibby@debian.org>
Date: Sat, 20 Sep 2025 15:42:15 +0100
Subject: spelling-fixes
---
UZ7HODrv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/UZ7HODrv.c b/UZ7HODrv.c
index 2adfe12..75e40ee 100644
--- a/UZ7HODrv.c
+++ b/UZ7HODrv.c
@@ -387,7 +387,7 @@ int UZ7HOSetFreq(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESS
if (AGW->CenterFreq == 0)
{
- buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Invalid Modem Freqency\r");
+ buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Invalid Modem Frequency\r");
return 1;
}

47
debian/postinst vendored Normal file
View file

@ -0,0 +1,47 @@
#!/bin/sh
set -e
if [ "$1" = configure ]; then
# if ! getent group linbpq >/dev/null; then
# addgroup --system --force-badname linbpq || true
# fi
echo "Creating/updating linbpq user account..."
adduser --system --group --home /opt/oarc/bpq \
--gecos "linbpq system user" --shell /bin/false \
--quiet --disabled-password linbpq || {
# adduser failed. Why?
if getent passwd linbpq >/dev/null ; then
echo "Non-system user linbpq found. I will not overwrite a non-system" >&2
echo "user. Remove the user and reinstall linbpq." >&2
exit 1
fi
# unknown adduser error, simply exit
exit 1
}
if ! id -nGz linbpq | grep -qzxF 'dialout' ; then
adduser linbpq dialout
fi
if ! id -nGz linbpq | grep -qzxF 'plugdev' ; then
adduser linbpq plugdev
fi
chown :linbpq /opt/oarc/bpq
chmod 775 /opt/oarc/bpq
# If we have setcap is installed, set the requirements
# which allows us to install our binaries without the setuid
# bit.
if command -v setcap > /dev/null; then
setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" /usr/sbin/linbpq
else
echo "Setcap failed on /usr/sbin/linbpq, Features may be limited" >&2
fi
else
echo "Setcap is not installed, Features may be limited" >&2
fi
#DEBHELPER#

14
debian/preinst vendored Normal file
View file

@ -0,0 +1,14 @@
#!/bin/sh
set -e
confile="/etc/bpq32.cfg"
node="/opt/oarc/bpq/bpq32.cfg"
if [ -L $confile ]; then
rm $confile
cp $node $confile
mv $node $node.bak
fi
#DEBHELPER#

6
debian/rules vendored Executable file
View file

@ -0,0 +1,6 @@
#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS=hardening=+all
%:
dh $@

1
debian/source/format vendored Normal file
View file

@ -0,0 +1 @@
3.0 (quilt)

0
debian/source/include-binaries vendored Normal file
View file

0
debian/source/lintian-overrides vendored Normal file
View file

3
debian/watch vendored Normal file
View file

@ -0,0 +1,3 @@
version=4
opts="pgpmode=none,dversionmangle=s/\+repack//,repacksuffix=+repack,repack,compression=xz" \
http://127.0.0.1:8000/linbpq-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))

View file

@ -66,6 +66,7 @@ struct ConnectionInfo
char Signon[100]; // User/Pass/Appl for Outgoing Connects
BOOL Keepalive; // For HOST (esp CCC) Keepalives
time_t LastSendTime;
time_t LastReceiveTime;
BOOL NoCallsign; // Don't Send Callsign to host if no Signon
UCHAR * ResendBuffer; // Used if send() returns EWOULDBLOCK
int ResendLen; // Len to resend