xref: /openbsd-src/usr.sbin/rpki-client/rrdp.h (revision 2bb4ff2531469f8c920484fdaf91e52b798ef96e)
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