1*2bb4ff25Sclaudio /* $OpenBSD: rrdp.h,v 1.9 2022/05/19 13:12:35 claudio Exp $ */ 2faf90414Sclaudio /* 3faf90414Sclaudio * Copyright (c) 2020 Nils Fisher <nils_fisher@hotmail.com> 4faf90414Sclaudio * Copyright (c) 2021 Claudio Jeker <claudio@openbsd.org> 5faf90414Sclaudio * 6faf90414Sclaudio * Permission to use, copy, modify, and distribute this software for any 7faf90414Sclaudio * purpose with or without fee is hereby granted, provided that the above 8faf90414Sclaudio * copyright notice and this permission notice appear in all copies. 9faf90414Sclaudio * 10faf90414Sclaudio * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11faf90414Sclaudio * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12faf90414Sclaudio * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13faf90414Sclaudio * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14faf90414Sclaudio * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15faf90414Sclaudio * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16faf90414Sclaudio * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17faf90414Sclaudio */ 188ecbadc1Sclaudio #ifndef _RRDPH_ 198ecbadc1Sclaudio #define _RRDPH_ 208ecbadc1Sclaudio 218e901cb8Sclaudio #define RRDP_XMLNS "http://www.ripe.net/rpki/rrdp" 228ecbadc1Sclaudio #define MAX_VERSION 1 238ecbadc1Sclaudio 248ecbadc1Sclaudio /* save everyone doing this code over and over */ 258ecbadc1Sclaudio #define PARSE_FAIL(p, ...) do { \ 268ecbadc1Sclaudio XML_StopParser(p, XML_FALSE); \ 278ecbadc1Sclaudio warnx(__VA_ARGS__); \ 288ecbadc1Sclaudio return; \ 298ecbadc1Sclaudio } while (0) 308ecbadc1Sclaudio 318ecbadc1Sclaudio enum rrdp_task { 328ecbadc1Sclaudio NOTIFICATION, 338ecbadc1Sclaudio SNAPSHOT, 348ecbadc1Sclaudio DELTA, 358ecbadc1Sclaudio }; 368ecbadc1Sclaudio 37aef00ae0Sclaudio struct rrdp; 38aef00ae0Sclaudio 39aef00ae0Sclaudio struct publish_xml { 40aef00ae0Sclaudio char *uri; 41aef00ae0Sclaudio char *data; 42aef00ae0Sclaudio char hash[SHA256_DIGEST_LENGTH]; 43aef00ae0Sclaudio size_t data_length; 44aef00ae0Sclaudio enum publish_type type; 45aef00ae0Sclaudio }; 46aef00ae0Sclaudio 478ecbadc1Sclaudio /* rrdp generic */ 488ecbadc1Sclaudio char *xstrdup(const char *); 49aef00ae0Sclaudio void rrdp_publish_file(struct rrdp *, struct publish_xml *, 50aef00ae0Sclaudio unsigned char *, size_t); 518ecbadc1Sclaudio 52aef00ae0Sclaudio /* rrdp util */ 538ecbadc1Sclaudio struct publish_xml *new_publish_xml(enum publish_type, char *, 548ecbadc1Sclaudio char *, size_t); 558ecbadc1Sclaudio void free_publish_xml(struct publish_xml *); 561aea4e0eSclaudio int publish_add_content(struct publish_xml *, 578ecbadc1Sclaudio const char *, int); 588ecbadc1Sclaudio int publish_done(struct rrdp *, struct publish_xml *); 598ecbadc1Sclaudio 608ecbadc1Sclaudio /* notification */ 618ecbadc1Sclaudio struct notification_xml; 628ecbadc1Sclaudio 638ecbadc1Sclaudio struct notification_xml *new_notification_xml(XML_Parser, 6493d9375cSclaudio struct rrdp_session *, struct rrdp_session *, 6593d9375cSclaudio const char *); 668ecbadc1Sclaudio void free_notification_xml(struct notification_xml *); 678ecbadc1Sclaudio enum rrdp_task notification_done(struct notification_xml *, 688ecbadc1Sclaudio char *); 698ecbadc1Sclaudio const char *notification_get_next(struct notification_xml *, 708ecbadc1Sclaudio char *, size_t, enum rrdp_task); 718ecbadc1Sclaudio int notification_delta_done(struct notification_xml *); 728ecbadc1Sclaudio void log_notification_xml(struct notification_xml *); 738ecbadc1Sclaudio 748ecbadc1Sclaudio /* snapshot */ 758ecbadc1Sclaudio struct snapshot_xml; 768ecbadc1Sclaudio 778ecbadc1Sclaudio struct snapshot_xml *new_snapshot_xml(XML_Parser, struct rrdp_session *, 788ecbadc1Sclaudio struct rrdp *); 798ecbadc1Sclaudio void free_snapshot_xml(struct snapshot_xml *); 808ecbadc1Sclaudio void log_snapshot_xml(struct snapshot_xml *); 818ecbadc1Sclaudio 828ecbadc1Sclaudio /* delta */ 838ecbadc1Sclaudio struct delta_xml; 848ecbadc1Sclaudio 858ecbadc1Sclaudio struct delta_xml *new_delta_xml(XML_Parser, struct rrdp_session *, 868ecbadc1Sclaudio struct rrdp *); 878ecbadc1Sclaudio void free_delta_xml(struct delta_xml *); 888ecbadc1Sclaudio void log_delta_xml(struct delta_xml *); 898ecbadc1Sclaudio 908ecbadc1Sclaudio #endif /* _RRDPH_ */ 91