diff --git a/include/asterisk/res_pjsip_pubsub.h b/include/asterisk/res_pjsip_pubsub.h index 94576d38b04c902047fa57663062b57fade2d660..4f9a7633afb916bfed872e7de0b09ea234baeadc 100644 --- a/include/asterisk/res_pjsip_pubsub.h +++ b/include/asterisk/res_pjsip_pubsub.h @@ -648,6 +648,19 @@ struct ast_sip_pubsub_body_supplement { int ast_sip_pubsub_generate_body_content(const char *content_type, const char *content_subtype, struct ast_sip_body_data *data, struct ast_str **str); +/*! + * \brief Is a body generator registered for the given type/subtype. + * \since 14.0.0 + * + * \param type The content type of the body + * \param subtype The content subtype of the body + * + * \note In "plain/text", "plain" is the type and "text" is the subtype. + * + * \retval non-zero if a generator is registered. + */ +int ast_sip_pubsub_is_body_generator_registered(const char *type, const char *subtype); + /*! * \since 13.0.0 * \brief Register a body generator with the pubsub core. diff --git a/res/res_pjsip_exten_state.c b/res/res_pjsip_exten_state.c index 555402469e0cd651369922d6f8ed7ceb2188d5ce..6b4e758d3d17711011206e4d8e4a22fe77e14795 100644 --- a/res/res_pjsip_exten_state.c +++ b/res/res_pjsip_exten_state.c @@ -680,6 +680,12 @@ static int publisher_start(struct ast_sip_outbound_publish *configuration, struc return -1; } + if (!ast_sip_pubsub_is_body_generator_registered(body_type, body_subtype)) { + ast_log(LOG_ERROR, "Outbound extension state publisher '%s': '%s' body generator not registered\n", + name, body_full); + return -1; + } + name_size = strlen(name) + 1; body_type_size = strlen(body_type) + 1; body_subtype_size = strlen(body_subtype) + 1; diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c index dc49a5fd302a59c3d7428923df8b5e9bbdaaf57c..755a154a5a49c058e586481e00ec8f7f13bb862c 100644 --- a/res/res_pjsip_pubsub.c +++ b/res/res_pjsip_pubsub.c @@ -3094,6 +3094,11 @@ const char *ast_sip_publication_get_event_configuration(const struct ast_sip_pub return pub->event_configuration_name; } +int ast_sip_pubsub_is_body_generator_registered(const char *type, const char *subtype) +{ + return !!find_body_generator_type_subtype(type, subtype); +} + int ast_sip_pubsub_register_body_generator(struct ast_sip_pubsub_body_generator *generator) { struct ast_sip_pubsub_body_generator *existing;