/* * mgmt-cli.c * --------- * Management CLI code. * * Copyright (c) 2016-2017, NORDUnet A/S All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the NORDUnet nor the names of its contributors may * be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include /* Rename both CMSIS HAL_OK and libhal HAL_OK to disambiguate */ #define HAL_OK CMSIS_HAL_OK #include "stm-init.h" #include "stm-uart.h" #include "stm-led.h" #include "task.h" #include "mgmt-cli.h" #include "mgmt-firmware.h" #include "mgmt-bootloader.h" #include "mgmt-fpga.h" #include "mgmt-misc.h" #include "mgmt-keystore.h" #include "mgmt-masterkey.h" #include "mgmt-task.h" #undef HAL_OK #define HAL_OK LIBHAL_OK #include "hal.h" #warning Refactor so we do not need to include hal_internal.h here #include "hal_internal.h" #undef HAL_OK static tcb_t *cli_task; #ifndef CLI_UART_RECVBUF_SIZE #define CLI_UART_RECVBUF_SIZE 256 #endif typedef struct { unsigned ridx; unsigned widx; mgmt_cli_dma_state_t rx_state; uint8_t buf[CLI_UART_RECVBUF_SIZE]; } ringbuf_t; inline void ringbuf_init(ringbuf_t *rb) { memset(rb, 0, sizeof(*rb)); } /* return number of characters read */ inline int ringbuf_read_char(ringbuf_t *rb, uint8_t *c) { if (rb->ridx != rb->widx) { *c = rb->buf[rb->ridx]; if (++rb->ridx >= sizeof(rb->buf)) rb->ridx = 0; return 1; } return 0; } inline void ringbuf_write_char(ringbuf_t *rb, uint8_t c) { rb->buf[rb->widx] = c; if (++rb->widx >= sizeof(rb->buf)) rb->widx = 0; } static ringbuf_t uart_ringbuf; /* current character received from UART */ static uint8_t uart_rx; /* Callback for HAL_UART_Receive_DMA(). */ void HAL_UART1_RxCpltCallback(UART_HandleTypeDef *huart) { huart = huart; ringbuf_write_char(&uart_ringbuf, uart_rx); task_wake(cli_task); } static void uart_cli_print(struct cli_def *cli __attribute__ ((unused)), const char *buf) { char crlf[] = "\r\n"; uart_send_string(buf); uart_send_string(crlf); } static ssize_t uart_cli_read(struct cli_def *cli __attribute__ ((unused)), void *buf, size_t count) { for (size_t i = 0; i < count; ++i) { while (ringbuf_read_char(&uart_ringbuf, (uint8_t *)(buf + i)) == 0) task_sleep(); } return (ssize_t)count; } static ssize_t uart_cli_write(struct cli_def *cl
Attempts to convert Permatrac Wiki to Markdown format.

Last time I had to do something like this it looks like I took the
Trac -> HTML -> html2markdown path.  Could do that again.  Recipe for
fetching the HTML:

     wget -r --user=sra@hactrn.net --ask-password https://permatrac.noc.ietf.org/wiki/

Slightly better recipe:

     wget -m -R '*[?]*' --user=sra@hactrn.net --ask-password https://permatrac.noc.ietf.org/wiki/

But either way, `wget` seems to be non-terminating when walking this
site, even if it throws away .999 of what it retrieves.  In theory,
adding `-np` would have fixed this; in practice doing so causes it not
to recurse at all.  Grrr.

Scripts from rpki.net/doc/*/*.{sh,py,xsl}, included here under tools/.

The other approach is converting Trac wiki directly to markdown.
There are hacks for this, in Ruby:

  https://gist.github.com/somebox/619537

But there are also Python versions, which are a bit more tractible.
Several of them included in tools/ too.


The most promising approach looks to be `tools/trac2md.py`, which is a
bit crude but is written in a relatively sane style so should be fixable.