62 const auto c = msg.
code();
63 const auto validCode = ( c >= ProvideMessage::Code::FirstInformalCode && c <= ProvideMessage::Code::LastInformalCode )
64 || ( c >= ProvideMessage::Code::FirstSuccessCode && c <= ProvideMessage::Code::LastSuccessCode )
65 || ( c >= ProvideMessage::Code::FirstRedirCode && c <= ProvideMessage::Code::LastRedirCode )
66 || ( c >= ProvideMessage::Code::FirstClientErrCode && c <= ProvideMessage::Code::LastClientErrCode )
67 || ( c >= ProvideMessage::Code::FirstSrvErrCode && c <= ProvideMessage::Code::LastSrvErrCode )
68 || ( c >= ProvideMessage::Code::FirstControllerCode && c <= ProvideMessage::Code::LastControllerCode)
69 || ( c >= ProvideMessage::Code::FirstWorkerCode && c <= ProvideMessage::Code::LastWorkerCode );
71 return zyppng::expected<void>::error(
ZYPP_EXCPT_PTR ( InvalidMessageReceivedException(
"Invalid code in ProvideMessage")) );
74 #define DEF_REQ_FIELD( fname ) bool has_##fname = false
76 #define REQ_FIELD_CHECK( msgtype, fname, ftype ) \
77 if ( name == #fname ) { \
78 if ( !std::holds_alternative<ftype>(val.asVariant()) ) { \
79 error = ZYPP_EXCPT_PTR( InvalidMessageReceivedException( zypp::str::Str() << "Parse error " << #msgtype << ", Field " << #fname << " has invalid type" ) ); \
85 #define OR_REQ_FIELD_CHECK( msgtype, fname, ftype ) else REQ_FIELD_CHECK( msgtype, fname, ftype )
87 #define OPT_FIELD_CHECK( msgtype, fname, ftype ) \
88 if ( name == #fname ) { \
89 if ( !std::holds_alternative<ftype>(val.asVariant() ) ) { \
90 error = ZYPP_EXCPT_PTR( InvalidMessageReceivedException( zypp::str::Str() << "Parse error " << #msgtype << ", Field " << #fname << " has invalid type" ) ); \
95 #define OR_OPT_FIELD_CHECK( msgtype, fname, ftype ) else OPT_FIELD_CHECK( msgtype, fname, ftype )
97 #define FAIL_IF_NOT_SEEN_REQ_FIELD( msgtype, fname ) \
99 return expected<void>::error( ZYPP_EXCPT_PTR( InvalidMessageReceivedException( zypp::str::Str() << #msgtype <<" message does not contain required " << #fname << " field" ) ) )
101 #define FAIL_IF_ERROR( ) \
102 if ( error ) return expected<void>::error( error )
104 const auto &validateErrorMsg = [](
const auto &msg ){
105 std::exception_ptr error;
115 return expected<void>::success();
120 case ProvideMessage::Code::ProvideStarted: {
121 std::exception_ptr error;
133 case ProvideMessage::Code::ProvideFinished: {
134 std::exception_ptr error;
147 case ProvideMessage::Code::AttachFinished: {
151 case ProvideMessage::Code::DetachFinished: {
155 case ProvideMessage::Code::AuthInfo: {
156 std::exception_ptr error;
173 case ProvideMessage::Code::MediaChanged:
176 case ProvideMessage::Code::Redirect: {
177 std::exception_ptr error;
187 case ProvideMessage::Code::Metalink: {
188 std::exception_ptr error;
198 case ProvideMessage::Code::BadRequest:
199 case ProvideMessage::Code::Unauthorized:
200 case ProvideMessage::Code::Forbidden:
201 case ProvideMessage::Code::PeerCertificateInvalid:
202 case ProvideMessage::Code::NotFound:
203 case ProvideMessage::Code::ExpectedSizeExceeded:
204 case ProvideMessage::Code::ConnectionFailed:
205 case ProvideMessage::Code::Timeout:
206 case ProvideMessage::Code::Cancelled:
207 case ProvideMessage::Code::InvalidChecksum:
208 case ProvideMessage::Code::MountFailed:
209 case ProvideMessage::Code::Jammed:
210 case ProvideMessage::Code::NoAuthData:
211 case ProvideMessage::Code::MediaChangeAbort:
212 case ProvideMessage::Code::MediaChangeSkip:
213 case ProvideMessage::Code::InternalError: {
214 const auto &e = validateErrorMsg(msg);
219 case ProvideMessage::Code::Provide: {
220 std::exception_ptr error;
235 case ProvideMessage::Code::Cancel:
239 case ProvideMessage::Code::Attach: {
240 std::exception_ptr error;
264 if ( ! ( ( has_verify_data == has_verify_type ) && ( has_verify_type == has_media_nr ) ) )
265 return expected<void>::error(
ZYPP_EXCPT_PTR ( InvalidMessageReceivedException(
"Error in Attach message, one of the following fields is not set or invalid: ( verify_type, verify_data, media_nr ). Either none or all need to be set. ")) );
269 case ProvideMessage::Code::Detach: {
270 std::exception_ptr error;
280 case ProvideMessage::Code::AuthDataRequest: {
281 std::exception_ptr error;
294 case ProvideMessage::Code::MediaChangeRequest: {
295 std::exception_ptr error;
314 if ( c >= ProvideMessage::Code::FirstClientErrCode && c <= ProvideMessage::Code::LastSrvErrCode ) {
315 const auto &e = validateErrorMsg(msg);
322 return expected<void>::success();